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

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 :-