分类:
2009-04-13 09:51:49
当一个异常出现后,ARM处理器会执行以下的步骤:
1. 将下一条指令的地址存入LR中。 如果是Thumb状态 那么就存入下一条指令的偏移量。
2. 将CPSR的内容 保存到SPSR中
3. 强制设置CPSR的运行模式位
4. 跳转到异常处理的向量处,执行异常处理代码.
还可以设置中断禁止位, 如果异常发生时处于Thumb模式下, 那么当异常向量地址加载到PC时,
处理器自动切换至ARM状态
ARM微处理器对异常处理的伪代码 可以表示为
R14_
SPSR_
CPSR[4:0] = Exception
CPSR[5] = 0
IF
then
CPSR[7]==1
PC = exceptional vector address
2. 异常返回
将连接寄存器减去相应的偏移量后,赋值给PC,返回
SPSR 赋值给CPSR
若在异常处理时禁止了中断,在此要清除
;-----------------------------------------------------------------------
异常的描述:
1. FIQ
不管是在ARM状态下还是Thumb状态下只要执行FIQ异常时, 都会执行下面的指令从FIQ处返回:
SUBS PC,R14_fiq,#4
改指令是 用连接寄存器 减去4 后 赋值给PC 然后再将SPSR_fiq 赋值给CPSR 然后返回。
2. IRQ
这是正常的中断请求
不管是在ARM状态下还是Thumb状态下只要执行IRQ异常时, 都会执行下面的指令从IRQ处返回:
SUBS PC,R14_irq,#4
改指令是 用连接寄存器 减去4 后 赋值给PC 然后再将SPSR_irq 赋值给CPSR 然后返回。