MIPS 分支指令跳转超出范围

MIPS Branch instruction jumping beyond range

我知道在用于 PC 寻址的 MIP 中有一个最大跳跃范围。但是,如果我要跳转的地址超出范围怎么办?

beq $s0, $s1, L1

其中 L1 远离 PC,bnebeq 可以支持。有什么方法可以构建等效的代码序列吗?

因此,如果 I-Type 命令的 16 位不足以用于 L1,您可以使用 J-Type,因为它有 26 位用于您的地址(只需围绕它构建您的 if)。MIPS I-Type vs J-Type

如果这还不够,您应该使用以下方法将您的地址保存到寄存器中:la $t0, L1 然后跳转到该寄存器使用:jr $t0 如果你先将它保存到一个寄存器,你就有了完整的 32 位地址。