在AArch64状态下,SP对应的物理寄存器有如下四个(某一时刻只能对应下面其中一个):
SP_EL0和SP_EL1
SP_EL2
SP_EL3
如何使用呢?
1、如果程序运行在EL0,那么使用的是SP_EL0
2、如果程序运行在其他Exception level下,可以使用SP_EL0和当前Exception level所对应的SP_ELx
3、默认情况下,进入异常后,使用的是当前Exception level对应的SP_ELx。即:发生的进入EL1的异常,那么在跳转到EL1的异常处理入口后,会自动切到SP_EL1,此时SP对应的就是SP_EL1. 当然,可以在异常通过操作PSTATE.SP将SP强制切到SP_EL0
4、即便不是在异常处理程序中,也可以通过操作PSTATE.SP将SP强制切到SP_EL0或者SP_ELx
5、比如程序正运行在EL1,此时使用的SP是SP_EL0,突然发生了一个进入EL1的异常,在跳转到异常处理入口后,SP会自动切到SP_EL1,在异常返回后,SP又会自动切回到原先的SP_EL0
6、后缀t和h:
t 表示使用的是SP_EL0
h 表示使用的是SP_ELx
验证
下面使用DS5仿真的实验,验证一下上面的说法。
系统复位后,默认是在EL3,并且是secure模式。
第73行,

本文深入探讨AArch64架构下不同异常级别(EL2, EL3)与栈指针(SP_EL0, SP_ELx)的关系。在异常处理中,SP自动切换到对应EL的栈指针,可通过PSTATE.SP切换。通过实验验证了异常处理时SP的切换规则。"
81986886,7947634,Java8 Lambda表达式实现List集合条件过滤,"['Java编程', '数据处理', '集合操作', 'Lambda']
最低0.47元/天 解锁文章
1542

被折叠的 条评论
为什么被折叠?



