MIPS 分支指令跳转超出范围
MIPS Branch instruction jumping beyond range
我知道在用于 PC 寻址的 MIP 中有一个最大跳跃范围。但是,如果我要跳转的地址超出范围怎么办?
即beq $s0, $s1, L1
其中 L1 远离 PC,bne
和 beq
可以支持。有什么方法可以构建等效的代码序列吗?
因此,如果 I-Type 命令的 16 位不足以用于 L1,您可以使用 J-Type,因为它有 26 位用于您的地址(只需围绕它构建您的 if)。MIPS I-Type vs J-Type
如果这还不够,您应该使用以下方法将您的地址保存到寄存器中:la $t0, L1
然后跳转到该寄存器使用:jr $t0
如果你先将它保存到一个寄存器,你就有了完整的 32 位地址。
我知道在用于 PC 寻址的 MIP 中有一个最大跳跃范围。但是,如果我要跳转的地址超出范围怎么办?
即beq $s0, $s1, L1
其中 L1 远离 PC,bne
和 beq
可以支持。有什么方法可以构建等效的代码序列吗?
因此,如果 I-Type 命令的 16 位不足以用于 L1,您可以使用 J-Type,因为它有 26 位用于您的地址(只需围绕它构建您的 if)。MIPS I-Type vs J-Type
如果这还不够,您应该使用以下方法将您的地址保存到寄存器中:la $t0, L1
然后跳转到该寄存器使用:jr $t0
如果你先将它保存到一个寄存器,你就有了完整的 32 位地址。