使用jal陷入无限循环

时间:2014-10-12 21:15:31

标签: assembly mips spim mars-simulator

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,所以它可以退出循环?

1 个答案:

答案 0 :(得分:1)

jal保存$ra的值,覆盖之前的任何值。你想要做的是在必要时将$ra保存到堆栈中,然后在需要时将其弹出。