Thumb指令集分為:分支指令、數(shù)據(jù)傳送指令、單寄存器加載和存儲(chǔ)指令以及多寄存器加載和存儲(chǔ)指令。Thumb指令集沒(méi)有協(xié)處理器指令、信號(hào)量(semaphore)指令以及訪問(wèn)CPSR或SPSR的指令。
1. 存儲(chǔ)器訪問(wèn)指令
。1)DR和STR--立即數(shù)偏移
加載寄存器和存儲(chǔ)寄存器。存儲(chǔ)器的地址以一個(gè)寄存器的立即數(shù)偏移(immediate offset)指明。
指令格式:
op Rd, [Rn,#immed_5×4]
opH Rd, [Rn,#immed_5×2]
opB Rd, [Rn,#immed_5×1]
其中:
op:為DR或STR。
H:指明無(wú)符號(hào)半字傳送的參數(shù)。
B:指明無(wú)符號(hào)字節(jié)傳送的參數(shù)。
Rd:加載和存儲(chǔ)寄存器。Rd 必須在R0~R7范圍內(nèi)。
Rn:基址寄存器。Rn 必須在R0~R7范圍內(nèi)。
immed_5×N:偏移量。它是一個(gè)表達(dá)式,其取值(在匯編時(shí))是N的倍數(shù),在(0~31)*N范圍內(nèi),N=4、2、1。
STR:用于存儲(chǔ)一個(gè)字、半字或字節(jié)到存儲(chǔ)器中。
DR:用于從存儲(chǔ)器加載一個(gè)字、半字或字節(jié)。
Rn:Rn中的基址加上偏移形成操作數(shù)的地址。
立即數(shù)偏移的半字和字節(jié)加載是無(wú)符號(hào)的。數(shù)據(jù)加載到Rd的最低有效字或字節(jié),Rd 的其余位補(bǔ)0。
字傳送的地址必須可被4整除,半字傳送的地址必須可被2整除。
指令示例:
DR R3,[R5,#0]
STRB R0,[R3,#31]
STRH R7,[R3,#16]
DRB R2,[R4,#1abe-{PC}]
。2)DR和STR--寄存器偏移
加載寄存器和存儲(chǔ)寄存器。用一個(gè)寄存器的基于寄存器偏移指明存儲(chǔ)器地址。
指令格式:
op Rd,[Rn,Rm]
其中,op 是下列情況之一:
DR:加載寄存器,4字節(jié)字。
STR:存儲(chǔ)寄存器,4字節(jié)字。
DRH:加載寄存器,2字節(jié)無(wú)符號(hào)半字。
DRSH:加載寄存器,2字節(jié)帶符號(hào)半字。
STRH:存儲(chǔ)寄存器,2字節(jié)半字。
DRB:加載寄存器,無(wú)符號(hào)字節(jié)。
DRSB:加載寄存器,帶符號(hào)字節(jié)。
STRB:存儲(chǔ)寄存器,字節(jié)。