Thumb
ARM體系結構的指令集
徠Thumb是ARM體系結構中一種16位的指令集。Thumb指令集可以看作是ARM指令壓縮形式的子集,它是為減小代碼量而提出,具有16bit的代碼密度。Thumb指令體系並不完整,只支持通用功能,必要時仍需要使用ARM指令,如進入異常時。其指令的格式與使用方式與ARM指令集類似,而且使用並不頻繁,Thumb指令集作一般了解。
從ARMv4T之後的ARM處理器有一種16-bit指令模式,叫做Thumb,也許跟每個條件式執行指令均耗用4位元的情形有關。
在Thumb模式下,較小的指令碼有更少的功能性。例如,只有分支可以是條件式的,且許多指令碼無法存取所有CPU的暫存器。然而,較短的指令碼提供整體更佳的編碼密度,即使有些運算需要更多的指令。特別在內存埠或匯流排寬度限制在32以下的情形時,更短的Thumb 指令碼能更有效地使用有限的內存帶寬,因而提供比32位元程式碼更佳的效能。典型的嵌入式硬體僅具有較小的32-bit datapath定址範圍以及其他更窄的16 bits定址。
Thumb指令在分支指令中一部分可以在ARM指令集之間切換,Thumb的數據處理指令都能映射到相應的
ARM數據處理指令中。但是單寄存器和多寄存器的載入和存儲指令是不能相互交換的。
最早應用Thumb 技術的處理器是 ARM7TDMI系列的內核。所有 ARM9 和後來的家族,包括 XScale 都納入了 Thumb 技術。
在編寫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作為基址堆棧操作。
1.分支指令:跳轉的範圍小,除B指令外,都是無條件跳轉.
2.數據處理指令:Thumb指令只有2個操作數,而ARM指令是3個操作數.
3.單寄存器載入存儲指令:Thumb指令只能訪問R0~R7.
4.多寄存器載入存儲指令:Thumb指令只能訪問R0~R7的子集.
5.Thumb特有指令:PUSH和POP作用於R13.
在Thumb平台上每提出一個問題就會平均收到50-100個回復,這些回復可能是問題的答案,也可能是用戶對此的評論等等。如此一來,Thumb會逐漸累積各種類型問題的回復。