汇编(二)——ARM数据处理指令——算术运算、数据传送

ARM指令集

数据操作

ARM指令的种类

  1. 数据处理指令
  2. 程序状态寄存器与通用寄存器之间的传送指令
  3. Load/Store指令
  4. 转移指令
  5. 异常中断指令
  6. 协处理器指令

数据处理指令分为6类

  1. 数据传送指令
  2. 算术运算指令
  3. 逻辑运算指令
  4. 比较指令
  5. 测试指令
  6. 乘法指令

数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。

所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。

ARM数据处理指令——数据传送

助记符 说明 操作 条件码位置
MOV Rd, operand2 数据传送 Rd<-operand2 MOV {cond} {S}
MVN Rd, operand2 数据非传送 Rd<-(~operand2) MVN {cond} {S}

MOV指令将8位图立即数或寄存器传送到目标寄存器(Rd),可用于移位运算等操作,指令格式如下:

MOV {cond} {S} Rd,operand2

MOV指令举例如下:

MOV R1,#0x10		;R1=0x10

MOV R0,R1		;R0=R1

MOVS R3,R1,LSL #2	;R3=R1<<2,并影响标志位

MOV PC,LR		;PC=LR,子程序返回

opcode操作码功能表

操作码 指令助记符 说明
0000 AND 逻辑与操作指令
0001 EOR 逻辑异或操作指令
0010 SUB 减法运算指令
0011 RSB 逆向减法指令
0100 ADD 加法运算指令
0101 ADC 带进位加法指令
0110 SBC 带进位减法指令
0111 RSC 带进位逆向减法指令
1000 TST 位测试指令
1001 TEQ 相等测试指令
1010 CMP 比较指令
1011 CMN 负数比较指令
1100 ORR 逻辑或操作指令
1101 MOV 数据传输
1110 BIC 位清除指令
1111 MVN 数据非传送

ARM数据处理指令——算术运算

助记符 说明 操作 条件码位置
ADD Rd, Rn, operand2 加法运算指令 Rd<-Rn+operand2 ADD{cond} {S}
SUB Rd, Rn, operand2 减法运算指令 Rd<-Rn-operand2 SUB{cond} {S}
RSB Rd, Rn, operand2 逆向减法指令 Rd<-operand2-Rn RSB{cond} {S}
ACC Rd, Rn, operand2 带进位加法 Rd<-Rn+operand2+Carry ACC{cond} {S}
SBC Rd, Rn, operand2 带进位减法指令 Rd<-Rn-operand2-(NOT)Carry SBC {cond} {S}
RSC Rd, Rn, operand2 带进位逆向减法指令 Rd<-operand2-Rn-(NOT)Carry RSC {cond} {S}

带进位加法指令——ADC将operand2的值与Rn的值相加,再如上CPSR中的C条件标志位,结果保存到Rd寄存器。

指令格式如下:

ADC{cond}{S} Rd,Rn,operand2

应用示例(使用ADC实现64位加法,结果存于R1,R0中)

ADDS R0,R0,R2	;R0等于低32位相加,并影响标志位
ADC  R1,R1,R3	;R1等于高32位相加,并加上低位进位

你可能感兴趣的:(ARM汇编,linux)