我遇到了一个奇怪的系统崩溃。崩溃发生在MIPS processor
的移动指令中。通过该指令无法访问存储器 - 用于注册移动的寄存器。我假设崩溃发生在移动指令处,因为epc
保存了下一条指令的地址。
jr ra;
move v0,a0;
lw a0,16(a0);
导致这种情况的原因是什么?
ePC
即使在jr
指令之后仍然持有第三条指令,这是由于流水线操作。
答案 0 :(得分:1)
鉴于EPC在JR之后保存第三条指令的地址,则崩溃发生在该指令处。 MOVE指令位于JR的branch delay slot中,因此它在JR之前执行。 JR返回到LW指令,这是EPC告诉您发生崩溃的地方。
顺便说一句,MOVE指令不能在MIPS架构中引起任何异常(除了取指令的页面错误)。