状态域在AArch64运行态下,没有对应CPSR(Current Program Status Register)的寄存器。每种状态现在需要分别访问。
这些状态有:
* N – 负数
* Z – 0
* C – 进位
* V – 溢出
* D – 调试位
* A – Serror
* I – IRQ
* F – FIQ
* SS – 软件单步跟踪
* IL – 无效运行态
* EL – Exception Level
* nRW – 执行态,0为64位,1为32位
* SP – 栈指针选择,0为EL0,n为ELn。
N, Z, C, V四种状态是可以在EL0级别被访问的,其它的都需要EL1以上级别。所以,咱们写应用只需要知道前4个就行了,多省心:)
系统寄存器系统配置是通过MRS和MSR指令去访问系统寄存器来实现的。
NEON寄存器在通用寄存器之外,ARMv8还提供了32个128位NEON浮点寄存器,V0~V31。它们也可以被当作半精度寄存器H,单精度寄存器S和双精度寄存器D。
A64 ATPCS支持最多传8个参数,通过X0~X7。而A32和T32只支持4个。说人话就是,如果一个函数调用要传8个参数,就可以放到X0~X7这8个64位寄存器里。
ARM v8a小结ARM v8a支持AArch64和AArch32两种运行态,在应用运行的EL0权限下不能切换,只能选一种。AArch64状态下只能运行A64这一种指令集,而AArch32运行态下,可以执行A32和Thumb2两种指令集,这两种之间可以自由切换。
在AArch64运行态下,我们有31个64位通用寄存器(X0~X30),32个128位NEON浮点寄存器,一个零寄存器用于写无用数据,一个PC指令指针,一个SP栈指针,状态位只需要记4个:N负Z零C进行V溢出。
既然是快餐文,就讲这么多。大家能对上面小结的了解清楚,我们就可以正式向指令集前进了〜