MIPS 分支指令

MIPS Branch Instructions

我现在正在学习 MIPS,当我阅读文档时,它说:

An 18-bit signed offset (the 16-bit offset field shifted left 2 bits)

我想知道为什么对于分支指令偏移量要乘以 4?文档还指出,这使得分支指令的范围为 128 kb,因为 32kb 乘以 4。此乘法仅适用于分支指令还是也适用于跳转指令?

谢谢!

I was wondering why exactly for branch instructions the offset is being multiplied by 4?

所有指令都必须字对齐。由此可见,起点和终点都是字对齐的,这反过来意味着偏移量也总是字对齐的。因此,存储偏移量的两个最低有效位将是一种浪费,因为它们始终为 0。相反,我们可以使用指令字中的可用位通过仅存储 16 个最高有效位来编码 18 位偏移量。

Does this multiplication only apply to branch instructions or does it also apply to Jump instructions as well?

跳转指令同理。尽管跳转指令在其他方面有所不同;跳转的偏移量与 PC 无关,而是相对于 PC 当前所在的 256MB 对齐区域的开始。