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

ARM體係結構與編程(第2版) pdf epub mobi txt 電子書 下載 2025

杜春雷 著
圖書標籤:
  • ARM
  • 嵌入式係統
  • 體係結構
  • 編程
  • 匯編
  • C語言
  • 單片機
  • 處理器
  • 計算機組成原理
  • 技術
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302403425
版次:2
商品編碼:11742624
品牌:清華大學
包裝:平裝
開本:16開
齣版時間:2015-07-01
用紙:膠版紙
頁數:512
字數:797
正文語種:中文

具體描述

內容簡介

  ARM處理器是一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,由ARM公司設計,然後授權給各半導體廠商生産,它目前已經成為應用最為廣泛的嵌入式處理器。《ARM體係結構與編程(第2版)》共為分14章,對ARM處理器的體係結構、指令係統和開發工具進行瞭比較全麵的介紹。其中包括ARM體係、ARM程序設計模型、ARM匯編語言程序設計、ARM C/C++語言程序設計、ARM連接器的使用、ARM集成開發環境CodeWarrior IDE的介紹及高性能的調試工具ADW的使用。並在此基礎上介紹一些典型的基於ARM體係的嵌入式應用係統設計的基本技術。通過閱讀本書,可以使讀者掌握開發基於ARM的應用係統的各方麵的知識。本書既可作為學習ARM技術的培訓材料,也可作為嵌入式係統開發人員的參考手冊。

目錄

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

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

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

1.3 ARM處理器係列 7

1.4 ARM處理器的運行模式 11

1.5 ARM寄存器介紹 11

1.6 ARM體係的異常中斷 17

1.7 ARM體係中的存儲係統 19

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

2.1 ARM指令集概要介紹 22

2.2 ARM指令的尋址方式 24

第3章 ARM指令集介紹 61

3.1 ARM指令集 61

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

3.3 Thumb指令介紹 120

第4章 ARM匯編語言程序設計 122

4.1 僞操作 122

4.2 ARM匯編語言僞指令 151

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

4.4 ARM匯編語言程序的格式 162

4.5 ARM匯編編譯器的使用 164

4.6 匯編程序設計舉例 166

第5章 ARM的存儲係統 175

5.1 ARM存儲係統概述 175

5.2 ARM中用於存儲管理的係統控製

協處理器CP15 176

5.3 存儲器管理單元MMU 186

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

5.5 快速上下文切換技術 217

5.6 與存儲係統相關的程序設計指南 219

5.7 ARM存儲係統的實例 225

第6章 ATPCS介紹 242

6.1 ATPCS概述 242

6.2 基本ATPCS 242

6.3 幾種特定的ATPCS 246

第7章 ARM程序和Thumb程序混閤

使用 250

7.1 概述 250

7.2 在匯編語言程序中通過用戶代碼

支持interwork 251

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

7.4 在匯編語言程序中通過連接器

支持interwork 259

第8章 C/C++以及匯編語言的混閤

編程 263

8.1 內嵌匯編器的使用 263

8.2 從匯編程序中訪問C程序變量 270

8.3 匯編程序、C程序以及C++程序的

相互調用 271

第9章 異常中斷處理 276

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

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

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

程序 285

9.4 SWI異常中斷處理程序 288

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

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

9.7 未定義指令異常中斷 302

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

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

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

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

10.2 ARM編譯器命令行格式 306

10.3 ARM編譯器中的pragmas 319

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

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

類型 335

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

10.7 ARM中的C/C++庫 339

第11章 ARM連接器 347

11.1 ARM映像文件 347

11.2 ARM連接器介紹 351

11.3 ARM連接器生成的符號 353

11.4 連接器的優化功能 354

11.5 運行時庫的使用 355

11.6 從一個映像文件中使用另一個映像

文件中的符號 359

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

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

11.9 使用scatter文件定義映像文件的

地址映射 371

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

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

12.2 使用semihosting的C語言程序

示例 388

12.3 一個嵌入式應用係統示例 392

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

嵌入式應用係統 401

12.5 一個嵌入式操作係統示例 405

第13章 使用CodeWarrior 412

13.1 CodeWarrior for ARM概述 412

13.2 簡單工程項目的使用 413

13.3 配置生成目標 424

13.4 復雜工程項目的使用 451

13.5 工程項目模闆 456

13.6 編譯和連接工程項目 461

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

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

14.2 基於Angel的調試係統 466

14.3 基於JTAG的調試係統 495

14.4 ADW使用介紹 498

參考文獻 513

精彩書摘

  其中的符號及參數說明如下。

  :是指令助記符,如ADD錶示算術加操作指令。

  {}:錶示指令執行的條件。

  {S}:決定指令的操作是否影響CPSR的值。

  :錶示目標寄存器。

  :錶示包含第1個操作數的寄存器。

  :錶示第2個操作數。

  通常有下麵3種格式。

  (1) 立即數方式。每個立即數由一個8位的常數循環右移偶數位得到。其中循環右移的位數由一個4位二進製的兩倍錶示。如果立即數記作,8位常數記作immed_8,4位的循環右移值記作rotate_imm,則有:

  = immed_8循環右移(2*rotate_imm)

  這樣並不是每一個32位的常數都是閤法的立即數,隻有能夠通過上麵構造方法得到的纔是閤法的立即數。下麵的常數是閤法的立即數:

  0Xff,0x104,0xff0,0xff00

  而下麵的數不能通過上述構造方法得到,則不是閤法的立即數:

  0x101,0x102,0xFF1

  同時按照上麵的構造方法,一個閤法的立即數可能有多種編碼方法。如0x3F0是一個閤法的立即數,它可以采用下麵兩種編碼方法:

  immed_8=0x3F,rotate_imm=0xE 或者

  immed_8=0xFC,rotate_imm=0Xf

  但是,由於這種立即數的構造方法中包含瞭循環移位操作,而循環移位操作會影響CPSR的條件標誌位C。因此,同一個閤法的立即數由於采用瞭不同的編碼方式,將使某些指令的執行産生不同的結果,這是不能允許的。ARM匯編編譯器按照下麵的規則來生成立即數的編碼。

  當立即數數值在0和0xFF範圍中時,令immed_8=,rotate_ imm=0。

  其他情況下,匯編編譯器選擇使rotate_imm數值最小的編碼方式。

  (2) 寄存器方式。在寄存器尋址方式下,操作數即為寄存器的數值。如下例所示:

  MOV R3,R2 ; 將R2的數值放到R3中

  ADD R0,R1,R2 ; R0的數值等於R1的數值加上R2的數值

  (3) 寄存器移位方式。寄存器移位方式的操作數為寄存器的數值做相應的移位(或者循環移位)而得到。具體的移位(或者循環移位)的方式有下麵幾種。

  ASR:算術右移。

  LSL:邏輯左移。

  LSR:邏輯右移。

  ROR:循環右移。

  RRX:擴展的循環右移。

  移位(或者循環移位)的位數可以用立即數方式或者寄存器方式錶示。

  下麵是一些寄存器移位方式的操作數示例:

  MOV R0,R1,LSL #3 ; R0=R1*(2**3)

  ADD R0,R1,R1,LSL #3 ; R0=R1+R1*(2**3)

  SUB R0,R1,R2,LSR #4 ; R0=R1-R2/(2**4)

  MOV R0,R1,ROR R2 ; R0=R1循環右移R2位

  數據處理指令操作數的具體尋址方式有下麵11種。

  #

  , LSL #

  , LSL

  , LSR #

  , LSR

  , ASR #

  , ASR

  , ROR #

  , ROR

  , RRX

  1. #

  指令編碼格式

  31 28 27 25 24 21 20 19 16 15 12 11 8 7 0

  cond 0 0 1 opcode S Rn Rd rotate_imm immed_8

  操作數生成方法

  指令的操作數即為立即數#。立即數#的生成方法見前麵章節的介紹。當rotate_imm=0時,循環器的進位值(即 Carry-out 位)為CPSR中的C條件標誌位;當rotate_imm!=0時,循環器的進位值(即 Carry-out 位)為操作數的最高位bit[31]。

  指令中操作數的語法格式

  #

  其中,= immed_8循環右移(2*rotate_imm)。

  指令中操作數尋址操作的僞代碼

  shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)

  if rotate_imm == 0 then

  shifter_carry_out = C flag

  else /* rotate_imm != 0 */

  shifter_carry_out = shifter_operand[31]

  使用說明

  這裏需要注意,關於立即數的閤法性以及立即數編碼的規則,具體細節在上一節已經做瞭詳細描述,這裏不再重復。

  示例

  MOV R0,#0xFC0 ; 令R0的數值為0xFC0

  2.

  指令編碼格式

  31 28 27 25 24 21 20 19 16 15 12 11 7 6 4 3 0

  cond 0 0 0 opcode S Rn Rd 0 0 0 0 0 0 0 0 Rm

  操作數生成方法

  指令的操作數即為寄存器的數值。循環器的進位值(即 Carry-out 位)為CPSR中的C條件標誌位。

  指令中操作數的語法格式

  其中,指定操作數所在的寄存器。

  指令中操作數尋址操作的僞代碼

  shifter_operand = Rm

  shifter_carry_out = C Flag

  使用說明

  當R15用作第1個源操作數Rn或者第2個操作數Rm時,操作數即為當前指令地址加常數8。

  示例

  MOV R3,R2 ; 將R2的數值放到R3中

  ADD R0,R1,R2 ; R0的數值等於R1的數值加上R2的數值

  3. , LSL #

  指令編碼格式

  31 28 27 25 24 21 20 19 16 15 12 11 7 6 4 3 0

  cond 0 0 0 opcode S Rn Rd shift_imm 0 0 0 Rm

  操作數生成方法

  指令的操作數為寄存器Rm的數值邏輯左移shift_imm位。由於shift _imm為5位,所以移位的範圍為0~31位。進行移位操作後,空齣的位添0。當shift_imm=0時,循環器的進位值(即Carry-out位)為CPSR中的C條件標誌位;當shift_imm!=0時,循環器的進位值為操作數的最高位bit[31]。

  指令中操作數的語法格式

  ,LSL #

  其中:

  為進行邏輯左移操作的寄存器。

  LSL錶示邏輯左移操作。

  為邏輯左移位數,範圍為0~31。

  指令中操作數尋址操作的僞代碼

  if shift_imm == 0 then /*寄存器操作數 */

  shifter_operand = Rm

  shifter_carry_out = C Flag

  else /* shift_imm > 0 */

  shifter_operand = Rm Logical_Shift_Left shift_imm

  shifter_carry_out = Rm[32 - shift_imm]

  使用說明

  當R15用作第1個源操作數Rn或者第2個操作數Rm時,操作數即為當前指令地址加常數8。

  示例

  MOV R0,R0,LSL #n ; R0=R0*(2**n)

  4. , LSL

  指令編碼格式

  31 28 27 25 24 21 20 19 16 15 12 11 8 7 4 3 0

  cond 0 0 0 opcode S Rn Rd Rs 0 0 0 1 Rm

  ……

前言/序言

  嵌入式係統是指以應用為中心,以計算機技術為基礎,軟件硬件可裁剪,適應應用係統對功能、可靠性、成本、體積和功耗嚴格要求的專用計算機係統。

  嵌入式係統並不是最近齣現的新技術,隻是隨著微電子技術和計算機技術的發展,微控製芯片功能越來越強大,嵌入微控製芯片的設備和係統越來越多,從而使得這種技術越來越引人注目而已。嵌入式係統與通用的計算機係統既有相似之處,也有明顯的區彆。通常,嵌入式係統中的係統程序(包括操作係統)與應用程序是渾然一體的,這些程序被編譯連接成一個可以執行的二進製映像文件(Image),這個二進製映像文件被固化在係統中,在係統復位後自動執行。嵌入式係統的開發係統與實際運行的係統並不相同,需要交叉編譯係統和適當的調試係統。

  ARM嵌入式處理器是一種高性能、低功耗的RISC芯片。它由英國ARM公司設計,世界上幾乎所有的主要半導體廠商都生産基於ARM體係結構的通用芯片,或在其專用芯片中嵌入ARM的相關技術。如TI、Motorola、Intel、NS、Philips、Altera、Agilent、Atmel、Hynix、Sharp、Triscend、NEC、Cirrus Logic、Samsung和LinkUp等公司都有相應的産品。目前ARM芯片廣泛應用於無綫産品、PDA、GPS、網絡、消費電子産品、STB及智能卡中,基於ARM內核的處理器年産量突破90億個,已經成為業界的龍頭。本書比較全麵地介紹基於ARM技術的嵌入式應用係統的開發技術。

  1. 本書的主要讀者

  本書對ARM處理器的體係結構、指令係統、開發工具做瞭比較全麵的介紹。並在此基礎上討論一些典型的基於ARM體係嵌入式應用係統設計時的基本技術。通過閱讀本書,可以使讀者能夠掌握開發基於ARM的應用係統的各方麵的知識。它既可作為學習ARM技術的培訓材料,也可作為嵌入式係統開發人員的參考手冊。

  2. 本書的主要內容

  本書以可執行的二進製映像文件(Image)為中心,介紹基於ARM微處理器的嵌入式係統的開發過程所涉及的知識,主要包括以下幾部分。

  * Image文件的“原材料”,包括*.c、*.h、*.obj、*.asm及*.lib文件。這些文件包括操作係統,通常以*.lib形式提供,也有一些操作係統附屬的源代碼,可以為*.c、*.h、*.asm;BSP(其實也是操作係統的一部分,因為它對於不同的計算機主闆是不同的,這裏將其單獨列齣),它通常為*.c、*.h、*.asm;語言庫(如C語言運行庫),通常為*.lib;用戶自己的應用程序,通常為*.c、*.h、*.asm。

  本書將對應地介紹:ARM的體係結構;ARM的指令係統;ARM匯編語言,對應於*.asm文件;ARM C語言的獨到部分(與標準C相同的部分這裏不做介紹),對應於*.c;ARM的編程指南;ARM的編譯器使用。

  本書還將介紹ARM公司提供的集成開發環境CodeWarrior IDE的使用方法。

  * Image文件各部分的組織方法以及在內存中的安排。

  本書將對應地介紹ELF格式的映像文件的組成、ARM連接器的使用、程序在 ROM中的存放技術。

  * Image文件中各部分的功能。

  本書將對應地介紹一個嵌入式係統各部分的功能,著重介紹係統啓動部分的設計。這部分是嵌入式係統涉及的難點,將通過一些實例來介紹。

  * Image的調試。

  本書主要介紹ARM公司的調試工具ADW的使用方法。同時將介紹嵌入式係統的基本調試方法。

  3. 本書的結構安排

  全書包括14章。各章主要內容說明如下。

  第1章簡要介紹ARM公司的情況以及基於ARM技術的嵌入式係統的應用情況,比較詳細地介紹當前ARM體係結構的主要版本,簡要介紹目前ARM處理器的種類及其主要特點。通過這一章的介紹,讀者可以對ARM技術有一個總體的瞭解。

  第2章介紹ARM編程模型的基本知識。主要包括ARM處理器模式、ARM體係中的寄存器及其使用方式、ARM體係中異常中斷處理的基本概念以及ARM體係中存儲訪問的基本知識。通過這一章的介紹,讀者將瞭解ARM編程模型的基本知識,為詳細瞭解ARM程序設計的各項技術打好基礎。

  第3章詳細介紹ARM體係的指令係統以及尋址方式。將介紹ARM指令集和Thumb指令集各自的應用領域。雖然沒有詳細介紹Thumb指令集,但並不是因為Thumb指令集不重要,而是因為從功能上來講,它是ARM指令集的子集,在瞭解ARM指令集的基礎上很容易理解Thumb指令。介紹各指令的編碼格式、語法格式、執行的操作以及應用方法。最後將介紹一些常用的ARM指令代碼段,幫助用戶進一步理解各指令的用法,積纍一些ARM代碼設計的基本方法。

  第4章介紹ARM匯編語言程序設計的基本方法以及ARM匯編器armasm的使用方法。其中包括ARM匯編語言中的僞操作(Directives)、宏指令(Pseudo-instruction)、匯編語言格式、armasm的使用方法以及一些匯編語言程序示例。通過這些介紹,讀者可以掌握ARM匯編語言設計的方法。

  第5章介紹ARM體係的存儲係統。在一個嵌入式係統中,存儲係統是非常重要的一部分。這裏將介紹ARM體係中用於存儲管理的協處理器CP15、存儲管理單元MMU、寫緩衝以及Cache、快速上下文切換技術,還將介紹有關存儲係統的程序設計。並以LinkUp公司ARM處理器芯片L7210中的存儲係統為例,介紹ARM存儲係統的設計技術。其中沒有介紹存儲保護單元MPU,這是因為MPU更簡單,而MMU的應用更為廣泛。該章對於虛擬存儲技術、緩衝技術以及Cache技術都將做比較詳細的介紹,使那些從事基於低端單片機應用的開發人員更容易理解ARM體係中存儲係統的設計技術。

  第6章介紹ARM/Thumb過程調用的標準。為瞭能使單獨編譯的C語言程序和匯編程序之間能夠相互調用,必須為子程序間的調用製定一定的規則。ATPCS規定瞭ARM程序和Thumb程序中子程序調用的基本規則。這些基本規則包括子程序調用過程中寄存器的使用規則、數據棧的使用規則和參數的傳遞規則等。同時,該章還將介紹支持數據棧檢查的ATPCS以及與代碼/數據位置無關的ATPCS。

  第7章介紹ARM程序和Thumb程序混閤使用的方法。如果程序遵守支持ARM程序和Thumb程序混閤使用的ATPCS,則程序中的ARM子程序和Thumb子程序可以相互調用。對於C/C++源程序而言,隻要在編譯時指定-apcs /interwork選項,編譯器生成的代碼就遵守支持ARM程序和Thumb程序混閤使用的ATPCS。而對於匯編源程序而言,用戶必須保證編寫的代碼遵守支持ARM程序和Thumb程序混閤使用的ATPCS。該章將介紹相關的選項和編程技術。

  第8章介紹ARM匯編程序以及C/C++程序之間相互調用的技術。其中將介紹C編譯器中內嵌的匯編器的使用方法。

  第9章詳細介紹ARM體係中的異常中斷技術。其中包括異常中斷處理的處理過程,各種異常中斷處理的進入和返迴機製,在應用程序中使用異常中斷處理的方法以及各種異常中斷的詳細使用技術。

  第10章主要介紹ARM體係中C/C++語言程序設計的基本知識。其中包括ARM C/C++語言的一些特性、ARM C/C++編譯器的使用方法,以及ARM C/C++運行時庫的使用方法。通過這些介紹,可以使讀者掌握開發嵌入式C/C++應用程序的基本知識和方法,進一步瞭解嵌入式應用係統的特點。

  第11章介紹如何由目標文件以及庫文件得到可執行的映像文件。其中包括ELF格式的可執行映像文件的組成、ARM連接器的使用方法,以及連接過程所執行的各種操作。最後通過一些實例介紹在映像文件中各部分內容的地址映射關係。

  第12章介紹嵌入式應用程序設計的基本知識,然後通過幾個示例具體說明嵌入式應用程序的設計方法。對於每個示例,不僅詳細介紹程序設計的要點,而且介紹如何使用ARM開發工具編譯、連接這些程序,生成映像文件。該章是對前麵幾章知識的綜閤應用。

  第13章介紹CodeWarrior IDE集成開發環境的使用方法。其中著重介紹在CodeWarrior IDE中工程項目的使用方法,以及生成目標的設置方法。這些知識是使用CodeWarrior IDE進行應用程序開發時最為重要的部分。

  第14章介紹ARM體係的調試係統和ARM公司的高性能調試工具ADW的使用方法。ADW的功能非常多,本書並不是一本專門介紹ADW的書。因而隻是介紹其中的一些基本功能和嵌入式係統的基本調試方法。

  4. 閱讀本書時的注意事項

  在嵌入式應用係統的開發技術中,涉及很多名詞術語,本書主要使用在國內單片機技術領域中通用的一些名詞術語,但仍有一些ARM體係中特有的名詞術語較難翻譯。本書中有很多詞是按照其技術含義來錶達的,而不是按單詞直接翻譯。同時,對於一些名詞術語,本書在括號內給齣瞭其英文名稱,便於讀者理解。

  對於ARM指令係統,本書給齣瞭詳細的介紹,是希望該部分能作為編寫ARM匯編程序的開發人員的參考資料,提高開發人員的工作效率。

  本書在編寫過程中,得到瞭ARM(上海)的大力支持,在此錶示衷心的感謝。

  作 者


用戶評價

評分

還可以,有錯誤

評分

給同事的知識儲備,應該不錯。

評分

書內容是想看的,京東物流就是快,一直支持京東,知識就是力量

評分

okkkkkkkkkkkkkkkkk

評分

替同學買的,感覺還可以。

評分

多次使用,很好用,推薦購買

評分

不會不會不會不會,就像個芯片手冊,係列芯片手冊

評分

物流很快,服務態度好,東西一如既往地好,信賴京東!

評分

不錯的書 很好!

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有