main:
jal function1
#Exit Program
li $v0, 10
syscall
function1:
li $s0, 0
jal function2
jr $ra
function2:
jal external_function
beq $s0, 5, function2_end
#Run loop 5 times
addi $s0, $s0, 1
function2_end:
jr $ra
external_function:
#Does random operation
jr $ra
所以这只是我使用MIPS的问题的一个例子。我陷入无限循环,因为function2_end将继续跳转到external_function。
有没有办法让function2_end跳回到function1,所以它可以退出循环?
答案 0 :(得分:1)
jal
保存$ra
的值,覆盖之前的任何值。你想要做的是在必要时将$ra
保存到堆栈中,然后在需要时将其弹出。