我的任务是将以下c代码转换为MIPS程序集。
int compare(int a, int b) {
if ( add(b, a) >= 100)
return a;
else
return b; }
int add(int x, int y){
return (x+y); }
这是我设法编写的但不知何故它没有返回值。在我提供的用于测试程序的参数的情况下,它应该返回5。我猜测问题与堆栈指针和返回地址有关。 MARS模拟器告诉我:" - 程序运行完毕(从底部掉下来) - "
在MARS上编译的MIPS代码:
.data
.text
.globl main
main:
addiu $a0, $zero, 10
addiu $a1, $zero, 5
jal compare
addu $s1, $v0, $zero
addu $a0, $zero, $s1 # print value
li $v0, 1
syscall
li $v0, 10
syscall
compare:
addiu $sp, $sp, -12 #adjusting stac for 3 items
sw $ra, 0($sp)
sw $a0, 4($sp) #saving return address and arguments
sw $a1, 8($sp)
lw $a0, 8($sp) #swaping arguments
lw $a1, 4($sp)
jal addition #calling addition procedure
blt $v0, 100, return_b #if add(b,a) < 100 return b
lw $v0, 4($sp) #else
j return_value
return_b:
lw $v0, 8($sp)
return_value:
lw $ra, 0($sp)
lw $a0, 4($sp) #restoring arguemtns and return address
lw $a1, 8($sp)
addiu $sp, $sp, 12
jr $ra
addition:
addu $v0, $a0, $a1
jr $ra