汇编中的J-Type指令的目标地址编码(MIPS)

时间:2017-04-22 23:26:59

标签: assembly mips memory-address machine-code

根据我的课堂笔记,在MIPS中,跳转指令的编码对于操作码是6位,对于目标地址是26位。但地址是32位,那么地址的哪一部分被遗漏了?考虑j指令(6位上的操作码2 - > 000010)和目标地址0x00400024 - > 0000 0000 0100 0000 0000 0000 0010 0100。最终的编码应该是0x08100009,我真的不明白目标地址是如何编码的

1 个答案:

答案 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;