MIPS:分支使用间接跳转?

MIPS: Branch using indirect jump?

假设有一个名为 L1 的标签。在 MIPS 上,可以轻松做到:

beq $t1, $t2, L1

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

beq 的第三个参数需要立即数,而不是寄存器或内存地址。

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

我觉得jr应该可以完成你想要的。不用寄存器指向内存地址XX,直接把地址XX的值加载到寄存器中,用它来跳转。

lw $t0, XX
jr $t0