Thumb指令集支持寄存器的裝載和存儲(chǔ),即LDR和STR指令。8和類型的Load/Store指令在Thumb指令集中可用。這些指令使用兩種尋址模式:寄存器偏移和立即數(shù)偏移。指令所能存取的數(shù)據(jù)包括字、半字和字節(jié),同時(shí)半字和字節(jié)可以為有符號(hào)數(shù)或無符號(hào)數(shù)。
Thumb中有兩個(gè)分支跳轉(zhuǎn)指令的變體,第一個(gè)變體與ARM版本指令相似,可條件執(zhí)行,跳轉(zhuǎn)被限制在有符號(hào)8位立即數(shù)所表示的范圍內(nèi),或者是±256B。第二個(gè)變體不可條件執(zhí)行(沒有條件碼部分),但擴(kuò)展了有效跳轉(zhuǎn)范圍,跳轉(zhuǎn)范圍為有符號(hào)11位立即數(shù)表示的范圍,即±2048B。
Thumb指令集把32位ARM指令集的一個(gè)子集編碼為一個(gè)16位的指令集。在16位外部數(shù)據(jù)總線寬度下,ARM處理器上使用Thumb指令的性能要比使用ARM指令的性能更好。
所有的Thumb指令都是16位的。它們都是ARM指令重新編碼得到的,所以繼承了ARM指令集的許多特點(diǎn)。
Thumb指令集的多寄存器Load/Store指令是ARM指令集的多寄存器Load/Store指令的簡化形式。同ARM指令一樣,Thumb多寄存器數(shù)據(jù)傳送指令可以用于過程調(diào)用與返回以及存儲(chǔ)器塊拷貝。但為了編碼的緊湊性,這兩種用法由分開的指令實(shí)現(xiàn),并且這些指令也只使用單一的尋址方式。在其他方面,這些指令的性質(zhì)與等價(jià)的ARM指令相同。
Thumb異常中斷產(chǎn)生指令與ARM指令集下的異常中斷指令十分相似。同ARM指令集相同,Thumb指令集中同樣包含兩條異常中斷產(chǎn)生指令:軟件中斷指令SWI用于產(chǎn)生SWI異常中斷;斷點(diǎn)中斷指令BKPT主要用于產(chǎn)生軟件斷點(diǎn),供調(diào)試程序使用(只在ARMv5及以上版本中使用)。
Thumb指令集中存在未定義的指令空間,如圖11.65所示。
對(duì)3級(jí)流水線的ARM處理器來說,做相對(duì)較小的改動(dòng)就可以實(shí)現(xiàn)Thumb指令集(5級(jí)流水線的實(shí)現(xiàn)要復(fù)雜些)。為實(shí)現(xiàn)Thumb指令集,在指令流水線中增加了Thumb指令解碼邏輯,該解碼邏輯將預(yù)取的Thumb指令轉(zhuǎn)換成等價(jià)的ARM指令。圖11.66顯示了Thumb指令的擴(kuò)展邏輯組織。
Thumb以其較高的代碼密度和在窄存儲(chǔ)器上的性能,使得它在很多系統(tǒng)中得到廣泛應(yīng)用。但在很多情況下,還是不得不使用ARM指令,這是因?yàn)椋?/p>