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 对齐区域的开始。
我现在正在学习 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 对齐区域的开始。