arm的异常处理过程
1个回答
展开全部
当异常发生时(中断也是异常的一种):
1、ARM core(即CPU)拷贝当前状态的CPSR到对应异常模式下的SPSR,这步的目的是保护当前状态的CPSR(每种异常模式都对应一个自己的SPSR),以便将来在异常返回时,从SPSR恢复至CPSR)
2、这个时候COU会自动设置适当的CPSR位:改变寄存器状态进入ARM态(注意Thumb态和ARM态由CPSR的T位来决定,反映在CPSR上就是将其T位置0;改变处理器模式1进入相应的模式;如果需要的话还会设置中断禁止位禁止相应的中断。这些都是CPU自动完成的
3、保存返回地址(注意保存的返回地址是异常发生前正在执行指令的下一条地址,即此时的为PC-
4、到对于异常模式下的LR寄存器。若不保存那么从异常模式返回后就不知道返回到哪里这就像你自己出门要记住自己家里的地址一眼
5、设置PC为相应的异常向量,说白了就是让PC=对于异常向量表中的地址。因为PC为程序指针,指向程序运行的地方,原来指向哪里可能不知道但现在让其指向对应异常的地址就可以了。由于异常向量表存的是该异常的首地址只有四个字节,所以PC跳转到这里后还会继续跳转到真正的异常处理程序哪里去处理异常,处理完成后利用LR直接返回到原来模式下继续处理原来正在做的事
6、当返回时从SPSR回鹘CPSR和从LR恢复PC
1、ARM core(即CPU)拷贝当前状态的CPSR到对应异常模式下的SPSR,这步的目的是保护当前状态的CPSR(每种异常模式都对应一个自己的SPSR),以便将来在异常返回时,从SPSR恢复至CPSR)
2、这个时候COU会自动设置适当的CPSR位:改变寄存器状态进入ARM态(注意Thumb态和ARM态由CPSR的T位来决定,反映在CPSR上就是将其T位置0;改变处理器模式1进入相应的模式;如果需要的话还会设置中断禁止位禁止相应的中断。这些都是CPU自动完成的
3、保存返回地址(注意保存的返回地址是异常发生前正在执行指令的下一条地址,即此时的为PC-
4、到对于异常模式下的LR寄存器。若不保存那么从异常模式返回后就不知道返回到哪里这就像你自己出门要记住自己家里的地址一眼
5、设置PC为相应的异常向量,说白了就是让PC=对于异常向量表中的地址。因为PC为程序指针,指向程序运行的地方,原来指向哪里可能不知道但现在让其指向对应异常的地址就可以了。由于异常向量表存的是该异常的首地址只有四个字节,所以PC跳转到这里后还会继续跳转到真正的异常处理程序哪里去处理异常,处理完成后利用LR直接返回到原来模式下继续处理原来正在做的事
6、当返回时从SPSR回鹘CPSR和从LR恢复PC
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询