了解MIPS跳转指令编码

问题描述 投票:0回答:1

我正在努力理解 MIPS 跳转指令编码的细节,特别是在处理位于地址 0x00400008 的指令时。上下文涉及跳转到 foo 指定的地址,其中标签 foo 位于地址 0x00400024 处。

答案应该是0x08100009。

据我所知,您需要使用给定的信息计算跳转目标地址:

  • 由于字对齐,两个最低有效位始终为 0。
  • 四个最高有效位来自 PC+4,我们设置 addr = target >> 2。
  • 预期结果:0x08100009。

但是如果 2 个最低有效位是 0,为什么我们最终会得到数字 0x0…9?

assembly mips mips32
1个回答
0
投票

从预期结果来看,您实际上是在对指令进行编码,而不是尝试对公式适用的跳转目标进行解码。它还错误地使用了

address(label)
:它缺少一个位范围 27:2。砍掉 2 个最低有效位相当于除以 4。基本原理是指令的大小为 32 位并且自然对齐,因此您不需要存储两个零位和末尾。

要获取机器代码,您需要知道指令格式,即二进制的

0000 10 address[27:2]
0000 10
是操作码。

在您的情况下,目标地址是

0x00400024
。只需除以 4 即可得到适当的位:
0x100009
。预先添加操作码以获得预期的
0x08100009
(请注意操作码是 6 位,因此在使用十六进制时必须小心)

© www.soinside.com 2019 - 2024. All rights reserved.