MIPS_异常处理_report1
需积分: 0 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
最新资源
- 飞轮储能 背靠背变流器 充放电控制 并网控制 matlab simulink仿真模型 包括机侧和网侧变流器及其控制,飞轮采用PMSM,直流母线电压很稳,波形已调试好可直接运行
- C#上位机与omron欧姆龙 Host Link通信串口通讯实例 源码 通过和PLC用串口连接,可以读取写入欧姆龙PLC的数据寄存器DM(批量也可以)、输入输出CIO、辅助继电器WR,H保持继电器等
- 反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLAB simulink软件
- 永磁同步风力发电机并网,机侧变流器采用转子磁链定向矢量控制,网侧变流器采用电网电压定向矢量控制,双自适应惯量控制策略,引入直流侧电容能量,提高系统惯量
- 【岗位说明】敬老院膳食服务岗位责职.doc
- 【岗位说明】敬老院门卫制度和岗位职责.doc
- 【岗位说明】养老院后勤各岗位职责.doc
- 【岗位说明】养老院服务员岗位职责.doc
- 【岗位说明】养老护理员考核评分表.doc
- 【岗位说明】养老院护工护理等级标准及流程.docx
- 【岗位说明】养老院健康管理部经理职责.doc
- 财务部组织结构与责权说明书.docx
- 仓储部组织结构与责权说明书.docx
- 策划部组织架构图.docx
- 电子商务部组织结构与责权.docx
- 产品部组织结构与责权说明书.docx