是否可以使用条件跳转以mips跳转到$ ra?

时间:2016-03-30 03:25:52

标签: mips

例如在while循环中:

whileloop1:
       sll $t3, $t1, 2        # i * 4
       move $t4, $a1          # temp = base address of a
       add $t4, $t4, $t3      # move the address of a[i]
       lw $t5, ($t4)          # store a[i] in temp
       bge $t5, $t0, $ra      # if a[i] >= p return 
       addi $t1, $t1, 1       # add 1 to i
       j whileloop1           #restart loop

它会链接回这样的函数:

differentlabel:
                #some code
                jal whileloop1
                #use results 

是否有可能以某种方式跳回$ ra?

2 个答案:

答案 0 :(得分:2)

有点儿。 mips中的分支指令使用相对寻址,这意味着您必须使用立即数据(通常是标签),而不是像$ra这样的寄存器的内容。

话虽这么说,你可以使用一个标签,然后从那里返回。

答案 1 :(得分:2)

如果我想创建一个条件jr,我会合并一个分支和一个jr

E.g。如果$s0等于$s1

,则分支
bne $s0 $s1 dontJump
jr  $ra
dontJump: