ARMv8-A把64位架構支持引入到ARM結構中,包括:
A、31個64位通用寄存器:X0~X30;其中,X30也做爲過程鏈接寄存器PLR(Produce Link Register)使用;
B、棧指針寄存器SP(Stack Pointer);
C、程序計數器PC(Program Counter);
D、64位數據處理和擴展的虛擬尋址;
E、兩種主要的執行狀態:
AArch64: 64位執行狀態,包括該狀態異常模型、內存模型、程序員模型和指令集支持;
AArch32: 32位執行狀態,包括該狀態異常模型、內存模型、程序員模型和指令集支持;
F、ARMv8-A的兩種執行狀態(AArch64AArch32)主要支持三種指令集:
A32: 32位定長ARM指令集,須要4字節邊界對齊;經過不一樣架構變體加強部分,32位架構執行環境現稱爲AArch32;
T32: 16位定長Thumb指令集,須要2字節邊界對齊,在Thumb2技術中加強爲16位和32位混合長度指令集;部分32位架構執行環境現稱爲AArch32;
A64: 32位定長指令集,提供與ARM和Thumb指令集的功能相似,是一種支持AArch64執行狀態的全新32位固定長度指令集;隨着ARMv8-A一塊兒引入,是一種AArch64指令集;
ARM-ISA不斷改進,在ARMv8-A中,對A32和T32進行了一些增補,以保持與A64指令集一致;
AArch64特徵:
一、提供31個64位通用寄存器:X0~X30;其中,X30也可用做過程鏈接寄存器PLR(Produce Link Register);
二、提供64位的程序計數器PC(Program Counter)、棧指針寄存器SP(Stack Pointer)和異常連接寄存器ELR(Exception Link Register);
三、提供32個128位的SIMD Vector和標量浮點寄存器SFP(Scalar Floating Point):V0~V31,也可用做64位寄存器;全部向量寄存器都是128位;雙精度標量浮點使用Vx[63:0],單精度標量浮點使用Vx[31:0];
四、定義了4個執行級別寄存器(Executing Level):EL0、EL一、EL二、EL3;
五、支持64位的虛擬尋址(Virtual Addressing);
六、定義一組PSTATE,用以保存PE(Processing Element)狀態;
AArch32特徵:
一、提供31個32位通用寄存器:X0~X30;其中R3用做棧指針SP,R14用做連接寄存器LR,R15用做程序計數器PC,且R14需同時供異常連接寄存器ELR與過程鏈接寄存器PLR之用;
二、提供1個異常連接寄存器ELR,用以做爲從HpyerVisior-Mode的異常返回之用;
三、提供32個64位的高級SIMD Vector和標量浮點寄存器(Scalar Floating Point);
四、提供A32與T32兩種指令集;
五、支持32位虛擬尋址(Virtual Addressing);
六、只使用CPSR保存PE(Processing Element)狀態;
七、提供1個32位異常特徵寄存器ESR(Exception Syndrome Register),這個寄存器有本身特有的編碼格式,且按照不一樣的執行級別EL(Executing Level)劃分,每一個執行級別都有一個ESR,名字分別記做:ESR_EL0、ESR_EL一、ESR_EL二、ESR_EL3;
A64通用寄存器:
X0~X7 : 參數/結果寄存器;
X8 : 直接結果位置寄存器;
X9~X15 : 臨時寄存器;
X16 : 第1個內部過程調用寄存器或臨時寄存器IP0;
X17 : 第2個內部過程調用寄存器或臨時寄存器IP1;
X18 : 平臺寄存器/臨時寄存器;
X19~X28: 程序計數器/調用備份寄存器;
X29 : 用做幀指針寄存器FP;
X30 : 用做過程連接寄存器PLR(Produce Link Register)
SP : 棧指針寄存器;
A32通用寄存器:
R0~R3 : 參數/結果寄存器;
R4~R11: 臨時寄存器;
R12 : 內部過程調用寄存器或臨時寄存器IP;
R13 : 棧指針寄存器SP;
R14 : 連接寄存器LR;
R15 : 程序計數器PC;
ARMv8支持的數據類型:
字節/B: 8位,Byte;
半字/H: 16位,HalfWord;
單字/S: 32位,SingleWord;
雙字/D: 64位,DoubleWord;
四字/V: 128位,QuadWord;
使用這幾種數據類型時,ARMv8的通用寄存器可區分爲32位和64位兩種,可供程序使用:
64位寄存器用做32位寄存器時記做:Wn; (W:Word)
64位寄存器用做64位寄存器時記做:Xn;
128位的浮點向量寄存器可分爲5種:
用做8位寄存器時記做 :Bn; (Byte,字節)
用做16位寄存器時記做 :Hn; (Half Word,半字)
用做32位寄存器時記做 :Sn; (Single Word,單字)
用做64位寄存器時記做 :Dn; (Double Word,雙字)
用做128位寄存器時記做:Qn; (Quad Word,四字)
n=0 ... 30;程序員