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位立即数。 |
评论