根据我的课堂笔记,在MIPS中,跳转指令的编码对于操作码是6位,对于目标地址是26位。但地址是32位,那么地址的哪一部分被遗漏了?考虑j
指令(6位上的操作码2 - > 000010
)和目标地址0x00400024
- > 0000 0000 0100 0000 0000 0000 0010 0100
。最终的编码应该是0x08100009
,我真的不明白目标地址是如何编码的
答案 0 :(得分:1)
通过获取分支延迟时隙(PC + 4)中地址的最高4位并将其与26位instr_index
字段组合,来解码MIPS中的绝对 32位跳转目标地址编码的J
类型指令的左移2位。 (正如@jester指出的,这是有效的,因为所有跳转目标地址必须对齐4个字节。)
要对跳转目标进行编码,请使用目标地址的低28位,然后向右移2位。
// Decoding a jump target.
TARGET := ((PC+4) & 0xF0000000) | (INSTR_INDEX << 2);
// Encoding a target.
INSTR_INDEX := (TARGET & 0x0FFFFFFF) >> 2;