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