MIPS:分支使用间接跳转?

时间:2015-01-14 18:45:39

标签: code-generation mips addressing

假设一个名为L1的标签。在MIPS上,人们可以很容易地做到:

beq $t1, $t2, L1

但是有没有办法使用间接寻址来做同样的事情?我的意思是使用一个寄存器来保存找到L1的地址。我知道jr命令,但我不知道它是如何用于此目的的。

1 个答案:

答案 0 :(得分:2)

beq在其第3个参数中需要立即值,而不是寄存器或内存地址。

根据this manual的第55页(PDF中的第63页),beq的范围是-128 KB到+ 128KB,这正是签名的16位的4倍整数可以表示:-32 KB到+32 KB(因为指令长度为4个字节,自动应用乘数4)。

我认为jr应该能够达到你想要的效果。不要使用寄存器指向存储器地址XX,只需将地址XX的值加载到寄存器中并使用它来跳转。

lw $t0, XX
jr $t0