MIPS跳转指令和绝对值的后果

时间:2017-11-23 11:40:19

标签: assembly mips32 machine-code

假设我们在地址0x20000004处有一个跳转指令。现在,据我所知,跳转间隔与PC值无关,但绝对间隔约为32位寄存器最大值的1/16。现在,考虑如何在机器代码中构造跳转指令,是否意味着在这种特殊情况下最大向后跳转是1条指令,还是地址为0x20000000?或者在相反的情况下:在地址0x1FFFFFFC处跳转指令,我想跳过2条指令到地址0x20000004。这不可行吗?汇编程序如何设法不在这两种情况之一中放置指令? 编辑:修正了一些错误

1 个答案:

答案 0 :(得分:1)

  • 目标地址的低28位设置为J指令字的26个最低有效位,向左移2位。
  • 目标地址的高4位设置为分支延迟时隙中指令地址的4个最高有效位。

因此,您可以跳转到与分支延迟槽中的指令相同的256 MB区域内的任何位置(具有字粒度)。在实践中,除了J指令位于256 MB区域的最后一个字中的情况之外,这与能够在与J指令相同的256 MB区域内的任何位置跳转是相同的。