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

MIPS jump instruction and consequence of the absolute value

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

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

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