ARM异常的响应及返回
扫描二维码
随时随地手机看文章
1.对异常的响应 当一个异常出现以后,arm微处理器会执行以下几步操作。 (1)将下一条指令的地址存入相应连接寄存器lr,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从arm状态进入的,则lr寄存器中保存的是下一条指令的地址(当前pc+4或pc+8,与异常的类型有关);若异常是从thumb状态进入的,则在lr寄存器中保存当前pc的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常swi产生时,指令mov pc' r14_svc总是返回到下一条指令,不管swi是在arm状态执行,还是在thumb状态执行。 (2)将cpsr复制到相应的spsr中。 (3)根据异常类型,强制设置cpsr的运行模式位。 (4)强制pc从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 还可以设置中断禁止位,以禁止中断发生。如果异常发生时,处理器处于thumb状态,则当异常向量地址加载入pc时,处理器自动切换到arm状态。 arm微处理器对异常的响应过程用伪码可以描述为: 2,从异常返回 异常处理完毕之后,arm微处理器会执行以下几步操作从异常返回。 (1)将连接寄存器lr的值减去相应的偏移量后送到pc中。 (2)将spsr复制回cpsr中。 (3)若在进入异常处理时设置了中断禁止位,则要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。