Please do in the simplest and most basic manner 2. Write a program in MIPS assem
ID: 3886975 • Letter: P
Question
Please do in the simplest and most basic manner
2. 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 look like “Hello (user name), please input an integer and press Enter.” c. If the integer is odd print “The integer is odd” d. If the integer is even print “The integer is even” e. 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
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 :-