如題,一些ARM64通用的架構知識
1.ARMv8特色:
(1) 超大的實體位址空間(Large Physical Address),提供超過4GB實體記憶體的通路;
(2) 64位寬的虛拟位址空間(64-bit Virtual Addresing);
(3) 提供31個64位寬的通用寄存器,可以減少對棧的通路,進而提高性能;
(4) 提供16KB和64KB的頁面,有助于降低TLB的未命中率(miss rate);
(5) 全新的異常處理模型,有助于降低作業系統和虛拟化的實作複雜度;
(6)全新的加載-擷取,存儲-釋放指令(Load-Acquire, Store-Release Instructions)。專門為C++11,C11以及Java記憶體模型設計;
2 執行狀态
AArch64: 64位的執行狀态:
(1) 提供31個64位通用寄存器;
(2) 提供64位的程式計數器寄存器PC、棧指針寄存器SP以及異常連結寄存器;
(3) 提供A64指令集;
(4)定義ARMv8異常模型,支援4個異常等級,EL0~EL3;
(5)提供64位的記憶體模型;
(6)定義一組處理器狀态(PSTATE)用來儲存PE的狀态;
AArch32: 32位的執行狀态:
(1) 提供13個632位通用寄存器, 32位的程式計數寄存器PC、棧指針寄存器SP、連結寄存器;
(2) 提供A32,T32指令集;
(3)定義ARMv7異常模型,基于PE模式并映射到ARMv8的異常模型中;
(4)提供32位虛拟記憶體通路機制;
(5)定義一組處理器狀态(PSTATE)用來儲存PE的狀态;
3. ARMv8包含的寄存器
3.1 ARMv8包含31個通用寄存器
AArch64運作狀态支援31個通用寄存器X0~X30,AArch32狀态支援16個32位通用寄存器;
X0~X30:通用寄存器;
SP: 棧指針寄存器;
PC:程式計數寄存器;
3.2 系統寄存器
系統寄存器提供控制和狀态,在AArch64狀态下,很多系統寄存器根據不同的異常等級提供不同的變種寄存器:
<reg_name>_ELx, x is 0,1,2, or 3
比如SP_EL0表示在EL0下的棧指針寄存器;
3.3 SIMD/FP寄存器:
支援128bit寄存器
3.4 特殊寄存器
XZE
4.資料類型
Byte: 8bit
Halfword: 16bit
Word: 32bit
Doubleworld: 64bit
Quadword: 128bit
5.異常模型
Exception Levels确定了處理器目前運作的特權級别,類似ARMv7架構中的特權等級
EL0: 使用者特權,用于運作普通應用程式;
EL1: 系統特權,通常用于運作作業系統;
EL2: 運作虛拟化擴充的虛拟監控程式(Hypervisor);
EL3: 運作安全世界中的安全監控器(Secure Monitor);
異常級别 | 應用場景 | 安全世界 |
---|---|---|
EL0 | APP | Secure OS |
EL1 | Guest OS | sECURE OS |
EL2 | Hypervisor | Secure Hypervisor |
EL3 | Secure—> | –>monitor |
6.A64彙編指令介紹:
1.A64指令集隻能運作在aarch64環境中;
2.所有的A64彙編指令都是32bit寬;
3.A64支援全部大寫或小寫書寫方式;
4.寄存器命名,
Name | size | Encoding | Descriptio |
---|---|---|---|
Wn | 32bits | 0~30 | General-purpose register0~30 |
Xn | 64bit | 0~30 | General-purpose register0~30 |
WZR | 32bits | 31 | Zero register |
XZR | 64bit | 31 | Zero register |
WSP | 32bits | 31 | Current stack pointer |
SP | 64bit | 31 | Current stack pointer |
7.A64指令分類
記憶體加載和存儲指令:
多位元組記憶體加載和存儲:
算術和移位指令:
位操作指令:
條件操作:
跳轉指令:
獨占訪存指令:
記憶體屏障指令:
異常處理指令:
系統寄存器通路指令: