第 3 章 ARM 微處理器的指令集

39
嵌嵌嵌嵌嵌嵌嵌 - 嵌 S3C2440 嵌嵌嵌嵌嵌 嵌 3 嵌 ARM 嵌嵌嵌嵌嵌嵌嵌嵌

description

第 3 章 ARM 微處理器的指令集. 大綱. 3.1 ARM 微處理器的指令集概述 3.2 ARM 指令的定址方式 3.3 ARM 指令集 3.4 Thumb 指令及應用 3.5 討論. 大綱. 3.1 ARM 微處理器的指令集概述 3.2 ARM 指令的定址方式 3.3 ARM 指令集 3.4 Thumb 指令及應用 3.5 討論. P- 3 /67. 本章將介紹 ARM 指令集以及各類指令對應的定址方式。而對於 Thumb 指令集我們稍微地加以介紹。通過對本章的閱讀,希望讀者能瞭解 ARM 微處理器所支援的指令集及具體的使用方法。 - PowerPoint PPT Presentation

Transcript of 第 3 章 ARM 微處理器的指令集

嵌入式系統概論 - 以 S3C2440 核心為架構

第 3章 ARM微處理器的指令集

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-2/67

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-3/67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

本章將介紹 ARM 指令集以及各類指令對應的定址方式。而對於 Thumb 指令集我們稍微地加以介紹。通過對本章的閱讀,希望讀者能瞭解 ARM微處理器所支援的指令集及具體的使用方法。

以下,在本章節中,我們將敘述下列的主要內容: ARM 指令集與 Thumb 指令集概述。 ARM 指令集的分類與具體應用。 Thumb 指令集簡介及應用場合。

3.1 ARM3.1 ARM 微處理器的指令集概述微處理器的指令集概述

P-4/67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 微處理器的指令集是以載入 / 存回( Load/Store )為基礎的,也即指令集僅能處理暫存器中的資料,而且處理結果都要放回暫存器中。因此,對系統記憶體的存取則需要通過專用的載入 / 存回指令來完成。因此,讀者需對載入與存回的觀念相當清楚。

ARM 微處理器的指令集可以分為跳躍指令、資料處理指令、程式狀態暫存器( PSR )處理指令、載入 / 存回指令、協同處理器指令和例外事件產生指令六大類,具體的指令及功能(下表中指令為基本 ARM 指令,不包括衍生的ARM 指令)。

P-5/67

3.1.1 ARM 微處理器的指令的分類與格式

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

當處理器工作在 ARM 狀態時,幾乎所有的指令均根據 CPSR 中條件欄位的各位元狀態和指令的條件區域有條件的執行。當指令的執行條件滿足時,指令被執行,否則指令就被忽略。

指令的幾個重點: 所有的 ARM指令均包含一個可選擇的條件碼,以 {cond}來表示

只有滿足 CPSR的條件欄位所指定的條件時,帶條件的程式碼才可執行

P-6/67

3.1.2 3.1.2 指令的條件區域指令的條件區域

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和 P-7/67

條件碼 {cond} 組合語言附加字尾 旗標欄位 意 義0000 EQ Z設定 相等0001 NE Z清除 不相等0010 CS C設定 無號數大於或等於0011 CC C清除 無號數小於0100 MI N設定 負數0101 PL N清除 正數或零0110 VS V設定 溢位0111 VC V清除 無溢位1000 HI C設定且 Z清除 無號數大於1001 LS C清除且 Z設定 無號數小於或等於1010 GE N等於 V 有號數大於或等於1011 LT N不等於 V 有號數小於1100 GT Z清除且 N等於 V 有號數大於1101 LE Z設定或 N不等於 V 有號數小於或等於1110 AL 忽略 無條件執行1111 無意義,不存在

3.1.2 3.1.2 指令的條件區域指令的條件區域

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-8/67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

所謂的定址方式就是微處理器根據指令中所給予的位址訊息來尋找出實體位址的方式。

目前 ARM 指令系統支援如下幾種常見的定址方式: 立即定址 暫存器間接定址 基底定址 相對定址 多暫存器定址 堆疊定址

3.2 ARM3.2 ARM 指令的定址方式指令的定址方式

P-9/67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

立即定址,這是一種特殊的定址方式,運算元本身就在指令中直接加以設定,只要取出指令也就取到了運算元。這個運算元被稱為立即數值,因此其對應的定址方式也就叫做立即定址。例如,以下所示的指令: ADD R3 , R3 ,# 1 ; R3←R3 + 1 AND R8 , R7 ,# &ff ; R8←R7[7:0]

在以上兩個指令中,第二個來源運算元即為立即數值,並要求以“#”為首碼。對於以十六進制表示的立即數值,還要求在“#”後加上“ 0x” 或“ &” 。第一個指令是完成 R3 暫存器的內容加 1 ,然後將結果放回 R3 中。而第 2 個指令則是將 32-bit 的 R7 取其低 8-bit 的數值,也即是作 AND 邏輯運算,然後將結果傳送至 R8 中。

3.2.1 3.2.1 立即定位立即定位

P-10/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。如下,所示的指令: ADD R0 , R1 , R2 ; R0←R1 + R2

該指令的執行效果是將暫存器 R1 和 R2 的內容相加,其結果存放在暫存器 R0 中。

P-11/

67

3.2.2 3.2.2 暫存器間接定址暫存器間接定址

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

基底定址就是將基底暫存器的內容與指令中所給予的位址偏移量加以相加,並進而得到一個運算元的有效位址。

基底定址方式常用於存取某基底位址附近的記憶體資料,這包含了基底加上偏移量,以及基底加上索引值等來定址的方式。

基底加上偏移量所定址之用的基底暫存器所包含的並非是正確的位址。這基底暫存器需加上或是減掉最大達 4KB 的偏移量來計算出所要存取的位址。例如,以下所列的指令: LDR R0 , [R1 ,# 4] ; R0←[R1 + 4]

P-12/

67

3.2.3 3.2.3 基底定址基底定址

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

相對定址是以程式計數器 PC 的目前數值作為基底位址,指令中的位址標號作為偏移量,而將兩者相加之後可以得到有效位址。

以下所列的程式段落完成了副程式的跳躍與返回。其中,跳躍指令 BL 採用了相對定址方式: BL NEXT ;跳躍到副程式 NEXT 處執行

……NEXT……MOV PC , LR ;從副程式返回

3.2.4 3.2.4 相對定址相對定址

P-13/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

多暫存器定址,一個指令可以完成多個暫存器值的傳送。這種定址方式可以用一個指令完成傳送最多 16個通用暫存器的值。例如,以下指令:LDMIA R0 , {R1 , R2 , R3 , R4} ; R1←[R0]

; R2←[R0 + 4]; R3←[R0 + 8]; R4←[R0 +

12]

該指令的尾碼 IA 表示在每次執行完載入 / 存回操作後, R0按字元組長度增加。

上敘例子可將連續記憶體單元的數值傳送到 R1 ~R4 。

3.2.53.2.5 多暫存器定址多暫存器定址

P-14/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

遞增堆疊( Ascending Stack ):堆疊由低位址向高位址生長

遞減堆疊( Decending Stack ):當堆疊由高位址向低位址生長

ARM 微處理器支援這四種類型的堆疊工作方式,即: 滿遞增堆疊:堆疊指標指向最後填入的資料,且由低位址向高位址生長。

滿遞減堆疊:堆疊指標指向最後填入的資料,且由高位址向低位址生長。

空遞增堆疊:堆疊指標指向下一個將要放入資料的空位置,且由低位址向高地址生長。

空遞減堆疊:堆疊指標指向下一個將要放入資料的空位置,且由高位址向低地址生長。

3.2.6 3.2.6 堆疊定址堆疊定址

P-15/

67

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-16/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

跳躍指令用於實現程式流程的跳躍,在 ARM 程式中有兩種方法可以實現程式流程的跳躍: 使用特定的跳躍指令。 直接向程式計數器 PC寫入跳躍位址值。

向程式計數器 PC寫入跳躍位址值,可以實現在4GB 的位址空間中的任意跳躍。若是在跳躍之前結合使用,如, MOV LR , PC 等類似指令,可以保存將來的返回位址值,從而實現在 4GB連續的線性位址空間的副程式的呼叫使用。

P-17/

67

3.3.1 3.3.1 跳躍指令跳躍指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 指令集中的跳躍指令可以完成從目前指令向前或向後的 32MB 的位址空間的跳躍,包括以下 4個指令: B Branch ,跳躍指令。 BL Branch with Link ,包含返回的跳躍指令,也即是呼叫副程式。

BLX Branch and Exchange Instruction Set ,包含返回和狀態切換的跳躍指令。

BX Branch with Link and Exchange Instruction Set ,包含狀態切換的跳躍指令。

P-18/

67

3.3.1 3.3.1 跳躍指令跳躍指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

資料處理指令可分為資料傳送指令、算術邏輯運算指令和比較指令。 資料傳送指令用於在暫存器和記憶體之間進行資料的雙向傳輸。

算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR 中的相應條件旗標位元。

比較指令不保存運算結果,只更新 CPSR 中相應的條件旗標位元。此外,同樣需注意的是,資料處理指令僅僅當條件碼欄位是真的情況才會執行。

P-19/

67

3.3.2 3.3.2 資料處理指令資料處理指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

資料處理指令包括: MOV 資料傳送指令 MVN 資料取反相後傳送指令 CMP 比較指令 CMN 反相比較指令 TST 位元測試指令 TEQ 相等測試指令 ADD 加法指令 ADC 包含進位元加法指令 SUB 減法指令 SBC 包含借位減法指令 RSB 反向減法指令 RSC 包含借位的反向減法指令 AND 邏輯 AND 指令 ORR 邏輯 OR 指令 EOR 邏輯 XOR 指令 BIC 位元清除指令

P-20/

67

3.3.2 3.3.2 資料處理指令資料處理指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 微處理器支援的乘法指令與乘加指令共有 6條,可分為運算結果為 32 位元和運算結果為 64 位元等兩類型。

指令中的所有運算元與目的暫存器必須為通用暫存器,且不能對運算元使用立即數值或是被移位的暫存器。同時,目的暫存器和運算元 1必須是不同的暫存器。

乘法指令與乘加指令共有以下所列的 6 個: MUL 32 位元乘法指令 MLA 32 位元乘加指令 SMULL 64 位元有號數乘法指令 SMLAL 64 位元有號數乘加指令 UMULL 64 位元無號數乘法指令 UMLAL 64 位元無號數乘加指令

P-21/

67

3.3.3 3.3.3 乘法指令與乘加指令乘法指令與乘加指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 微處理器支援程式狀態暫存器存取指令,用於在程式狀態暫存器和通用暫存器之間傳送資料

程式狀態暫存器存取指令包括以下兩條: MRS 程式狀態暫存器到通用暫存器的資料傳送指令

MSR 通用暫存器到程式狀態暫存器的資料傳送指令

P-22/

67

3.3.4 3.3.4 程式狀態暫存器(程式狀態暫存器( PSRPSR ))存取指令存取指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

MRS 指令 MRS 指令的格式為:

MRS{ 條件 } 通用暫存器,程式狀態暫存器( CPSR或 SPSR )

MRS 指令用於將程式狀態暫存器的內容傳送到通用暫存器中。該指令一般用在以下幾種情況: 當需要改變程式狀態暫存器的內容時,可用 MRS 將程式狀態

暫存器的內容讀入通用暫存器,修改後再寫回程式狀態暫存器。 當在例外事件處理或程序切換時,需要保存程式狀態暫存器的

值,可先用該指令讀出程式狀態暫存器的值,然後加以保存。

MRS 指令範例: MRS R0 , CPSR ;傳送 CPSR 的內

容到 R0 MRS R0 , SPSR ;傳送 SPSR 的內

容到 R0

P-23/

67

3.3.4 3.3.4 程式狀態暫存器(程式狀態暫存器( PSRPSR ))存取指令存取指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 微處理器支援載入 / 存回指令用於在暫存器和記憶體之間傳送資料,載入指令用於將記憶體中的資料傳送到暫存器,存回指令則完成相反的操作。

常用的載入存回指令如下: LDR 字元組資料載入指令 STR 字元組資料存回指令 LDRB 位元組資料載入指令 STRB 位元組資料存回指令 LDRH 半字元組資料載入指令 STRH 半字元組資料存回指令

P-24/

67

3.3.5 3.3.5 載入載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

LDR 指令 LDR 指令的格式為:

LDR{ 條件 } 目的暫存器, < 記憶體位址 > LDR 指令用於從記憶體中將一個 32 位元的字元組資料傳送到目的暫存器中。該指令通常用於從記憶體中讀取 32 位元的字元組資料到通用暫存器,然後對資料進行處理。當程式計數器 PC 作為目的暫存器時,指令從記憶體中讀取的字元組資料被當作目的地址,從而可以實現程式流程的跳躍。該指令在程式設計中比較常用,且定址方式靈活多變,讀者需加以掌握與應用。

P-25/

67

3.3.5 3.3.5 載入載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

LDRB 指令 LDRB 指令的格式為:

LDR{ 條件 }B 目的暫存器, < 記憶體位址 > LDRB 指令用於從記憶體中將一個 8 位元的位元組資料傳送到目的暫存器中,同時將暫存器的高 24-bit 清除。該指令通常用於從記憶體中讀取 8 位元的位元組資料到通用暫存器,然後對資料進行處理。當程式計數器 PC 作為目的暫存器時,指令從記憶體中讀取的字元組資料被當作目的地址,從而可以實現程式流程的跳躍。

LDRB 指令範例: LDRB R0 , [R1] ;將記憶體位址為 R1 的位元組資料讀入暫存器 R0 ,並將 R0 的高 24 位清除。

LDRB R0 , [R1 ,# 8] ;將記憶體位址為 R1 +8 的位元組資料讀入暫存器 R0 ,並將 R0 的高 24 位清除。

P-26/

67

3.3.5 3.3.5 載入載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

STR 指令 STR 指令的格式為:

STR{ 條件 } 來源暫存器, < 記憶體位址 > STR 指令用於從來源暫存器中將一個 32 位元的字元組資料傳送到記憶體中。該指令在程式設計中比較常用,且定址方式靈活多樣,使用方式可參考指令 LDR 。

STR 指令範例: STR R0 , [R1] ,# 8 ;將 R0 中的字元組資料寫入以

R1 為位址的記憶體中,並將新位址 R1 + 8寫入 R1 。 STR R0 , [R1 ,# 8] ;將 R0 中的字元組資料寫入以

R1 + 8 為位址的記憶體中。

P-27/

67

3.3.5 3.3.5 載入載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

STRB 指令 STRB 指令的格式為:

STR{ 條件 }B 來源暫存器, < 記憶體位址 > STRB 指令用於從來源暫存器中將一個 8 位元的位元組資料傳送到記憶體中。該位元組資料為來源暫存器中的較低 8-bit 。

STRB 指令範例: STRB R0 , [R1] ;將暫存器 R0 中的位元組資料寫入以 R1 為位址的記憶體中。

STRB R0 , [R1 ,# 8] ;將暫存器 R0 中的位元組資料寫入以 R1 + 8 為位址的記憶體中。

P-28/

67

3.3.5 3.3.5 載入載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

定址模式 這些指令的傳輸位址是由基底暫存器( Rn ),之前 /之後位元( bBit-24 , P )與向上 /向下生長位元( Bit-23 ,U )的內容所決定的。

暫存器傳輸的順序是從最低到最高,所以 R15 (如果有列在欄位中的話)將總會是最後傳輸的。如此,最低的暫存器也會傳輸至最低的記憶體位址,或是從最低的記憶體位址傳輸回來。

例:考慮 R1 , R5 與 R7 的傳輸,且 Rn = 0x1000 ,以及寫回並修改基底位址是被設定的 ( W = 1 )。顯示了暫存器傳輸的步驟,其所使用的位址,以及指令結束後的 Rn 值。在所有的情形下,所修改的基底值無需寫回( W = 0 ), Rn 應會維持其啟始值, 0x1000 。而除非它也是在載入多重暫存器指令的傳輸列表中,那麼它將會以所載入的數值被覆寫過去。

P-29/

67

3.3.6 3.3.6 多重資料載入多重資料載入 //存回指令存回指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

SWP 指令 SWP 指令的格式為:

SWP{ 條件 } 目的暫存器,來源暫存器 1 , [ 來源暫存器 2]

SWP 指令用於將來源暫存器 2 所指向的記憶體中的字元組資料傳送到目的暫存器中,同時將來源暫存器 1 中的字元組資料傳送到來源暫存器 2 所指向的記憶體中。顯然,當來源暫存器 1 和目的暫存器為同一個暫存器時,指令交換該暫存器和記憶體的內容。

SWP 指令範例: SWP R0 , R1 , [R2] ;將 R2 所指向的記憶體中的字元組資料傳送到 R0 ,同時將 R1 中的字元組資料傳送到 R2所指向的存儲單元。

SWP R0 , R0 , [R1] ;該指令完成將 R1 所指向的記憶體中的字元組資料與 R0 中的字元組資料交換。

SWPEQ R0,R0,[R1] ; 有條件地交換由 R1 所指向的記憶體中的字元組資料與 R0 中的字元組資料交換。

P-30/

67

3.3.7 3.3.7 資料交換指令資料交換指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

LSL (或 ASL )操作 LSL (或 ASL )操作的格式為:通用暫存器 Rm , LSL (或 ASL ) 運算元

LSL (或 ASL )可完成對通用暫存器中的內容進行邏輯(或算術)的左移操作,且按運算元所指定的數量向左移位,而低位元則用 0 值來加以填入。其中,運算元可以是通用暫存器,也可以是立即數值( 0 ~ 31 )。

LSL 指令範例: MOV R0, R1, LSL#2 ;將 R1 中的內容左移兩位元後傳送到 R0 中。

P-31/

67

3.3.8 3.3.8 移位指令移位指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

LSR操作 LSR操作的格式為: 通用暫存器 Rm , LSR 運算元 LSR 可完成對通用暫存器中的內容進行右移的操作,按運算元所指定的數量向右移位,左端用零來填充。其中,運算元可以是通用暫存器,也可以是立即數( 0 ~ 31 )。

LSR 指令範例: MOV R0, R1, LSR#2 ;將 R1 中的內容右移兩位元後傳送到 R0 中,左端用 0 值來填充。

P-32/

67

3.3.8 3.3.8 移位指令移位指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

ARM 協同處理器指令包括以下 5 條: CDP 協同處理器操作指令 LDC 協同處理器資料載入指令 STC 協同處理器資料存回指令 MCR ARM 處理器暫存器到協同處理器暫存器的

資料傳送指令 MRC 協同處理器暫存器到 ARM 處理器暫存器的資

料傳送指令

P-33/

67

3.3.9 3.3.9 協同處理器指令協同處理器指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

SWI 指令 SWI 指令的格式為: SWI{ 條件 } 24 位元的立即數值 SWI 指令用於產生軟體中斷,以便使用者程式能呼叫作業系統的系統常式。作業系統在 SWI 的例外事件處理程式中提供相應的系統服務,指令中 24 位元的立即數值指定使用者程式呼叫系統常式的類型,相關參數通過通用暫存器傳遞。當指令中 24 位元的立即數值被忽略時,使用者程式呼叫系統常式的類型由通用暫存器 R0 的內容決定,同時,參數通過其他通用暫存器來加以傳遞。

程式範例: SWI 0x02 ;該指令呼叫作業系統編號位元 02 的系統常式。

P-34/

67

3.3.10 3.3.10 例外事件產生指令例外事件產生指令

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

BKPT 指令 BKPT 指令的格式為:

BKPT 16 位的立即數 BKPT 指令產生軟體中斷點中斷,可用於程式的調試。

3.3.10 3.3.10 例外事件產生指令例外事件產生指令

P-35/

67

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-36/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

為相容資料匯流排寬度為 16 位元的應用系統, ARM 系列架構除了支援執行效率很高的 32 位元 ARM 指令集以外,同時支援16 位元的 Thumb 指令集。

Thumb 指令集是 ARM 指令集的一個子集,允許指令編碼為16 位元的長度。與等價的 32 位元代碼相比較, Thumb 指令集在保留 32代碼優勢的同時,大大的節省了系統的記憶體空間。

所有的 Thumb 指令都有對應的 ARM 指令,而且 Thumb 的程式設計模型也對應於 ARM 的程式設計模型。

在應用程式的編寫過程中,只要遵循一定呼叫的規則, Thumb副程式和 ARM副程式就可以互相呼叫。當處理器在執行ARM 程式段時,稱 ARM 處理器處於 ARM 工作狀態,當處理器在執行 Thumb 程式段時,稱 ARM 處理器處於 Thumb 工作狀態。

P-37/

67

3.4 Thumb3.4 Thumb 指令及應用指令及應用

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱大綱3.1 ARM 微處理器的指令集概述3.2 ARM 指令的定址方式3.3 ARM 指令集3.4 Thumb 指令及應用3.5 討論

P-38/

67

嵌入式系統概論 -以 S3C2440 核心為架構 copyright @ 許永和

本章系統的介紹了 ARM 指令集中的基本指令,以及各指令的應用場合及方法,由基本指令還可以派生出一些新的指令,但使用方法與基本指令類似。與常見的如 X86 體系結構的彙編指令相比較, ARM 指令系統無論是從指令集本身,還是從定址方式上,都相對複雜一些。

Thumb 指令集作為 ARM 指令集的一個子集,其使用方法與 ARM 指令集類似,在此未作詳細的描述,但這並不意味著 Thumb 指令集不如 ARM 指令集重要,事實上,他們各自有其自己的應用場合。

3.5 3.5 討論討論

P-39/

67