保存的程序状态寄存器SPSR(Saved Program Status Registers)用于在发生异常时保存处理器状态。在AArch64状态下,每个异常级别都有一个SPSR: SPSR_EL1,发生在EL1的异常。 如果实现了EL2,则为SPSR_EL2,发生在EL2的异常。 如果实现了EL3,则为SPSR_EL3,发生在EL3的异常。 注:EL0不能处理异常。 当处理器发生异常时...
SPSR_EL1,发生在EL1的异常。 如果实现了EL2,则为SPSR_EL2,发生在EL2的异常。 如果实现了EL3,则为SPSR_EL3,发生在EL3的异常。 注:EL0不能处理异常。 当处理器发生异常时,会将处理器状态从SPSTATE中的PSTATE(Process state)保存到对应异常级别的SPSR。例如,如果异常发生在EL1,则将处理器状态保存在SPSR_EL1...
SPSR_EL1用于存储,当在发生系统调用、异常、中断时,当前程序的PSTATE(无论是用户态还是内核态)。 2、当发生中断、异常、系统调用时,硬件会自动: 1)把当前程序的pc值放入ELR_EL1中 2)把当前状态PSTATE存入SPSR_EL1中 3)根据发生在内核态还是用户态,中断还是异常,会自动跳转到el1_sync,el1_irq,el0_sync,...
user/sys、FIQ、SVC、ABT、IRQ以及UND模式 下,LR、SP、SPSR均是独立,切换CPSR 模式之后,SP、LR及SPSR自动切换成相应模式下的寄存器值 FIQ 之所以被称之快速中断,是因为有独立的R8-R12寄存器,不需要压栈 ,直接使用, SPSR是保存上一个模式的CPSR。 ARMv7的一般AR系列的寄存器模型和上述的基本相同,有一些新的扩展...
(1) PSTATE保存到SPSR_ELx; (2) 返回地址保存到ELR_ELx; (3) PSTATE寄存器里的DAIF域都设置为1,相当于把调试异常、系统错误关闭; (4)更新ESR_ELx寄存器,该寄存器包含同步异常发生的原因; (5)切换到对应的EL, 然后跳转到异常向量表里执行;
可以看到,此时SPSel的值是1,Mode的值为EL3h,说明此时SP用的是SP_ELx。此时SPSR_EL3的值是0x3CC,SPSR的含义如下: M[3:0]的值是0xC,含义如下,表示发生异常前系统的模式和状态:AArch64、EL3、SP_EL0 下面是异常处理函数: 1//2// Current EL with SP03//4el3_vectors:5c0sync3:6mrs x0, elr_el...
将PSTATE的状态保存到SPSR_ELn寄存器中,根据当前所在的EL级别来保存到对应的SPSR寄存器中。如果当前的异常发生在EL1,则将PSTATE的状态保存到SPSR_EL1中 将PC的值存储在ELR_ELn寄存器中,也是根据当前所处的EL级别。 以上两个步骤是硬件自动保存的,不需要软件的干涉 ...
SPSR是保存上一个模式的CPSR。 ARMv7的一般AR系列的寄存器模型和上述的基本相同,有一些新的扩展, 增加了Hyp模式以及Mon模式,分别用于虚拟扩展以及安全扩展, Hyp模式下的LR为ELR,记录异常时的返回地址,其他均一致。 CortexA53 r0-r7 用来做参数传递或者发返回结果。
读SPSR寄存器可以获得进入异常前的处理器状态。 Cortex M3的工作状态、特权分级及操作模式工作状态 特权级别操作模式操作模式和特权级间的的相互 智能推荐 Arm的寄存器 Arm的寄存器http://blog.sina.com.cn/s/blog_8c5d88390102vh1r.html arm处理器一共37个32位的寄存器,其中31个是通用寄存器,6个为状态寄存器。
我们可以看到,这些急促去你使用的bit都是不相同的,其实我们还可以猜测这些bit其实还是都在一个PSTATE寄存器中,然后相关的bit位被抽象到了NZCV、DAIF、CurrentEL、SPSel、PAN、UAO、DIT、SSBS寄存器中,方便指令访问。 3、SPSR :Saved Program Status Registers ...