我遇到了奇怪的系统崩溃。崩溃发生在MIPS processor
. 该指令没有内存访问 - 用于注册移动的寄存器。我假设崩溃发生在移动指令处,因为它epc
保存了下一条指令的地址。
jr ra;
move v0,a0;
lw a0,16(a0);
什么会导致这种情况?
ePC
即使在指令之后仍然保持第三条指令,这jr
是由于流水线。
鉴于 EPC 持有 JR 之后的第三条指令的地址,则崩溃发生在该指令处。MOVE 指令在 JR 的分支延迟槽中,因此在 JR 之前执行。JR 返回到 LW 指令,这是 EPC 告诉您崩溃正在发生的地方。
顺便说一下,MOVE 指令不会导致 MIPS 体系结构中的任何异常(取指时的页面错误除外)。