Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

1. 2. Discuss the importance and value of register SvO when using syscall Write

ID: 3887177 • Letter: 1

Question

1. 2. Discuss the importance and value of register SvO when using syscall Write a program in MIPS assembly language that implements the following a. Ask the user to input his/her name b. Greet the user with his/her name and ask for an integer. The message should c. d. e. look like" ello (user name, please input an integer and press Enter." If the integer is odd print "The integer is odd" If the integer is even print "The integer is even" Terminate with politely greeting the user using his/her name. The message should look like "Goodbye (user name, thank you for your input“

Explanation / Answer

1.

In MARS 3.7, the result register was changed to $v0 for SPIM compatability.

It was previously $a0 as erroneously printed in Appendix B of Computer Organization and Design.

Importance -----> When using SYSCALL system services, $v0 is used to Load the service number.

Value ----> Value of register $v0 is the result of the read when using syscall.

2.

MIPS assembly language program ----->

.LC0:

.ascii "Enter username : "

.LC1:

.ascii "Hello "

.LC2:

.ascii ", please input an integer and press Enter "

.LC3:

.ascii "The integer is even"

.LC4:

.ascii "The integer is odd"

.LC5:

.ascii "Goodbye "

.LC6:

.ascii " , thank you for your input"

main:

daddiu $sp,$sp,-80

sd $31,72($sp)

sd $fp,64($sp)

sd $28,56($sp)

sd $16,48($sp)

move $fp,$sp

lui $28,%hi(%neg(%gp_rel(main)))

daddu $28,$28,$25

daddiu $28,$28,%lo(%neg(%gp_rel(main)))

daddiu $2,$fp,8

move $4,$2

ld $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string())($28)

move $25,$2

1: jalr $25

nop

ld $2,%got_page(.LC0)($28)

daddiu $5,$2,%got_ofst(.LC0)

ld $4,%got_disp(std::cout)($28)

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

daddiu $2,$fp,8

move $5,$2

ld $4,%got_disp(std::cin)($28)

ld $2,%call16(std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&))($28)

move $25,$2

1: jalr $25

nop

ld $5,%got_disp(std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&))($28)

ld $4,%got_disp(std::cout)($28)

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC1)($28)

daddiu $5,$2,%got_ofst(.LC1)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

daddiu $2,$fp,8

move $5,$2

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC2)($28)

daddiu $5,$2,%got_ofst(.LC2)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

move $5,$fp

ld $4,%got_disp(std::cin)($28)

ld $2,%call16(std::basic_istream<char, std::char_traits<char> >::operator>>(int&))($28)

move $25,$2

1: jalr $25

nop

lw $2,0($fp)

andi $2,$2,0x1

bne $2,$0,.L2

nop

ld $5,%got_disp(std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&))($28)

ld $4,%got_disp(std::cout)($28)

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC3)($28)

daddiu $5,$2,%got_ofst(.LC3)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

b .L3

nop

.L2:

ld $5,%got_disp(std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&))($28)

ld $4,%got_disp(std::cout)($28)

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC4)($28)

daddiu $5,$2,%got_ofst(.LC4)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

.L3:

ld $5,%got_disp(std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&))($28)

ld $4,%got_disp(std::cout)($28)

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&)))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC5)($28)

daddiu $5,$2,%got_ofst(.LC5)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

daddiu $2,$fp,8

move $5,$2

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&))($28)

move $25,$2

1: jalr $25

nop

move $3,$2

ld $2,%got_page(.LC6)($28)

daddiu $5,$2,%got_ofst(.LC6)

move $4,$3

ld $2,%call16(std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*))($28)

move $25,$2

1: jalr $25

nop

move $16,$0

daddiu $2,$fp,8

move $4,$2

ld $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string())($28)

move $25,$2

1: jalr $25

nop

move $2,$16

b .L7

nop

move $16,$4

daddiu $2,$fp,8

move $4,$2

ld $2,%call16(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string())($28)

move $25,$2

1: jalr $25

nop

move $2,$16

move $4,$2

ld $2,%call16(_Unwind_Resume)($28)

move $25,$2

1: jalr $25

nop

.L7:

move $sp,$fp

ld $31,72($sp)

ld $fp,64($sp)

ld $28,56($sp)

ld $16,48($sp)

daddiu $sp,$sp,80

j $31

nop

__static_initialization_and_destruction_0(int, int):

daddiu $sp,$sp,-48

sd $31,40($sp)

sd $fp,32($sp)

sd $28,24($sp)

move $fp,$sp

lui $28,%hi(%neg(%gp_rel(__static_initialization_and_destruction_0(int, int))))

daddu $28,$28,$25

daddiu $28,$28,%lo(%neg(%gp_rel(__static_initialization_and_destruction_0(int, int))))

move $3,$4

move $2,$5

sll $3,$3,0

sw $3,0($fp)

sll $2,$2,0

sw $2,4($fp)

lw $3,0($fp)

li $2,1 # 0x1

bne $3,$2,.L10

nop

lw $3,4($fp)

li $2,65535 # 0xffff

bne $3,$2,.L10

nop

ld $2,%got_page(std::__ioinit)($28)

daddiu $4,$2,%got_ofst(std::__ioinit)

ld $2,%call16(std::ios_base::Init::Init())($28)

move $25,$2

1: jalr $25

nop

ld $6,%got_disp(__dso_handle)($28)

ld $2,%got_page(std::__ioinit)($28)

daddiu $5,$2,%got_ofst(std::__ioinit)

ld $4,%got_disp(std::ios_base::Init::~Init())($28)

ld $2,%call16(__cxa_atexit)($28)

move $25,$2

1: jalr $25

nop

.L10:

nop

move $sp,$fp

ld $31,40($sp)

ld $fp,32($sp)

ld $28,24($sp)

daddiu $sp,$sp,48

j $31

nop

_GLOBAL__sub_I_main:

daddiu $sp,$sp,-32

sd $31,24($sp)

sd $fp,16($sp)

sd $28,8($sp)

move $fp,$sp

lui $28,%hi(%neg(%gp_rel(_GLOBAL__sub_I_main)))

daddu $28,$28,$25

daddiu $28,$28,%lo(%neg(%gp_rel(_GLOBAL__sub_I_main)))

li $5,65535 # 0xffff

li $4,1 # 0x1

ld $2,%got_page(__static_initialization_and_destruction_0(int, int))($28)

daddiu $2,$2,%got_ofst(__static_initialization_and_destruction_0(int, int))

move $25,$2

1: jalr $25

nop

move $sp,$fp

ld $31,24($sp)

ld $fp,16($sp)

ld $28,8($sp)

daddiu $sp,$sp,32

j $31

nop

DW.ref.__gxx_personality_v0:

Output :-