MIPS汇编J格式跳转指令最高4位取值及跳转可达性疑问
J型指令跨段跳转问题解答
先说明确结论:这种情况下直接使用单条J型指令确实无法访问目标地址。
原理说明
- J型指令的32位跳转地址是固定按以下规则拼接的:
(PC + 4)的最高4位+指令中携带的26位立即数+固定2位0,地址对齐的特性让26位立即数实际等效覆盖了28位地址空间。 - 这个规则天然限定了J型指令的跳转范围:所有可访问的地址必须和
PC + 4处于同一个256MB(2^28 字节)的地址段内,两个地址的最高4位必须完全一致。 - 如果预期目标地址和
PC + 4最高4位不同,说明目标地址不在当前256MB段内,直接用J指令拼接出来的地址会和预期不符,无法完成正确跳转。
跨段跳转的解决方案
如果确实需要访问最高4位不同的地址,不要使用J型指令,改用R型的jr(寄存器跳转)指令即可:
把完整的32位目标地址预先写入通用寄存器,直接执行
jr $寄存器编号就能跳转到任意32位地址,不受J型指令的段范围限制。
内容的提问来源于stack exchange,提问作者kingsbane
相关产品推荐
相关产品推荐

