天天看點

ARM64基礎0:ARM64架構簡介1.ARMv8特色:2 執行狀态3. ARMv8包含的寄存器4.資料類型5.異常模型6.A64彙編指令介紹:7.A64指令分類

如題,一些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指令分類

記憶體加載和存儲指令:

多位元組記憶體加載和存儲:

算術和移位指令:

位操作指令:

條件操作:

跳轉指令:

獨占訪存指令:

記憶體屏障指令:

異常處理指令:

系統寄存器通路指令:

繼續閱讀