目錄
1 ARM64 系統結構基礎知識
1.1 ARM介紹
1.2 ARMv8系統結構基礎知識
1.3 ARMv8暫存器
1.4 Cortex-A72處理器介紹
1.5 ARMv9系統結構介紹
2 架設樹莓派實驗環境
2.1 樹莓派介紹
2.2 架設樹莓派實驗環境
2.3 BenOS基礎實驗程式解析
2.4 QEMU虛擬機器與ARM64實驗平臺
3 A64 指令集1——載入與儲存指令
3.1 A64指令集介紹
3.2 A64指令編碼格式
3.3 載入與儲存指令
3.4 載入與儲存指令的變種
3.5 存入堆疊與移出堆疊
3.6 MOV指令
3.7 陷阱:你用對載入與儲存指令了嗎
3.8 實驗
4 A64指令集2——算術與移位指令
4.1 條件操作碼
4.2 加法與減法指令
4.3 CMP指令
4.4 關於條件標識位元的範例
4.5 移位指令
4.6 位元操作指令
4.7 位元段操作指令
4.8 實驗
5 A64指令集3——比較指令與跳轉指令
5.1 比較指令
5.2 跳轉與傳回指令
5.3 陷阱:為什麼在RET指令之後系統就崩潰了
5.4 實驗
6 A64 指令集4——其他重要指令
6.1 PC相對位址載入指令
6.2 LDR和ADRP指令的區別
6.3 記憶體獨占存取指令
6.4 異常處理指示
6.5 系統暫存器存取指令
6.6 記憶體屏障指令
6.7 實驗
7 A64 指令集的陷阱
7.1 案例7-1:載入巨集標籤
7.2 案例7-2:載入字串
7.3 案例7-3:讀寫暫存器導致樹莓派4B當機
7.4 案例7-4:LDXR指令導致樹莓派4B當機
7.5 組合語言大作業7-1:在組合語言中實現序列埠輸出功能
7.6 組合語言大作業7-2:分析Linux 5.0的啟動組合語言程式碼
8 GNU組譯器
8.1 編譯流程與ELF檔案
8.2 一個簡單的組合語言程式
8.3 組合語言語法
8.4 常用的虛擬指令
8.5 AArch64依賴特性
8.6 實驗
9 連結器與連結指令稿
9.1 連結器介紹
9.2 連結指令稿
9.3 重定位
9.4 實驗
10 GCC內嵌組合語言程式碼
10.1 內嵌組合語言程式碼基本用法
10.2 案例分析
10.3 實驗
11 異常處理
11.1 異常處理的基本概念
11.2 異常處理與傳回
11.3 異常向量表
11.4 異常現場
11.5 同步異常的解析
11.6 案例分析
11.7 實驗
12 中斷處理
12.1 中斷處理背景知識
12.2 樹莓派4B上的傳統中斷控制器
12.3 ARM核心上的通用計時器
12.4 中斷現場
12.5 案例分析:在樹莓派4B上實現一個計時器
12.6 實驗
13 GIC-V2
13.1 GIC發展歷史
13.2 中斷狀態、中斷觸發方式和硬體中斷編號
13.3 GIC-V2
13.4 樹莓派4B上的GIC-400
13.5 實驗
14 記憶體管理
14.1 記憶體管理基礎知識
14.2 ARM64記憶體管理
14.3 硬體管理存取位元和污染位元
14.4 與位址轉換相關的控制暫存器
14.5 記憶體屬性
14.6 案例分析:在BenOS裡實現恆等映射
14.7 實驗
15 快取記憶體基礎知識
15.1 為什麼需要快取記憶體
15.2 快取記憶體的存取延遲時間
15.3 快取記憶體的工作原理
15.4 快取記憶體的映射方式
15.5 虛擬快取記憶體與物理快取記憶體
15.6 名稱重複和名稱相同問題
15.7 快取記憶體策略
15.8 快取記憶體的共用屬性
15.9 快取記憶體的維護指令
15.10 快取記憶體列舉
15.11 實驗
16 快取一致性
16.1 為什麼需要快取一致性
16.2 快取一致性的分類
16.3 快取一致性的解決方案
16.4 MESI協定
16.5 快取記憶體錯誤分享
16.6 CCI和CCN快取一致性控制器
16.7 案例分析16-1:錯誤分享的避免
16.8 案例分析16-2:DMA和快取記憶體的一致性
16.9 案例分析16-3:自我修改程式碼的一致性
16.10 實驗
17 TLB管理
17.1 TLB基礎知識
17.2 TLB名稱重複與名稱相同問題
17.3 ASID
17.4 TLB管理指令
17.5 TLB案例分析
18 記憶體屏障指令
18.1 記憶體屏障指令產生的原因
18.2 ARM64中的記憶體屏障指令
18.3 案例分析
19 合理使用記憶體屏障指令
19.1 儲存緩衝區與寫入記憶體屏障指令
19.2 無效佇列與讀取記憶體屏障指令
19.3 記憶體屏障指令複習
19.4 ARM64的記憶體屏障指令的區別
19.5 案例分析:Linux核心中的記憶體屏障指令
20 原子操作
20.1 原子操作介紹
20.2 獨占記憶體存取指令
20.3 獨占記憶體存取工作原理
20.4 原子記憶體存取操作指令
20.5 比較並交換指令
20.6 WFE 指令在自旋鎖中的應用
21 作業系統相關話題
21.1 C語言常見陷阱
21.2 函式呼叫標準
21.3 堆疊佈局
21.4 建立處理程序
21.5 簡易處理程序排程器
21.6 系統呼叫
21.7 系統啟動
21.8 實驗
22 浮點運算與NEON 指令
22.1 資料模型
22.2 浮點運算
22.3 NEON指令集
22.4 案例分析22-1:RGB24轉BGR24
22.5 案例分析22-2:4×4矩陣乘法運算
22.6 自動向量最佳化
22.7 實驗
23 可伸縮向量計算與最佳化
23.1 SVE指令介紹
23.2 架設SVE執行和偵錯環境
23.3 SVE特有的程式設計模式
23.4 SVE與SVE2指令集
23.5 案例分析23-1:使用SVE指令最佳化strcmp( )函數
23.6 案例分析23-2:RGB24轉BGR24
23.7 案例分析23-3:4×4矩陣乘法運算
23.8 實驗