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 :-
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.