MIPS:J格式指令和地址编码

时间:2014-02-17 20:58:44

标签: format mips memory-address instructions

在编写J格式指令的地址时,我很困惑。

来自班级笔记:

假设L1位于十进制的地址4194340,即十六进制的400024。我们将目标字段填充为指令(0x100009)中的地址而不是字节(0x400024)。

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

j指令跳转到传递的目标。

但是,由于指令集限制为32位,并且6用于操作码,因此只有26个可用于跳转目标。

这意味着j指令可以传播的距离是有限的,因为它通过将其目标附加到当前IPC的某些最高有效位来工作。

MIPS指令集可以通过以下方式定义:当遇到j指令时,将IPC的前6位添加到j指令的26位目标,而不是它注意到程序可以跳转的指令总是“字对齐”。这意味着这些地址始终是4的倍数,因此地址的最后2位始终为0.

这允许我们不对跳转目标中的最后2位进行编码,而是编码位3-28。这意味着要获取j指令的目标,您需要获取PC的前4位,添加跳转目标,然后添加两个零。

希望有了这样的解释,有意义的是为什么目标0x400024j指令中由位0x100009编码,即0x400024 >> 2。因为不需要最后两位。