1. 特权模式
Armv8-A 指令集包含四类特权模式和两种状态,如图1-1。四类特权模式分别为EL0,EL1, EL2, EL3。EL0是最低特权模式,通常运行应用程序。EL3是最高的特权模式,通常运行secure monitor等需要最高特权模式的程序,CPU上电复位时,会从EL3模式开始执行。EL1和EL2通常运行OS Kernel 和Hypervisor。两种状态分别是Non-secure 和Secure ,它们之间的切换需要通过EL3模式进行CPU状态的设定。
图1-1
2. 通用寄存器
Armv8-A有31个64位通用寄存器(X0 - X30),如图2.1。其中,X30是link register,负责记录程序跳转时的返回地址。
3. ARM ABI(Application Binary Interface)
ARM ABI对于通用寄存器的使用规则如下:
- 寄存器X0 - X7用于参数传递和函数返回值。
- 寄存器X9 - X15,为调用方保存。
- 寄存器X19 - X28,为被调用方保存。
- 寄存器X8,X16 - X18,X29, X30为特殊功能寄存器。
ARM ABI对于浮点寄存器的使用规则如下:
- 寄存器V0-V7用于参数传递和函数返回值。
- 寄存器V8-V15为被调用方保存。
- 寄存器V16-V31为调用方保存。
总结:
Armv8-A是一套新的64bit指令集架构。其定义四种特权等级,每种等级拥有各自的特权和用途。通过ARM ABI规定的通用寄存器和浮点寄存器的使用规则,能够有效的完成C/C++与汇编函数的相互调用。