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