MIPS_异常处理_report1

preview
需积分: 0 1 下载量 179 浏览量 更新于2022-08-08 收藏 71KB DOCX 举报
在MIPS架构中,异常处理是一项关键功能,用于系统对错误或非正常情况的响应,例如访存异常、算术溢出或者系统调用。在报告1中,主要讨论了如何处理一种特定类型的异常——Adel(访存地址不对齐异常),以及如何定位异常指令、解码指令和进行异常返回。 1. Adel异常处理: Adel异常是由于访问的内存地址未对齐(非4字节边界)而触发的。要模拟这种情况,可以在用户态模式下编写一条访问不对齐地址的指令,如示例代码所示: ```assembly li $t0, 0x7ffffe11beq $a0, 0x0, rretlw $t1, 0($t0) ``` 使用`spim`模拟器并启用Delay Branches选项,可以观察到branch delay slot中的异常情况。 2. 定位异常指令: 当异常发生时,CPU会保存当前指令的地址到EPC(Exception Program Counter)寄存器。通过Cause寄存器确定异常类型,如果第2~6位的代码为4,表示Adel异常。接着检查k0寄存器的最高位,如果为1,则表明异常发生在branch delay slot,此时异常指令的地址是EPC+4,否则异常指令就是EPC寄存器的值。 3. 解码指令并消除不对齐: 一旦找到异常指令,需要解码并修正它。从BadVaddr寄存器获取引发异常的实际地址,计算其与对齐地址的偏移,然后修改异常指令的立即数,通常是取址操作的offset,以确保下一次访问时地址对齐。例如,通过以下步骤: - 加载异常指令到$v0。 - 提取立即数($v0的低16位)。 - 从Cause寄存器加载异常地址到$v1,取低2位。 - 计算偏移量:$k0 = 立即数 - 偏移量。 - 将$k0与立即数结合,更新立即数。 - 重新写回修改后的指令到内存。 4. 异常返回: 异常处理完成后,需要恢复程序执行。通常,这涉及到跳转到EPC寄存器中的地址,即异常发生时下一条应执行的指令。如果在branch delay slot中发生异常,那么需要重新执行branch指令,此时EPC值不变,以确保branch指令得以完成。 MIPS异常处理涉及识别异常类型、找到异常指令、理解异常原因并进行相应的修复,最后恢复正常执行流程。这个过程对于系统稳定性和错误调试至关重要。报告1中的例子深入展示了这些步骤,提供了一个具体的Adel异常处理实例。
LauraKuang
  • 粉丝: 23
  • 资源: 334
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜