例如在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?
答案 0 :(得分:2)
有点儿。 mips中的分支指令使用相对寻址,这意味着您必须使用立即数据(通常是标签),而不是像$ra
这样的寄存器的内容。
话虽这么说,你可以使用一个标签,然后从那里返回。
答案 1 :(得分:2)
如果我想创建一个条件jr
,我会合并一个分支和一个jr
。
E.g。如果$s0
等于$s1
bne $s0 $s1 dontJump
jr $ra
dontJump: