概述
什么是异常?正常流程之外的流程都叫做异常,中断是异常的一种。
现场保护:中断发生的时候,CPU需要记录当前程序的上下文,然后再去处理异常,以便异常处理完成后,返回到原先的程序当中去。
硬中断和软中断
硬中断就是硬件产生的中断,软中断是一条会汇编指令,只要一执行,就会产生软中断。
异常向量表
所有CPU都有异常向量表,用于处理异常,是硬件决定的。详细来说,出现异常时,CPU转跳到异常处理表,这个行为是硬件决定的,至于异常向量表里面具体的实现动作,是软件定义的。
异常发生的时候,CPU自动把PC寄存器转跳到异常向量处理处理异常。
如图所示,异常向量表是一个这样的数据结构:不同的异常连续地存放在地址空间中,每个异常对应的向量内容是一个32位的地址,异常发生的时候,CPU将PC寄存器的内容设置成向量指向的地址,CPU进而会去执行地址指向的程序。
ARM的异常处理流程
- 将CPSR拷贝到当前模式地SPSR中,以便异常处理后,程序状态寄存器的恢复
- 修改CPSR上的标志位,使CPU进入ARM模式,因为Thumb模式不支持异常的处理
- 设置中断禁止位,禁止相应的中断(可选)
- 保存返回地址到LR寄存器中,以便异常处理后,能够接着上次的位置执行程序
- 设置PC程序寄存器,为响应的异常向量
- 执行异常处理函数
- 从SPSR恢复CPSR
- 从LR寄存器恢复PC
- 继续运行上一次的程序