关于异常和中断

老师,在资源包里docA03指令系统规范中第30页有说,当status寄存器exl位为1时,发生异常不更新epc,我们之前有按照这个要求去一直检测status寄存器的exl位,从而判断发生异常是否更新epc,但是发现这样改了之后功能测试过不了,而不考虑这句话功能测试能过,所以很疑惑,有如下疑问:
1、当status寄存器exl位为1的条件下,再发生异常时是否还需要处理异常?
2、当status寄存器exl位为1时,发生异常不更新epc,那是否更新excode,badvaddr等其它异常信息?
3、是否需要硬件在异常处理结束时更改exl位为0,还是说软件自动会处理?
另外,关于软中断和异常,有同步异步之分,不是很清楚何为同步何为异步,异步软中断是否意味着硬件时刻检测cause寄存器,等cause寄存器信息更改之后硬件检测出来才去处理中断
file:///C:/Users/13480/AppData/Roaming/Tencent/Users/1348046572/TIM/WinTemp/RichOle/Q%6007Y%7D])0%25]XXL9AP2LYUTU.png
已邀请:

邢金璋

赞同来自:

1.请查阅eret指令的定义,该指令会清除EXL。
2.例外处理流程,请认真阅读MIPS手册。
  EXL为1时,依然需要处理例外,中断会被屏蔽,excode、badvaddr依然被更新。
3.异步是指发生时刻不依赖于当前指令,最简单的,如果当次不处理该例外,再次执行相同指令,不一定会再触发该例外。
  具体请参考MIPS官方手册。
4.中断请求,硬件看到就需要去处理,不需要等其撤销再处理。

要回复问题请先登录注册