进入中断

1.跳转到CSR寄存器mtvec(machine Trap-Vector Base-Address Register)——可读可写——定义的PC地址开始进行
处理器的异常与中断——CSR
mode = 0. 跳转到BASE
mode = 1. 跳转到BASE + 4 * CAUSE(异常编号)

2.更新CSR寄存器mcause
处理器的异常与中断——CSR
处理器的异常与中断——CSR
3.更新CSR寄存器 mepc(机器模式异常PC寄存器 Machine Exception Program Counter,可读可写)
保存返回PC
自动更新mepc为当前遇到指令的pc值
mepc = pc+4(2),下一条尚未执行指令

4.更新CSR寄存器mtval( Machine Trap Value Register ),以反映引起当前异常的存储器访问地址或者指令编码。
存储器访问异常(断点、取指读写异常):mtval = 存储器访问地址
非法指令:mtval = 非法指令编码

5.更新CSR寄存器mstatus (Machine Status register)
处理器的异常与中断——CSR
MIE = 1 : machine mode 所有中断都打开,进入异常之后MIE = 0
MIE = 0 : machine mode 所有中断关闭
MPIE = 异常发生前的MIE,作用是异常结束之后可以恢复之前MIE
MPP = 异常发生前的模式,如果只支持机器模式,则===11

执行异常(异常服务程序)

进入异常之后,从mtvec的pc执行,根据cause编号,进入不同 异常服务子程序。

退出异常

相关指令(Trap Return Instruction):MRET,SRET,URET

1.pc = mepc
2.mstatus.MIE = MPIE
3.mstatus.MPIE = 1

相关文章:

  • 2022-01-12
  • 2022-01-20
  • 2021-07-04
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-04-03
  • 2022-01-14
猜你喜欢
  • 2021-11-11
  • 2021-12-13
  • 2021-12-19
  • 2021-04-20
  • 2021-06-03
  • 2021-12-13
相关资源
相似解决方案