MIPS计算跳转指令的机器编码

时间:2016-09-15 11:41:49

标签: assembly mips

我想知道如何计算跳转指令的机器编码。

让我说我有 j foo
地址0x00400000
现在,如果foo位于地址0x0040002c,该怎么办?然后,我如何找到跳转指令的机器编码?

[0x00400000] j foo
...
[0x0040002c] foo:
在Youtube上找到一些指南,说它会像是一样的 ((400000 + 4) - 40002c)/ 4
但是跳转有操作码2,我没有得到这个计算。

谢谢

1 个答案:

答案 0 :(得分:2)

J具有操作码2,编码为:

---------------------------
| opcode |     target     |
---------------------------
 6 bits       26 bits

因此,指令词应为(2 << 26) | target 现在,JJAL不是PC相关的,而是PC区域相对的。也就是说,target是从当前正在执行的256MB区域的开头到目标地址到目标地址的距离。0x00400000所在的256MB区域从0x00000000开始。因此,target将被编码为(0x0040002c - 0x00000000) >> 2 == 0x0010000B。这会为您提供说明字(2 << 26) | 0x0010000B == 0x0810000B