Thumb指令集之:Thumb数据处理指令
11.4Thumb数据处理指令
数据处理指令是指那些操作寄存器中数据的指令。Thumb指令集中的数据处理指令是ARM指令集数据处理指令的一个子集,其中包括MOV指令、算术指令、移位指令、逻辑指令、比较指令和乘法指令。表11.3列出了Thumb数据处理指令。
表11.3 Thumb状态数据处理指令
助记符 | 说明 | 操作 |
ADCRd,Rm | 带进位的32位加 | Rd:=Rd+Rm+Cflag |
ADDRd,Rn,Rm | 32位加 | Rd:=Rn+Rm |
ADDRd,Rn,#0~#7 | 32位加 | Rd:=Rn+3_bit_immed |
ADDRd,#0~#277 | 32位加 | Rd:=Rn+8_bit_immed |
ANDRd,Rm | 逻辑与 | Rd:=RdANDRm |
ASRRd,Rm,#1~#32 | 算术右移 | Rd:=RmASR5_bit_immed |
ASRRd,Rs | 算术右移 | Rd:=RmASRRs |
BICRd,Rm | 位清零 | Rd:=RdANDNOTRm |
CMNRn,Rm | 32位取负比较 | Rn+Rm并设置标志位 |
CMPRn,#0~#255 | 32位整数比较 | Rn-8_bit_immed并设置标志位 |
CMPRn,Rm | 32位整数比较 | Rn-Rm并设置标志位 |
EORRd,Rm | 异或 | Rd:=RdEORRm |
LSLRd,Rm,#0~#31 | 逻辑左移 | Rd:=RmLSL5_bit_immed |
LSLRd,Rs | 逻辑左移 | Rd:=RdLSLRs |
LSRRd,Rm,#1~#32 | 逻辑右移 | Rd:=RmLSR5_bit_immed |
LSRRd,Rs | 逻辑右移 | Rd:=RdLSRRs |
MOVRd,#0~#255 | 将数据送入寄存器 | Rd:=8_bit_immed |
MOVRd,Rn | 将数据送入寄存器 | Rd:=Rn |
MULRd,Rm | 乘 | Rd:=Rm*Rd |
MVNRd,Rm | 将32位数的“反”送入寄存器 | Rd:=NOTRm |
NEGRd,Rm | 求反 | Rd:=0-Rm |
ORRRd,Rm | 逻辑或 | Rd:=RdORRm |
RORRd,Rs | 逻辑右移 | Rd:=RdRORRs |
SBCRd,Rm | 带进位减 | Rd:=Rd-Rm-NOT(CarryFlag) |
SUBRd,Rn,Rm | 减 | Rd:=Rn-Rm |
SUBRd,Rn,#0~#7 | 减 | Rd:=Rn-3_bit_immed |
SUBRd,#0~#255 | 减 | Rd:=Rn-8_bit_immed |
TSTRn,Rm | 位测试指令 | RnANDRm并更新标志位 |
Thumb的数据处理指令与等价的ARM指令使用相同的格式。所有对r0~r7低8个寄存器操作的数据处理指令都更新条件标志位,对r8~r14和PC高8个寄存器操作的指令除MOV指令外,其他指令均不改变条件标志位。这些指令包括:
·MOVRd,Rn
·ADDRd,Rm
·CMPRn,Rm
·ADDsp,#0~#508
·SUBsp,#0~#508
·ADDRd,sp,#0~#1020
·ADDRd,pc,#0~#1020
Thumb数据处理指令的基本语法格式分为以下8种。
①opcode1>Rd>,Rn>,Rm>
opcode1>:=ADD|SUB
②opcode2>Rd>,Rn>,#3_bit_immed>
opcode2>:=ADD|SUB
③opcode3>Rd>|Rn>,#8_bit_immed>
opcode3>:=ADD|SUB|MOV|CMP
④opcode4>Rd>,Rm>,#shift_immed>
opcode4>:=LSL|LSR|ASR
⑤opcode5>Rd>|Rn>,Rm>|Rs>
opcode5>:=MVN|CMP|CMN|TST|ADC|SBC|NEG|MUL|LSL|LSR|ASR|ROR|AND|EOR|BIC
⑥ADDRd>,reg>,#8_bit_immed>
reg>:=SP|PC
⑦opcode6>SP,SP,#7_bit_immed>
opcode6>:=ADD|SUB
⑧opcode7>Rd>|Rn>,Rm>
opcode7>:=MOV|ADD|CMP
注意 | 上面的指令和语法格式中,3_bit_immed、7_bit_immed、8_bit_immed分别表示3位、7位、8位立即数。 |
评论