MIPS I(VR3000A)跨段连续跳转行为技术问询
VR3000A(MIPS I)跨段跳转地址判定问题
这是针对VR3000A与MIPS I指令集的通用MIPS问题。我找到一组PlayStation 1的硬件测试,用来探究无间隔连续分支与跳转指令的行为:
- 其中一项测试显示,分支指令基于当前PC做相对跳转,行为容易混淆;
- 另一项测试显示,绝对跳转指令的行为更具可预测性。
但受PS1内存映射限制,这组测试没覆盖跨段边界的场景。根据MIPS I指令集规则,跳转指令的地址生成逻辑是:跳转地址的低28位由指令本身指定,高4位取自执行该指令时的当前PC值。
看下面的代码示例:
7FFF'0000: addr1: nop ... 7FFF'7FFC: j addr1 ; Execution starts here 8000'0000: j addr2 8000'0004: nop ... 8000'1234: addr2: nop ...
第二条j指令本身存放在0x8xxx'xxxx段,但执行它的时候,PC处于0x7xxx'xxxx段。请问最终的跳转地址会是预期的0x8000'1234,还是0x7000'1234?
内容的提问来源于stack exchange,提问作者IDontKnowWhatToPutAsMyUsername
相关产品推荐
相关产品推荐

