助 记 符 | 说 明 | 操 作 |
ADC Rd,Rm | 带进位的32位加 | Rd:=Rd+Rm+C flag |
ADD Rd,Rn,Rm | 32位加 | Rd:=Rn+Rm |
ADD Rd,Rn,#0~#7 | 32位加 | Rd:=Rn+3_bit_immed |
ADD Rd,#0~#277 | 32位加 | Rd:=Rn+8_bit_immed |
AND Rd,Rm | 逻辑与 | Rd:=Rd AND Rm |
ASR Rd,Rm,#1~#32 | 算术右移 | Rd:=Rm ASR 5_bit_immed |
ASR Rd,Rs | 算术右移 | Rd:=Rm ASR Rs |
BIC Rd,Rm | 位清零 | Rd:=Rd AND NOT Rm |
CMN Rn,Rm | 32位取负比较 | Rn+Rm 并设置标志位 |
CMP Rn,#0~#255 | 32位整数比较 | Rn-8_bit_immed 并设置标志位 |
CMP Rn,Rm | 32位整数比较 | Rn-Rm 并设置标志位 |
EOR Rd,Rm | 异或 | Rd:=Rd EOR Rm |
LSL Rd,Rm,#0~#31 | 逻辑左移 | Rd:=Rm LSL 5_bit_immed |
LSL Rd,Rs | 逻辑左移 | Rd:=Rd LSL Rs |
LSR Rd,Rm,#1~#32 | 逻辑右移 | Rd:=Rm LSR 5_bit_immed |
LSR Rd,Rs | 逻辑右移 | Rd:=Rd LSR Rs |
MOV Rd,#0~#255 | 将数据送入寄存器 | Rd:=8_bit_immed |
MOV Rd,Rn | 将数据送入寄存器 | Rd:=Rn |
MUL Rd,Rm | 乘 | Rd:=Rm*Rd |
MVN Rd,Rm | 将32位数的“反”送入寄存器 | Rd:=NOT Rm |
NEG Rd,Rm | 求反 | Rd:=0-Rm |
ORR Rd,Rm | 逻辑或 | Rd:=Rd OR Rm |
ROR Rd,Rs | 逻辑右移 | Rd:=Rd ROR Rs |
SBC Rd,Rm | 带进位减 | Rd:=Rd-Rm-NOT(Carry Flag) |
SUB Rd,Rn,Rm | 减 | Rd:=Rn-Rm |
SUB Rd,Rn,#0~#7 | 减 | Rd:=Rn-3_bit_immed |
SUB Rd,#0~#255 | 减 | Rd:=Rn-8_bit_immed |
TST Rn,Rm | 位测试指令 | Rn AND Rm 并更新标志位 |
| 注意 | 上面的指令和语法格式中,3_bit_immed、7_bit_immed、8_bit_immed分别表示3位、7位、8位立即数。 |
| 注意 | 该指令与ADD(3)的区别在于其操作数寄存器。该指令的操作数寄存器为r8~r14和PC高寄存器。操作结果对程序状态字的标志位没有影响。 |
| 注意 | 在ARMv5以前的体系结构版本中,没有单独的Thumb移位指令。在ARMv6版本中已经增加了位移指令,详细信息请参加ARM体系结构相关文档。 |
| 注意 | 指令操作数寄存器<Rn>和<Rm>中,至少有一个寄存器为r8~r14或PC寄存器的高16位,否则,指令的执行结果不可预知。 |
| 注意 | 从指令的编码形式可以看出,MOV(2)指令被作为ADD Rd,Rn,#0指令来编译。 |
| 注意 | 如果目的寄存器<Rd>和源寄存器<Rm>同时为r0~r7低寄存器,则指令的执行结果不可预知。 |
| 注意 | 如果乘法指令MUL的源和目的寄存器使用相同的寄存器,则指令的执行结果不可预知;对于有符号数和无符号数,指令的操作结果是一样的。 |
| 注意 | 在Thumb指令集中,使用满递减堆栈,该指令常被用于元素的入栈操作。 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |