我一直在尝试通读 ARM 手册,以了解 ARM 的架构工作原理。我知道每个 EL 都有一个用于 SP 的系统寄存器,如 SP_EL0、SP_EL1 等。我还知道 PSTATE 中有一个 SPSel 位,用于选择在 EL 更改时是否从 SP_EL0 或 SP_ELx 获取堆栈指针。但是,我的问题是,SP 是否在架构上映射到适当的 SP_ELx 寄存器,或者 SP_ELx 是否在 EL 更改时复制到 SP?换句话说,如果我写入 SP,我是否也会写入 SP_ELx?
我尝试阅读这方面的手册,但它看起来相当模糊,并且可以用任何一种方式来解释。
使用手册的 Ka 版本:
在 B1-182 页,B1.2.3 下:
点击后
SP[]
我们将进入页面 J1-13867,在那里我们可以看到以下伪代码aarch64/functions/registers/SP
:所以是的,
SP
总是映射到其中一个寄存器SP_ELn
。