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
假设有一个名为 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