
Thumb指令集分为:分支指令、数据传送指令、单寄存器加载和存储指令以及多寄存器加载和存储指令。Thumb指令集没有协处理器指令、信号量(semaphore)指令以及访问CPSR或SPSR的指令。
1. 存储器访问指令
(1)DR和STR--立即数偏移
加载寄存器和存储寄存器。存储器的地址以一个寄存器的立即数偏移(immediate offset)指明。
指令格式:
op Rd, [Rn,#immed_5×4]
opH Rd, [Rn,#immed_5×2]
opB Rd, [Rn,#immed_5×1]
其中:
op:为DR或STR。
H:指明无符号半字传送的参数。
B:指明无符号字节传送的参数。
Rd:加载和存储寄存器。Rd 必须在R0~R7范围内。
Rn:基址寄存器。Rn 必须在R0~R7范围内。
immed_5×N:偏移量。它是一个表达式,其取值(在汇编时)是N的倍数,在(0~31)*N范围内,N=4、2、1。
STR:用于存储一个字、半字或字节到存储器中。
DR:用于从存储器加载一个字、半字或字节。
Rn:Rn中的基址加上偏移形成操作数的地址。
立即数偏移的半字和字节加载是无符号的。数据加载到Rd的最低有效字或字节,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字节字。
STR:存储寄存器,4字节字。
DRH:加载寄存器,2字节无符号半字。
DRSH:加载寄存器,2字节带符号半字。
STRH:存储寄存器,2字节半字。
DRB:加载寄存器,无符号字节。
DRSB:加载寄存器,带符号字节。
STRB:存储寄存器,字节。