ARM指令與thumb 指令

2022-07-18 23:09:27 字數 4749 閱讀 4770

1 thumb指令集概述

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

thumb指令集是arm指令集的乙個子集,是針對**密度問題而提出的,它具有16位的**寬度。與等價的32位**相比較,thumb指令集在保留32位**優勢的同時,大大的節省了系統的儲存空間。thumb不是乙個完整的體系結構,不能指望處理器只執行thumb指令集而不支援arm指令集。

當處理器在執行arm程式段時,稱arm處理器處於arm工作狀態,當處理器在執行thumb程式段時,稱arm處理器處於thumb工作狀態(cpsr的t=0:arm,t=1:thumb)。thumb指令集並沒有改變arm體系底層的程式設計模型,只是在該模型上增加了一些限制條件,只要遵循一定的呼叫規則,thumb子程式和arm子程式就可以互相呼叫。

與arm指令集相比較,thumb指令集中的資料處理指令的運算元仍然是32位,指令位址也為32位,但thumb指令集為實現16位的指令長度,捨棄了arm指令集的一些特性,相比之下從指令集上看thumb和arm主要有以下不同:

l 跳轉指令。條件跳轉在範圍上有更多的限制,轉向子程式只具有無條件轉移。

l 資料處理指令。對通用暫存器進行操作,操作結果需放入其中乙個運算元暫存器,而不是第三個暫存器。

l 單暫存器載入和儲存指令。thumb狀態下,單暫存器載入和儲存指令只能訪問暫存器r0~r7。

l 批量暫存器載入和儲存指令。ldm和stm指令可以將任何範圍為r0~r7的暫存器子集載入或儲存,push和pop指令使用堆疊指標r13作為基址實現滿遞減堆疊,除r0~r7外,push指令還可以儲存鏈結暫存器r14,並且pop指令可以引導程式指令pc。

thumb指令集沒有包含進行異常處理時需要的一些指令,因此,在異常中斷時還是需要使用arm指令。這種限制決定了thumb指令不能單獨使用需要與arm指令配合使用。

2 thumb暫存器和arm暫存器的關係

1)、thumb 狀態暫存器集是arm 狀態暫存器集的子集

程式設計師可直接訪問8 個通用暫存器r0~r7、pc、堆疊指標sp、鏈結暫存器lr和cpsr。每個特權模式都有分組的sp、lr和spsr。

2)、thumb狀態暫存器與arm 狀態暫存器的關係

thumb狀態暫存器與arm狀態暫存器有如下關係:

l thumb狀態r0~r7與arm狀態r0~r7相同。

l thumb狀態cpsr和spsr與arm狀態cpsr和spsr 相同。

l thumb狀態sp對映到arm狀態r13。

l thumb狀態lr對映到arm狀態r14。

l thumb狀態pc對映到arm狀態pc(r15)。

3)、在thumb狀態中訪問高暫存器

在thumb狀態中高暫存器(暫存器r0~r7為低暫存器,暫存器r8~r15為高暫存器)不是標準暫存器集的一部分,組合語言程式設計師對它們的訪問受到限制,但可以將它們用於快速暫存。

可以使用mov指令的特殊變數將乙個值從低暫存器r0~r7轉移到高暫存器r8~r15,或者從高暫存器到低暫存器。cmp指令可用於比較高暫存器和低暫存器的值。add 指令可用於將高暫存器的值與低暫存器的值相加。

在編寫thumb指令時,先要使用偽指令code16宣告,編寫arm指令時,則可使用code32偽指令宣告。   

1、thumb指令集沒有協處理器指令、訊號量指令、以及訪問cpsr或spsr的指令,沒有乘加指令及64位乘法指令等,且指令的第二運算元受到限制;

2、大多數的thumb資料處理指令採用2位址格式;

3、除了跳轉指令b有條件執行功能之外,其他指令均為無條件執行,而且分支指令的跳轉範圍有更多限制;

4、資料處理指令是對通用暫存器進行操作,在大多數情況下,操作的結果放入其中乙個運算元暫存器中,而不是放入第3個暫存器中;訪問暫存器r8~r15受到一定的限制,除mov、add指令訪問r8~r15外,其他資料處理指令總是更新cpsr中alu狀態標誌,訪問暫存器r8~r15的thumb資料處理指令不能更新cpsr中的alu狀態指示。

5、thumb狀態下,單暫存器載入和儲存指令只能訪問暫存器r0~r7;

6、ldm、stm指令可以將任何範圍為r0~r7的暫存器子集載入或儲存;

7、push、pop指令使用棧暫存器r13作為基址堆疊操作。 

大多數arm資料處理指令採用的是3位址格式(除了64位乘法指令外)。

所有異常都會使微處理器返回到arm模式狀態,並在arm的程式設計模式中處理。由於arm微處理器字傳送位址必須可被4整除(即字對準),半字傳送位址必須可被2整除(即半字對準)。而thumb指令是2個位元組長,而不是4個位元組,所以,由thumb執行狀態進入異常時其自然偏移與arm不同。

16位thumb指令集是從32位arm指令集提取指令格式的,每條thumb指令有相同處理器模型所對應的32位arm指令。

只要遵循atpcs呼叫規則,thumb子程式和arm子程式就可以互相呼叫。

1 thumb指令集概述

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

thumb指令集是arm指令集的乙個子集,是針對**密度問題而提出的,它具有16位的**寬度。與等價的32位**相比較,thumb指令集在保留32位**優勢的同時,大大的節省了系統的儲存空間。thumb不是乙個完整的體系結構,不能指望處理器只執行thumb指令集而不支援arm指令集。

當處理器在執行arm程式段時,稱arm處理器處於arm工作狀態,當處理器在執行thumb程式段時,稱arm處理器處於thumb工作狀態(cpsr的t=0:arm,t=1:thumb)。thumb指令集並沒有改變arm體系底層的程式設計模型,只是在該模型上增加了一些限制條件,只要遵循一定的呼叫規則,thumb子程式和arm子程式就可以互相呼叫。

與arm指令集相比較,thumb指令集中的資料處理指令的運算元仍然是32位,指令位址也為32位,但thumb指令集為實現16位的指令長度,捨棄了arm指令集的一些特性,相比之下從指令集上看thumb和arm主要有以下不同:

l 跳轉指令。條件跳轉在範圍上有更多的限制,轉向子程式只具有無條件轉移。

l 資料處理指令。對通用暫存器進行操作,操作結果需放入其中乙個運算元暫存器,而不是第三個暫存器。

l 單暫存器載入和儲存指令。thumb狀態下,單暫存器載入和儲存指令只能訪問暫存器r0~r7。

l 批量暫存器載入和儲存指令。ldm和stm指令可以將任何範圍為r0~r7的暫存器子集載入或儲存,push和pop指令使用堆疊指標r13作為基址實現滿遞減堆疊,除r0~r7外,push指令還可以儲存鏈結暫存器r14,並且pop指令可以引導程式指令pc。

thumb指令集沒有包含進行異常處理時需要的一些指令,因此,在異常中斷時還是需要使用arm指令。這種限制決定了thumb指令不能單獨使用需要與arm指令配合使用。

2 thumb暫存器和arm暫存器的關係

1)、thumb 狀態暫存器集是arm 狀態暫存器集的子集

程式設計師可直接訪問8 個通用暫存器r0~r7、pc、堆疊指標sp、鏈結暫存器lr和cpsr。每個特權模式都有分組的sp、lr和spsr。

2)、thumb狀態暫存器與arm 狀態暫存器的關係

thumb狀態暫存器與arm狀態暫存器有如下關係:

l thumb狀態r0~r7與arm狀態r0~r7相同。

l thumb狀態cpsr和spsr與arm狀態cpsr和spsr 相同。

l thumb狀態sp對映到arm狀態r13。

l thumb狀態lr對映到arm狀態r14。

l thumb狀態pc對映到arm狀態pc(r15)。

3)、在thumb狀態中訪問高暫存器

在thumb狀態中高暫存器(暫存器r0~r7為低暫存器,暫存器r8~r15為高暫存器)不是標準暫存器集的一部分,組合語言程式設計師對它們的訪問受到限制,但可以將它們用於快速暫存。

可以使用mov指令的特殊變數將乙個值從低暫存器r0~r7轉移到高暫存器r8~r15,或者從高暫存器到低暫存器。cmp指令可用於比較高暫存器和低暫存器的值。add 指令可用於將高暫存器的值與低暫存器的值相加。

在編寫thumb指令時,先要使用偽指令code16宣告,編寫arm指令時,則可使用code32偽指令宣告。   

1、thumb指令集沒有協處理器指令、訊號量指令、以及訪問cpsr或spsr的指令,沒有乘加指令及64位乘法指令等,且指令的第二運算元受到限制;

2、大多數的thumb資料處理指令採用2位址格式;

3、除了跳轉指令b有條件執行功能之外,其他指令均為無條件執行,而且分支指令的跳轉範圍有更多限制;

4、資料處理指令是對通用暫存器進行操作,在大多數情況下,操作的結果放入其中乙個運算元暫存器中,而不是放入第3個暫存器中;訪問暫存器r8~r15受到一定的限制,除mov、add指令訪問r8~r15外,其他資料處理指令總是更新cpsr中alu狀態標誌,訪問暫存器r8~r15的thumb資料處理指令不能更新cpsr中的alu狀態指示。

5、thumb狀態下,單暫存器載入和儲存指令只能訪問暫存器r0~r7;

6、ldm、stm指令可以將任何範圍為r0~r7的暫存器子集載入或儲存;

7、push、pop指令使用棧暫存器r13作為基址堆疊操作。 

大多數arm資料處理指令採用的是3位址格式(除了64位乘法指令外)。

所有異常都會使微處理器返回到arm模式狀態,並在arm的程式設計模式中處理。由於arm微處理器字傳送位址必須可被4整除(即字對準),半字傳送位址必須可被2整除(即半字對準)。而thumb指令是2個位元組長,而不是4個位元組,所以,由thumb執行狀態進入異常時其自然偏移與arm不同。

16位thumb指令集是從32位arm指令集提取指令格式的,每條thumb指令有相同處理器模型所對應的32位arm指令。

只要遵循atpcs呼叫規則,thumb子程式和arm子程式就可以互相呼叫。

thumb指令和arm指令

參考 一 為什麼乙個晶元需要thumb和arm兩套指令集 許多複雜的功能在複雜指令集 cisc 處理器上執行只需要單一的一條指令,即可,雖然可能有點慢,在精簡指令集處理器上可能需要多條指令,所以在精簡指令集 risc cpu上為了減少額外的指令對記憶體的消耗,考慮引入thumb指令集到處理器。現在最...

ARM指令和THUMB指令的區別

arm處理器的工作狀態 在arm的體系結構中,可以工作在三種不同的狀態,一是arm狀態,二是thumb狀態及thumb 2狀態,三是除錯狀態。嵌入式系統開發與應用教程 第2版 上介紹說 有兩種狀態arm狀態和thumb狀態,當時初學甚為不解,現在一知半解時再看忽然想到了顯示中的例子 arm核就好比乙...

ARM指令和Thumb指令區別

thumb指令集 thumb 指令可以看做是arm指令壓縮形式的子集,是針對 密度 1 的問題而提出的,它具有16為的 密度。thumb不是乙個完整的體系結構,不能指望處理程式只執行thumb指令而不支援arm指令集。因此,thumb指令只需要支援通用功能,必要時,可借助完善的arm指令集,例如 所...