(2)堆栈指针寄存器SP 在AArch64状态下,除了通用寄存器外,还为以下每个异常级别实现了专用的堆栈指针寄存器, 堆栈指针寄存器为:
堆栈指针寄存器选择: 在EL0上执行时,处理器使用EL0堆栈指针SP_EL0。在其他任何异常级别执行时,可以将处理器配置为使用SP_EL0或配置为对应该异常级别的堆栈指针SP_ELx。默认情况下,采用目标异常级别的堆栈指针SP_ELx。例如,EL1的异常选择SP_EL1,软件可以在目标异常级别执行的时候通过更新PSTATE.SP来指向SP_EL0的堆栈指针。 可以通过异常级别的堆栈指针后缀表明所选的堆栈指针: t表明使用SP_EL0堆栈指针。 h表明使用SP_ELx堆栈指针。 t和h后缀基于线程(thread)和处理程序(handler)的首字母。 ![]() (3)保存的程序状态寄存器SPSR 保存的程序状态寄存器SPSR(Saved Program Status Registers)用于在发生异常时保存处理器状态。在AArch64状态下,每个异常级别都有一个SPSR:
注:EL0不能处理异常。 当处理器发生异常时,会将处理器状态从SPSTATE中的PSTATE(Process state)保存到对应异常级别的SPSR。例如,如果异常发生在EL1,则将处理器状态保存在SPSR_EL1中。 保存处理器状态意味着异常处理程序可以:
(4)异常链接寄存器(ELR) 异常链接寄存器ELR(Exception Link Registers)包含异常返回地址。当处理器发生异常时,返回地址将保存在异常级别对应的ELR中。例如,当处理器将异常处理交给EL1处理时,会将异常返回地址保存在ELR_EL1中。在异常返回时,PC恢复到存储在ELR中的地址。例如,从EL1返回时,PC将恢复到ELR_EL1中存储的地址。 AArch64状态为每个异常级别都提供了ELR寄存器:
(5)ESR(Exception Syndrome Register) 异常综合表征寄存器ESR_ELn包含的异常信息用以异常处理程序确定异常原因。仅针对同步异常和SError进行更新。因为IRQ或FIQ中断处理程序从通用中断控制器(GIC)寄存器的信息获取状态。
以 Data Abort为例,ISS解读如下: ![]()
|