1、执行64位宽的寄存器,又兼容ARMv7架构的软件,即既支持32bit,又支持64bit,AArch64 & AArch32
2、分离了privilege和mode,ARMv7是一体的
在ARMv8中,安全状态下,有PL3、PL1、PL0,没有PL2,可以访问安全内存空间
非安全状态下,有PL2、PL1、PL0,没有PL3,不可访问安全内存空间
每一个PL级别, 决定一套指令和寄存器集。
3、Exception Levels(EL)
EL也有4级,EL0、EL1、EL2(仅在非安全状态下存在)、EL3(仅在安全状态下存在)
在AArch64下,EL决定PL,当前执行在ELx,PL也就为PLx。
EL的切换:发生一个异常or从一个异常返回
发生一个异常:EL >= 当前EL
从一个异常返回:EL <= 当前EL
EL的决定性:决定当前执行状态,如哪种寄存器,PL,寄存器位宽等
EL的级别:数字越大,级别越高,相当于权限越大。
一般应用程序使用EL0,OS内核使用EL1,Hypervisor使用EL2,Security Monitoe使用EL3
4、寄存器位宽
EL级别变大,寄存器位宽变大或者不变;EL级别变小,寄存器位宽变小或者不变。
EL0的寄存器位宽,由EL1中的HCR/SCR寄存器中某bit决定,只能通过从异常返回来设置
EL1的寄存器位宽,由EL2中的HCR寄存器或者EL3中的SCR寄存器中某bit决定,根据安全非安全状态决定是EL3还是EL2。
EL2、EL3的寄存器位宽, 由复位时的配置管脚设置
5、指令集
A32: 兼容ARMv7架构中的32bit ARM指令集
T32: 兼容ARMv7架构中的16bit & 32bit Thumb指令集
T32EE:兼容ARMv7架构中的16bit & 32bit ThumbEE指令集
A63:ARMv8新定义的64bit指令集
6、AArch32
如果最高级别的EL如EL2orEL3使用AArch32,则整个系统必须使用AArch32;
AArch32下,ARMv8下的执行就跟ARMv7一样,只是虚拟化扩展和大物理地址扩(LPAE)展有点改变
7、异常返回状态
AArch64下,异常返回状态由ELR(Exception Link Register)和SPSR(Saved Processor State Register)寄存器决定。
ELR中保存异常返回地址,SPSR保存处理器状态。
8、堆栈指针选择
EL0下,堆栈指针为SP_EL0,其他为SP_ELx。
9、安全模型
在ARMv7下,安全扩展引入了Monitor模式,该模式来实现安全和非安全状态的切换。
ARMv8下,当EL3使用AArch32,为了兼容ARMv7,在安全模式下不区分EL,只有一个EL3
Non-secure state Secure State
EL0 Application
EL1 OS
EL2 Hypervisor
EL3 Secure Monitor ->Secure OS ->Secure Application
ARMv8下,当EL3使用AArch64,EL和安全是分离的
Non-secure state Secure State
EL0 Application Secure Application
EL1 OS Secure OS
EL2 Hypervisor
EL3 Secure Monitor
10、执行模式
ARMv7中的模式包括user、FIQ、IRQ、Supervisor、Monitor、Abort、Hyp、Undefined、System,混合了各种概念。
ARMv8在AArch64中的模式EL0t、EL1t & EL1h、EL2t & EL2h、EL3t & EL3h,后缀t表示SP_EL0堆栈指针,h表示SP_ELx堆栈指针