2012-05-17 310 views
24

在「ARM11TechnicalRefManual」的節1-34「Thumb指令集」下它表示:什麼是ARM Thumb指令集?

「Thumb指令集是最常用的32位ARM instructions.Thumb指令的子集被16位長,並有一個相應的32位ARM指令,對處理器型號具有相同的效果。「

是否有人可以更多地解釋這個特別是第二句話,並說出處理器如何執行它?

回答

29

ARM處理器有2個指令集,傳統ARM集,其中所述指令都是32位長,並且更稠拇指集,其中最常見的指令是16位長(和一些是32位長)。開發人員可以選擇要運行的指令集,並且只有一組指令可以被激活(即,一旦處理器切換到Thumb模式,所有指令將被解碼爲使用Thumb而不是ARM)。

儘管它們是不同的指令集,它們共享類似的功能,並且可以使用相同的彙編語言來表示。例如,該指令

ADDS R0, R1, R2 

可被編譯到臂(E0910002/11100000 10010001 00000000 00000010)或Thumb(1888/00011000 10001000)。當然,它們執行相同的功能(添加r1和r2並將結果存儲到r0),即使它們具有不同的編碼。這是的含義Thumb指令長16位,並且具有相應的32位ARM指令,它對處理器型號具有相同的效果。

每*在Thumb編碼命令也有ARM相應的編碼,這是由「子集」句子的意思。


*:並不完全正確,沒有在ARM「IT」的指令,雖然ARM並不需要「IT」反正(它將被彙編忽略)。

+17

最初的Thumb指令集只包含16位指令。 Thumb2引入了混合16/32位指令。 Thumb(1)僅僅是ARM指令集的壓縮版本。 CPU將在指令獲取時啓用「解壓縮器」,最終CPU仍然處理ARM指令。對於ARM來說,這很可能是一種快速但優雅的破解,可以在對實際內核進行微小更改的情況下縮減代碼大小和ICache使用率。 Thumb2增加了很多新功能,如提到的「IT *」指令和一些32位指令。 –

+0

哪一個比其他更受歡迎?我們是否必須使用32位處理器的ARM指令和16位處理器的Thumb指令? – Rajesh

+0

@Rajesh AFAIK沒有「16位ARM處理器」。如果您的目標是armv7或以上,請使用Thumb。 – kennytm