ARM数据处理指令

文章目录

    • ARM数据处理指令(一)
      • 1.数据传送指令
      • 2.算术逻辑运算指令
      • 3.比较指令

ARM数据处理指令(一)

1.数据传送指令

MOV 数据传送指令.
将8 位图立即数或寄存器(operant2)传送到目标寄存器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 ,子程序返回

MVN 数据非传送指令.
将8 位图立即数或寄存器(operand2)按位取反后传送到目标寄存器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数.指令格式如下:
MVN{cond}{S} Rd,operand2
MVN 指令举例如下:
MVN R1,#0xFF ;R1=0xFFFFFF00
MVN R1,R2 ;将R2 取反,结果存到R1

2.算术逻辑运算指令

指令 描述 举例
ADD
加法运算指令
将operand2 数据与Rn
的值相加,结果保存到Rd 寄存器.
ADD{cond}{S} Rd,Rn,operand2
ADDS R1,R1,#1 ;R1=R1+1
ADD R1,R1,R2 ;R1=R1+R2
ADDS R3,R1,R2,LSL #2 ;R3=R1+R2<<2
SUB
减法运算指令
用寄存器Rn 减去operand2.结果保存到Rd 中
SUB{cond}{S} Rd,Rn,operand2
SUBS R0,R0,#1 ;R0=R0-1
SUBS R2,R1,R2 ;R2=R1-R2
SUB R6,R7,#0x10 ;R6=R7-0x10
RSB
逆向减法指令
用operand2 减法Rn,结果保存到Rd 中
RSB{cond}{S} Rd,Rn,operand2
RSB R3,R1,#0xFF00 ;R3=0xFF00-R1
RSBS R1,R2,R2,LSL #2 ;R1=R2<<2-R2=R2×3
RSB R0,R1,#0 ;R0=-R1
ADC
带进位加法指令
将operand2 的数据与Rn 的值相加,再加上CPSR 中的C 条件标志位.结果保存到Rd 寄存器
ADC{cond}{S} Rd,Rn,operand2
ADDS R0,R0,R2
ADC R1,R1,R3 ;
使用ADC 实现64 位加法,
(R1、R0)=(R1、R0)+(R3、R2)
SBC
带进位减法指令
用寄存器Rn 减去operand2,再减去CPSR 中的C 条件标志位的
非(即若C 标志清零,则结果减去1),结果保存到Rd 中
SCB{cond}{S}Rd,Rn,operand2
SUBS R0,R0,R2
SBC R1,R1,R3 ;
使用SBC 实现64 位减法,(R1,R0)-(R3,R2)
RSC
带进位逆向减法指令
用寄存器operand2 减去Rn,再减去CPSR 中的C 条件标志位,结果保存到R中.
RSC{cond}{S} Rd,Rn,operand2
RSBS R2,R0,#0
RSC R3,R1,#0 ;使用RSC 指令实现求64 位数值的负数,(R3,R2) = (-R1 - C,-R0)
AND
逻辑与操作指令
将operand2 值与寄存器Rn 的值按位作逻辑与操作,结果保存到Rd 中.
AND{cond}{S} Rd,Rn,operand2
ANDS R0,R0,#x01 ;R0=R0&0x01,取出最低位数据
AND R2,R1,R3 ;R2=R1&R3
ORR
逻辑或操作指令
将operand2 的值与寄存器Rn 的值按位作逻辑或操作,结果保存到Rd 中
ORR{cond}{S} Rd,Rn,operand2
ORR R0,R0,#x0F ;将R0 的低4 位置1
EOR
逻辑异或操作指令
将operand2 的值与寄存器Rn 的值按位作逻辑异或操作,结果保存到Rd 中.
EOR{cond}{S}Rd,Rn,operand2
EOR R1,R1,#0x0F ;将R1 的低4 位取反
EOR R2,R1,R0 ;R2=R1^R0
EORS R0,R5,#0x01 ;将R5 和0x01 进行逻辑异或,结果保存到R0,并影响标志位
BIC
位清除指令
将寄存器Rn 的值与operand2 的值的反码按位作逻辑与操作,结果保存到Rd 中
BIC{cond}{S}Rd,Rn,operand2
BIC R1,R1,#0x0F ;将R1 的低4 位清零,其它位不变
BIC R1,R2,R3 ;将拭的反码和R2 相逻辑与,结果保存到R1

3.比较指令

指令 描述 举例
CMP
比较指令
指令使用寄存器Rn 的值减去operand2 的值,根据操作的结果理新CPSR
中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行
CMP{cond} Rn,operand2
CMP R1,#10 ;R1 与10 比较,设置相关标志位
CMP R1,R2 ;R1 与R2 比较,设置相关标志位
CMN
负数比较指令
指令使用寄存器Rn 与值加上operand2 的值,根据操作的结果理新CPSR 中的相应条件标志位
CMN{cond} Rn,operand2
CMN R0,#1 ;R0+1,判断R0 是否为1 的补码,若是Z 置位
TST
位测试指令
指令将寄存器Rn 的值与operand2 的值按位作逻辑与操作,根据操作的结果理新CPSR 中相应的条件标志位
TST{cond} Rn,operand2
TST R0,#0x01 ;判断R0 的最低位是否为0
TST R1,#0x0F ;判断R1 的低4 位是否为0
TEQ
相等测试指令
指令寄存器Rn 的值与operand2 的值按位作逻辑异或操作,根据操作的结果理新CPSR 中相应条件标志位
TEQ{cond} Rn,operand2
TEQ R0,R1 ;比较R0 与R1 是否相等(不影响V 位和C 位)

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