Thumb指令集之:Thumb數據處理指令
11.4Thumb數據處理指令
數據處理指令是指那些操作寄存器中數據的指令。Thumb指令集中的數據處理指令是ARM指令集數據處理指令的一個子集,其中包括MOV指令、算術指令、移位指令、邏輯指令、比較指令和乘法指令。表11.3列出了Thumb數據處理指令。
表11.3 Thumb狀態(tài)數據處理指令
助記符 | 說明 | 操作 |
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位立即數。 |
評論