參考
一、為什麼乙個晶元需要thumb和arm兩套指令集
許多複雜的功能在複雜指令集(cisc)處理器上執行只需要單一的一條指令,即可,雖然可能有點慢,在精簡指令集處理器上可能需要多條指令,所以在精簡指令集(risc)cpu上為了減少額外的指令對記憶體的消耗,考慮引入thumb指令集到處理器。
現在最受歡迎的32位微處理器許多都使用risc技術,不像cisc處理器,risc引擎每乙個時鐘週期(個人感覺應該是指令週期),都能執行一條指令,而cisc每條指令執行消耗的時鐘週期是不一樣的。
精簡指令集的優勢是設計簡單,每條指令執行消耗時鐘週期固定,劣勢是碰上覆雜的功能需要多條指令才能實現複雜指令及一條指令所能完成的功能,所以儲存指令需要消耗額外的記憶體空間;
複雜指令集的優勢是指令豐富,有些精簡指令集需要很多條指令完成的功能,複雜指令集只需要一條指令,雖然可能有點慢,但是節約記憶體空間,劣勢是,晶元設計複雜,有些複雜指令使用頻率很低,每條指令執行消耗的時鐘週期都不同。
所以精簡指令集的arm架構引入thumb指令減少儲存指令對記憶體的消耗,在嵌入式領域記憶體空間是更為緊急的資源。
二、arm指令集和thumb指令集的區別
thumb指令集由16位指令組成,它們作為標準arm的32位指令子集的簡寫,每條thumb指令都可以通過等效的32位arm指令來執行。然而,並不是所有的arm指令都在thumb子集中可用;例如,thumb指令無法訪問狀態或協處理器暫存器。此外,一些可以在arm指令中完成的功能只能通過thumb指令序列來模擬。
實際上arm只包含一種指令集那就是32-bit的arm指令集。當處理器執行在thumb狀態時,處理器把從記憶體中讀取的thumb指令擴充套件成與它等價的32-bit的arm指令,然後執行。
thumb指令和與它等價的arm指令的不同,並不是功能上的不同,而是在指令執行前的取指(fetch)和解碼(interpret)的不同。由於將16-bit的指令擴充套件成32-bit的指令是通過晶元上專門的硬體完成的,所以這一過程並不會影響整個執行的速率,反而更狹小的16-bit的thumb指令在記憶體的利用上更有優勢。
thumb指令集提供了典型應用程式所需的大部分功能。算術和邏輯操作,載入/儲存資料移動,以及條件和無條件的分支跳轉。任何用c編寫的**都可以在thumb狀態下成功執行。但是,裝置驅動程式和異常處理程式通常必須至少部分在arm狀態下編寫。
暫存器組的區別
在arm狀態的使用者模式下,17個暫存器是可見的;thumb狀態下12個暫存器可見,並且它們是在物理上和arm狀態下完全相同的暫存器。所以在軟體執行在arm狀態和thumb狀態時,可以通過r0-r7來傳遞資料,這在實際的應用中非常常用。
最大的暫存器不同點是sp暫存器。在thumb狀態下,有專門的助記符push和pop來操作sp暫存器,但是這兩個助記符在arm狀態下是不存在的,它們假設以r13為堆疊指標,並將助記符轉換成arm狀態下的load和store指令。
cpsr暫存器儲存處理器模式(使用者或異常標誌)、中斷掩碼位、條件**和thumb狀態位。thumb狀態位(t)表示處理器的當前狀態:0表示arm狀態(預設),1表示thumb狀態。雖然cpsr中的其他位可能在軟體中被修改,但直接寫入t是危險的;不適當的狀態改變的結果是不可**的。
三、arm狀態和thumb狀態的轉換
有幾種方法可以正確地進入或離開thumb狀態。常用的方法是通過bx(branch and exchange, bx)指令。如果您使用的是版本5架構的arm,blx( branch, link, and exchange)指令也可以切換。在分支跳轉時,cpu檢查目標位址的最小有效位(lsb)以確定新的狀態。因為所有的arm指令都會在32位或16位邊界上對齊,所以位址的lsb在分支跳轉中並沒有使用,所以可以用目標位址的最低位來決定是否切換到arm狀態或者thumb狀態。如果在arm狀態下執行bx指令或者blx指令跳轉時,目標位址的最低bit為1,則先切換處理器到thumb狀態,然後執行目標位址處的**;如果在thumb狀態下執行bx或者blx指令跳轉時,目標位址最低bit為0,則先切換到arm狀態,再執行目標位址處的**。
另外一種方法是,當異常出現時,處理器會自動以arm狀態開始執行中斷向量表指定位址處的**,當然如果需要的話,在異常處理的過程用也可以通過分支跳轉來切換到thumb狀態。
異常返回時,會根據spsr暫存器中儲存的t狀態,來決定返回到thumb狀態還是arm狀態。
ARM指令與thumb 指令
1 thumb指令集概述 為相容資料匯流排寬度為16位的應用系統,arm體系結構除了支援執行效率很高的32位arm指令集以外,同時支援16位的thumb指令集。thumb指令集是arm指令集的乙個子集,是針對 密度問題而提出的,它具有16位的 寬度。與等價的32位 相比較,thumb指令集在保留32...
ARM指令和THUMB指令的區別
arm處理器的工作狀態 在arm的體系結構中,可以工作在三種不同的狀態,一是arm狀態,二是thumb狀態及thumb 2狀態,三是除錯狀態。嵌入式系統開發與應用教程 第2版 上介紹說 有兩種狀態arm狀態和thumb狀態,當時初學甚為不解,現在一知半解時再看忽然想到了顯示中的例子 arm核就好比乙...
ARM指令和Thumb指令區別
thumb指令集 thumb 指令可以看做是arm指令壓縮形式的子集,是針對 密度 1 的問題而提出的,它具有16為的 密度。thumb不是乙個完整的體系結構,不能指望處理程式只執行thumb指令而不支援arm指令集。因此,thumb指令只需要支援通用功能,必要時,可借助完善的arm指令集,例如 所...