In: Computer Science
I need a MIPS Assembly program that "Display the elements of the linked list in reverse order." It needs subprogram and those subprogram does not have t registers.
Please give positive ratings for my effort. Thanks.
PROGRAM
.LC0:
.ascii " \000"
printReverse(Node*):
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(printReverse(Node*))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(printReverse(Node*))))
sd $4,0($fp)
ld $2,0($fp)
beq $2,$0,.L4
nop
ld $2,0($fp)
ld $2,8($2)
move $4,$2
ld $2,%got_disp(printReverse(Node*))($28)
move $25,$2
nop
ld $2,0($fp)
lw $2,0($2)
move $5,$2
ld $4,%got_disp(_ZSt4cout)($28)
ld $2,%call16(_ZNSolsEi)($28)
move $25,$2
nop
move $3,$2
ld $2,%got_page(.LC0)($28)
daddiu $5,$2,%got_ofst(.LC0)
move $4,$3
ld $2,%call16(_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc)($28)
move $25,$2
nop
b .L1
nop
.L4:
nop
.L1:
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
j $31
nop
push(Node**, char):
daddiu $sp,$sp,-64
sd $31,56($sp)
sd $fp,48($sp)
sd $28,40($sp)
move $fp,$sp
lui $28,%hi(%neg(%gp_rel(push(Node**, char))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(push(Node**, char))))
sd $4,16($fp)
move $2,$5
sll $2,$2,0
sb $2,24($fp)
li $4,16 # 0x10
ld $2,%call16(_Znwm)($28)
move $25,$2
nop
sw $0,0($2)
sd $0,8($2)
sd $2,0($fp)
lb $2,24($fp)
move $3,$2
ld $2,0($fp)
sw $3,0($2)
ld $2,16($fp)
ld $3,0($2)
ld $2,0($fp)
sd $3,8($2)
ld $2,16($fp)
ld $3,0($fp)
sd $3,0($2)
nop
move $sp,$fp
ld $31,56($sp)
ld $fp,48($sp)
ld $28,40($sp)
daddiu $sp,$sp,64
j $31
nop
main:
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(main)))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(main)))
sd $0,0($fp)
li $5,4 # 0x4
move $4,$fp
ld $2,%got_disp(push(Node**, char))($28)
move $25,$2
nop
li $5,3 # 0x3
move $4,$fp
ld $2,%got_disp(push(Node**, char))($28)
move $25,$2
nop
li $5,2 # 0x2
move $4,$fp
ld $2,%got_disp(push(Node**, char))($28)
move $25,$2
nop
li $5,1 # 0x1
move $4,$fp
ld $2,%got_disp(push(Node**, char))($28)
move $25,$2
nop
ld $2,0($fp)
move $4,$2
ld $2,%got_disp(printReverse(Node*))($28)
move $25,$2
nop
move $2,$0
move $sp,$fp
ld $31,40($sp)
ld $fp,32($sp)
ld $28,24($sp)
daddiu $sp,$sp,48
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(_ZStL8__ioinit)($28)
daddiu $4,$2,%got_ofst(_ZStL8__ioinit)
ld $2,%call16(_ZNSt8ios_base4InitC1Ev)($28)
move $25,$2
nop
ld $6,%got_disp(__dso_handle)($28)
ld $2,%got_page(_ZStL8__ioinit)($28)
daddiu $5,$2,%got_ofst(_ZStL8__ioinit)
ld $4,%got_disp(_ZNSt8ios_base4InitD1Ev)($28)
ld $2,%call16(__cxa_atexit)($28)
move $25,$2
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_printReverse(Node*):
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_printReverse(Node*))))
daddu $28,$28,$25
daddiu $28,$28,%lo(%neg(%gp_rel(_GLOBAL__sub_I_printReverse(Node*))))
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
nop
move $sp,$fp
ld $31,24($sp)
ld $fp,16($sp)
ld $28,8($sp)
daddiu $sp,$sp,32
j $31
nop
IMAGE OF OUTPUT