当前程序被异常打断,切换到异常处理程序里,异常处理完之后,返回当前被打断模式继续执行,因此必须要保存当前执行指令的下一条指令的地址到LR_excep(异常模式下LR,并不存在LR_excep寄存器,为方便读者理解加上_excep,以下道理相同),由于异常模式不同以及ARM内核采用流水线技术,异常处理程序里要根据异常模式计算返回地址。
时间: 2024-04-18 21:34:08 浏览: 70
在ARM架构中,当发生异常并切换到异常处理程序时确实需要保存当前执行指令的下一条指令的地址,以便在异常处理程序完成后返回到被打断的模式并继续执行。
在ARM架构中,该地址通常被保存在链接寄存器(Link Register,LR)中。然而,异常模式下并不存在专门用于保存返回地址的LR_excep寄存器。
为了解决这个问题,ARM架构使用了不同的技术来保存返回地址,具体取决于异常模式。例如,在ARMv7-A架构中,当从非特权模式切换到异常模式时,返回地址会被保存在异常模式堆栈中的LR寄存器。而从用户模式切换到异常模式时,则使用异常向量表中的相应异常向量来获取返回地址。
总之,在异常处理程序中根据异常模式来计算返回地址是必要的,以确保正确返回到被打断的模式并继续执行。请注意,具体的实现可能会因不同的ARM内核和操作系统而有所不同。
阅读全文