根据我的课堂笔记,在MIPS中,跳转指令的编码对于操作码是6位,对于目标地址是26位。但是地址是32位,那么地址的哪一部分被遗漏了呢?考虑一个j指令(6位上的操作码2 -> 000010 )和目标地址0x00400024 -> 0000 0000 0100 0000 0000 0000 0010 0100。最终的编码应该是0x08100009,我真的不明白目标地址是如何编码的
发布于 2019-01-15 09:29:14
将分支延迟时隙( PC+4 )中的最高地址4比特与编码的J类型指令左移的26位instr_index字段相结合,解码MIPS中的绝对32位跳目标地址。(正如@jester所指出的,这是因为所有跳转目标地址都必须对齐4字节。)
要编码跳转目标,您需要目标地址的低28位,并向右移动2位。
// Decoding a jump target.
TARGET := ((PC+4) & 0xF0000000) | (INSTR_INDEX << 2);
// Encoding a target.
INSTR_INDEX := (TARGET & 0x0FFFFFFF) >> 2;https://stackoverflow.com/questions/43565715
复制相似问题