在编写J格式指令的地址时,我很困惑。
来自班级笔记:
假设L1位于十进制的地址4194340,即十六进制的400024。我们将目标字段填充为指令(0x100009)中的地址而不是字节(0x400024)。
有人可以向我解释为什么会这样吗?
答案 0 :(得分:3)
j
指令跳转到传递的目标。
但是,由于指令集限制为32位,并且6用于操作码,因此只有26个可用于跳转目标。
这意味着j
指令可以传播的距离是有限的,因为它通过将其目标附加到当前IPC的某些最高有效位来工作。
MIPS指令集可以通过以下方式定义:当遇到j
指令时,将IPC的前6位添加到j
指令的26位目标,而不是它注意到程序可以跳转的指令总是“字对齐”。这意味着这些地址始终是4的倍数,因此地址的最后2位始终为0.
这允许我们不对跳转目标中的最后2位进行编码,而是编码位3-28。这意味着要获取j
指令的目标,您需要获取PC的前4位,添加跳转目标,然后添加两个零。
希望有了这样的解释,有意义的是为什么目标0x400024
在j
指令中由位0x100009
编码,即0x400024 >> 2
。因为不需要最后两位。