我正在阅读 Patterson 和 Hennessy 的“Computer Organization and Design”一书,并对 MIPS 感兴趣。
我对找到跳转/分支指令的范围有疑问。还用于确定到达特定地址所需的分支/跳转指令的数量。
有人可以解释如何计算它,即考虑特定地址的 PC 并找到转到不同地址所需的分支/跳转指令的数量吗?例如,如果PC在0x10001010,那么分支和跳转指令的地址范围是多少?
或者您能否将我引向一些有助于我更好地理解这些的在线资源或书籍?
最佳答案
以下是 MIPS-32 的全部内容。
分支 B, BEQ, BNE, etc.
指令有一个 16 位带符号的 字 偏移字段,允许分支到距离当前位置 +/- 128kBytes 的地址。一条跳转 J
指令指定当前 256MByte 区域内的地址,由 PC 的最高有效 4 位指定:26< 不是 相对地址)。要跳转到 4GB 地址空间中的任意地址,请使用 JR
(跳转寄存器),它跳转到包含在通用寄存器中的地址。
它需要一个单一的分支或跳转指令,或者一个寄存器加载,然后是一个 JR
来跳转到任意地址,这取决于地址有多远。
MIPS 编程最好的书仍然是 See MIPS Run 。您还可以在 mips.com(需要注册)中找到 MIPS 架构引用手册。最相关的文档是 MIPS32® 程序员架构第二卷:MIPS32® 指令集。
关于MIPS 跳转指令范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9030439/