ARM體系結構與編程(第2版)

ARM體系結構與編程(第2版)

ARM處理器是一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,由ARM公司設計,然後授權給各半導體廠商生產,它目前已經成為套用最為廣泛的嵌入式處理器。

目錄

第1章 ARM概述及其基本編程模型

1.1 ARM技術的套用領域及其特點 1

1.2 ARM體系結構的版本及命名方法 2

1.2.1 ARM體系結構的版本 2

1.2.2 ARM體系的變種 4

1.2.3 ARM/Thumb體系版本的命名

格式 6

1.3 ARM處理器系列 7

1.3.1 ARM7系列 7

1.3.2 ARM9系列 8

1.3.3 ARM9E系列 9

1.3.4 ARM10E系列 9

1.3.5 SecurCore系列 10

1.4 ARM處理器的運行模式 11

1.5 ARM暫存器介紹 11

1.5.1 通用暫存器 12

1.5.2 程式狀態暫存器 15

1.6 ARM體系的異常中斷 17

1.6.1 ARM中異常中斷的種類 17

1.6.2 ARM處理器對異常中斷的

回響過程 18

1.6.3 從異常中斷處理程式中返回 19

1.7 ARM體系中的存儲系統 19

1.7.1 ARM體系中的存儲空間 19

1.7.2 ARM存儲器格式 19

1.7.3 非對齊的存儲訪問操作 20

1.7.4 指令預取和自修改代碼 21

第2章 ARM指令分類及其定址方式 22

2.1 ARM指令集概要介紹 22

2.1.1 ARM指令的分類 22

2.1.2 ARM指令的一般編碼格式 22

2.1.3 ARM指令的條件碼域 23

2.2 ARM指令的定址方式 24

2.2.1 數據處理指令的運算元的

定址方式 24

2.2.2 字及無符號位元組的Load/Store

指令的定址方式 34

2.2.3 雜類Load/Store指令的

定址方式 46

2.2.4 批量Load/Store指令的

定址方式 52

2.2.5 協處理器Load/Store指令的

定址方式 56

第3章 ARM指令集介紹 61

3.1 ARM指令集 61

3.1.1 跳轉指令 61

3.1.2 數據處理指令 65

3.1.3 乘法指令 78

3.1.4 雜類的算術指令 84

3.1.5 狀態暫存器訪問指令 85

3.1.6 Load/Store記憶體訪問指令 88

3.1.7 批量 Load/Store記憶體訪問

指令 97

3.1.8 信號量操作指令 102

3.1.9 異常中斷產生指令 104

3.1.10 ARM協處理器指令 106

3.2 一些基本的ARM指令功能段 110

3.2.1 算術邏輯運算指令的套用 111

3.2.2 跳轉指令的套用 112

3.2.3 Load/Store指令的套用 114

3.2.4 批量Load/Store指令的

套用 115

3.2.5 信號量指令的套用 116

3.2.6 與系統相關的一些指令

代碼段 117

3.3 Thumb指令介紹 120

第4章 ARM彙編語言程式設計 122

4.1 偽操作 122

4.1.1 符號定義偽操作 122

4.1.2 數據定義偽操作 126

4.1.3 彙編控制偽操作 135

4.1.4 數據幀描述偽操作 138

4.1.5 信息報告偽操作 139

4.1.6 其他的偽操作 141

4.2 ARM彙編語言偽指令 151

4.3 ARM彙編語言語句的格式 153

4.3.1 ARM彙編語言中的符號 154

4.3.2 ARM彙編語言中的表達式 157

4.4 ARM彙編語言程式的格式 162

4.4.1 彙編語言程式的格式 162

4.4.2 彙編語言子程式的調用 163

4.5 ARM彙編編譯器的使用 164

4.6 彙編程式設計舉例 166

4.6.1 ARM中偽操作的使用實例 166

4.6.2 ARM彙編程式的實例 169

第5章 ARM的存儲系統 175

5.1 ARM存儲系統概述 175

5.2 ARM中用於存儲管理的系統控制

協處理器CP15 176

5.2.1 訪問CP15暫存器的指令 176

5.2.2 CP15中的暫存器 178

5.3 存儲器管理單元MMU 186

5.3.1 存儲器管理單元MMU

概述 186

5.3.2 禁止/使能MMU 188

5.3.3 MMU中的地址變換過程 189

5.3.4 MMU中的存儲訪問許可權

控制 198

5.3.5 MMU中的域 199

5.3.6 關於快表的操作 199

5.3.7 ARM中的存儲訪問失效 201

5.4 高速緩衝存儲器和寫緩衝區 205

5.4.1 基本概念 205

5.4.2 Cache的工作原理和地址映像

方法 206

5.4.3 Cache的分類 208

5.4.4 Cache的替換算法 209

5.4.5 緩衝技術的使用注意事項 210

5.4.6 存儲系統的一致性問題 211

5.4.7 Cache內容鎖定 213

5.4.8 與Cache和寫緩衝區相關的

編程接口 214

5.5 快速上下文切換技術 217

5.5.1 快速上下文切換技術原理 217

5.5.2 快速上下文切換技術編程

接口 219

5.6 與存儲系統相關的程式設計指南 219

5.6.1 地址空間 219

5.6.2 存儲器的格式 220

5.6.3 非對齊的存儲訪問操作 221

5.6.4 指令預取和自修改代碼 222

5.6.5 IMB 223

5.6.6 存儲器映射的I/O空間 224

5.7 ARM存儲系統的實例 225

5.7.1 L7205的存儲系統概述 225

5.7.2 L7205中的SDRAM 226

5.7.3 L7205中的MMU 235

第6章 ATPCS介紹 242

6.1 ATPCS概述 242

6.2 基本ATPCS 242

6.2.1 暫存器的使用規則 243

6.2.2 數據棧的使用規則 244

6.2.3 參數傳遞規則 245

6.3 幾種特定的ATPCS 246

6.3.1 支持數據棧限制檢查的

ATPCS 246

6.3.2 支持唯讀段位置無關

(ROPI)的ATPCS 248

6.3.3 支持可讀寫段位置無關

(RWPI)的ATPCS 248

6.3.4 支持ARM程式和Thumb程式

混合使用的ATPCS 248

6.3.5 處理浮點運算的ATPCS 249

第7章 ARM程式和Thumb程式混合

使用 250

7.1 概述 250

7.2 在彙編語言程式中通過用戶代碼

支持interwork 251

7.2.1 可以實現程式狀態切換的

指令 251

7.2.2 與程式狀態切換相關的

偽操作 254

7.2.3 進行狀態切換的彙編程式

實例 255

7.3 在C/C++程式中實現interwork 256

7.4 在彙編語言程式中通過連線器

支持interwork 259

7.4.1 利用veneers實現彙編程式間的

程式狀態切換 259

7.4.2 利用veneers實現彙編程式

與C/C++程式間的程式狀態

切換 261

第8章 C/C++以及彙編語言的混合

編程 263

8.1 內嵌彙編器的使用 263

8.1.1 內嵌的彙編指令用法 263

8.1.2 內嵌的彙編器和armasm的

區別 265

8.1.3 在C/C++程式中使用內嵌的

彙編指令 265

8.1.4 內嵌彙編指令的套用舉例 267

8.2 從彙編程式中訪問C程式變數 270

8.3 彙編程式、C程式以及C++程式的

相互調用 271

8.3.1 在C++程式中使用C程式

頭檔案 271

8.3.2 彙編程式、C程式以及C++

程式的相互調用舉例 272

第9章 異常中斷處理 276

9.1 ARM中的異常中斷處理概述 276

9.1.1 ARM體系中的異常中斷

種類 276

9.1.2 異常中斷向量表及異常中斷

優先權 277

9.1.3 異常中斷使用的暫存器 278

9.2 進入和退出異常中斷的過程 279

9.2.1 ARM處理器對異常中斷的

回響過程 279

9.2.2 從異常中斷處理程式中

返回 282

9.3 在應用程式中安排異常中斷處理

程式 285

9.3.1 在系統復位時安排異常中斷

處理程式 285

9.3.2 在C程式中安排異常中斷

處理程式 286

9.4 SWI異常中斷處理程式 288

9.4.1 SWI異常中斷處理程式的

實現 288

9.4.2 SWI異常中斷調用 292

9.5 FIQ和IRQ異常中斷處理程式 297

9.5.1 IRQ/FIQ異常中斷處理

程式 298

9.5.2 IRQ異常中斷處理程式

舉例 300

9.6 復位異常中斷處理程式 302

9.7 未定義指令異常中斷 302

9.8 指令預取中止異常中斷處理程式 303

9.9 數據訪問中止異常中斷處理程式 303

第10章 ARM C/C++編譯器 304

10.1 ARM C/C++編譯器概述 304

10.1.1 ARM C/C++編譯器及語言庫

介紹 304

10.1.2 ARM編譯器中與搜尋路徑

相關的一些基本概念 305

10.2 ARM編譯器命令行格式 306

10.2.1 過程調用標準 307

10.2.2 設定源程式語言類型 308

10.2.3 指定搜尋路徑 309

10.2.4 設定預處理選項 309

10.2.5 設定輸出檔案的類型 310

10.2.6 指定目標處理器和ARM

體系版本 311

10.2.7 生成調試信息 312

10.2.8 代碼生成的控制 313

10.2.9 控制警告信息的產生 315

10.2.10 編譯時進行的一些額外的

檢查 317

10.2.11 控制錯誤信息 318

10.3 ARM編譯器中的pragmas 319

10.4 ARM編譯器特定的關鍵字 321

10.4.1 用於聲明函式的關鍵字 321

10.4.2 用於聲明變數的關鍵字 333

10.4.3 用於限定數據類型的

關鍵字 333

10.5 ARM編譯器支持的基本數據

類型 335

10.6 ARM編譯器中的預定義宏 337

10.7 ARM中的C/C++庫 339

10.7.1 ARM中的C/C++運行時庫

概述 339

10.7.2 建立一個包含C/C++運行時

庫的C/C++應用程式 340

10.7.3 建立不包含C運行時庫的

應用程式 344

10.7.4 裁減C/C++運行時庫以適應

特定的目標運行環境 345

第11章 ARM連線器 347

11.1 ARM映像檔案 347

11.1.1 ARM映像檔案的組成 347

11.1.2 ARM映像檔案的入口點 349

11.1.3 輸入段的排序規則 350

11.2 ARM連線器介紹 351

11.3 ARM連線器生成的符號 353

11.3.1 連線器生成的與域相關的

符號 353

11.3.2 連線器生成的與輸出段相關的

符號 354

11.3.3 連線器生成的與輸入段相關的

符號 354

11.4 連線器的最佳化功能 354

11.5 運行時庫的使用 355

11.5.1 C/C++運行時庫與目標

檔案 356

11.5.2 查找需要的C/C++

運行時庫 356

11.5.3 選擇合適種類的C/C++

運行時庫 357

11.5.4 掃描C/C++運行時庫 359

11.6 從一個映像檔案中使用另一個映像

檔案中的符號 359

11.6.1 symdefs檔案 359

11.6.2 建立symdefs檔案 361

11.6.3 symdefs檔案的使用 361

11.7 隱藏或者重命名全局符號 362

11.7.1 steering檔案的格式 362

11.7.2 steering檔案中的命令 362

11.8 ARM連線器的命令行選項 363

11.9 使用scatter檔案定義映像檔案的

地址映射 371

11.9.1 scatter檔案概述 371

11.9.2 scatter檔案中各部分的

介紹 373

11.9.3 scatter檔案使用舉例 376

第12章 嵌入式應用程式示例 384

12.1 嵌入式應用程式設計的基本知識 384

12.1.1 嵌入式套用系統中的存儲

映射 384

12.1.2 系統初始化 385

12.2 使用semihosting的C語言程式

示例 388

12.2.1 源程式分析 388

12.2.2 生成映像檔案 391

12.3 一個嵌入式套用系統示例 392

12.3.1 源程式分析 393

12.3.2 生成映像檔案 400

12.3.3 本例中地址映射模式 401

12.4 進行ROM/RAM地址重映射的

嵌入式套用系統 401

12.4.1 地址映射模式 401

12.4.2 源程式分析 403

12.4.3 生成映像檔案 404

12.5 一個嵌入式作業系統示例 405

第13章 使用CodeWarrior 412

13.1 CodeWarrior for ARM概述 412

13.2 簡單工程項目的使用 413

13.2.1 工程項目視窗 413

13.2.2 簡單工程項目的使用 416

13.3 配置生成目標 424

13.3.1 Debug Settings對話框

介紹 424

13.3.2 設定生成目標的基本選項 425

13.3.3 彙編器選項的設定 430

13.3.4 編譯器的選項設定 435

13.3.5 連線器的選項設定 443

13.3.6 fromELF工具的選項設定 449

13.4 複雜工程項目的使用 451

13.4.1 建立一個新的生成目標 451

13.4.2 將一個生成目標更名 453

13.4.3 建立生成目標之間的依賴

關係 453

13.4.4 子工程項目的使用 455

13.5 工程項目模板 456

13.5.1 ADS中工程項目模板的

使用 457

13.5.2 建立用戶工程項目模板 461

13.6 編譯和連線工程項目 461

13.6.1 編譯檔案 462

13.6.2 生成工程項目 463

第14章 ARM體系中的調試方法 465

14.1 ARM體系中的調試系統概述 465

14.2 基於Angel的調試系統 466

14.2.1 基於Angel的調試系統的

概述 466

14.2.2 使用Angel開發應用程式 469

14.2.3 Angel執行的操作 474

14.2.4 將Angel移植到特定的目標

系統 476

14.3 基於JTAG的調試系統 495

14.3.1 基於JTAG的調試系統的

特點 495

14.3.2 基於JTAG的調試系統

結構 495

14.3.3 目標系統中的調試功能擴展

部件 496

14.3.4 基於JTAG的調試過程 498

14.4 ADW使用介紹 498

14.4.1 ADW概述 498

14.4.2 ADW中的視窗 501

14.4.3 ADW使用介紹 505

參考文獻 513

相關詞條

熱門詞條

聯絡我們