我在C中有这个功能:
int func(int n0, int n){
if (n > 1){
int nFinal = func(n0, --n);
return (nFinal*nFinal) + n0;
}
return n0;
}
并想在汇编中对其进行编程。我有这个代码:
.data
.text
.globl func
func:
addi $29,$29, -4
sw $ra,0($29)
move $8,$4
move $9,$5
ble $9,1,fim
sub $9,$9,1
move $5,$9
jal func
move $4,$11
jal quadrado
add $11,$2,$8
j fim
quadrado:
mul $2,$4,$4
jr $31
fim:
lw $31,0($29)
move $2,$11
jr $31
如果传入 $4 和 $5 的参数分别是 2 和 1,我可以看到程序到达了ble
它按预期工作的指令。它跳转到fim
标签,从堆栈中恢复返回地址并将返回值传递给我的main
函数。
问题是参数 $5 的值未定义。它可以是任何给定的值。而且我相信我的程序的问题是我的main
函数的返回地址丢失了,程序无法返回它。我相信 wen 程序到达jal func
指令,main
返回地址被jal func
指令返回地址代替。
我怎么解决这个问题?(不问代码,只是一些方向)