不区分大小写
数据搬移指令:
MOV R1,#1 @R1=1
MOV PC,#0 @回到了第一条指令
MOV PC,#7 @将7变成4的整数倍
MOV R2,R1 @R2 = R1
MVN R0,#0xFF @R0 = ~0xFF ==0xFFFFFF00
立即数:包含在指令当中的数,属于指令的一部分
优点:取址的时候就可以将其读到CPU,不用单独去内存读取,速度快
缺点:不能是任意的32位的数字,有局限性
MOV R0,#12345678 @数据太大了
MOV R0,#12 @是立即数
伪指令:
MOV R0,#0xFFFFFFFF == MVN R0,#0x00000000
数据运算指令的格式:
操作码 目标寄存器 第一操作寄存器 第二操作数
操作码:表示执行哪种操作
目标寄存器:用于存储运算的结果
第一操作寄存器:存储第一个参与运算的数据(只能寄存器)
第二操作数:第二个参与运算的数据(可以是寄存器也可以是立即数)
加法指令:
ADD R1,R2,R3 @R1=R2+R3
ADD R1,R2,#3 @R1=R2+3
减法指令:
SUB R1,R2,R3 @R1=R2-R3
SUB R1,R2,#3 @R1=R2-3
逆向减法指令:
RSB R1,R2,#3 @R1=3-R2
乘法指令:(不能使用立即数)
MUL R1,R2,R3 @R1=R2*R3
按位与指令:
AND R1,R2,R3 @R1=R2&R3
按位或指令:
ORR R1,R2,R3 @R1=R2 | R3
按位异或指令:
EOR R1,R2,R3 @R1=R2^R3
左移指令:
LSL R1,R2,R3 R1=R2<
LSR R1,R2,R3 R1=R2>>R3
位清零指令:
(第二操作数中的哪一位为1,就将第一操作寄存器中哪一位清零,然后将结果放到目标寄存器)
BIC R1,R2,#0xF(R2本身不变)
数据运算指令的格式扩展:
MOV R1,R2,LSL #1 @R1=(R2<<1)
数据运算指令对条件位(N、Z、C、V)的影响
(默认情况下数据运算不会对条件位产生影响,当在指令后加后缀’s’后可以影响)
MOV R1,#3
SUB R2,R1,#5
两个64位的数据做加法运算:(会出现进借位问题)
第一个数的低32放在R1
第一个数的高32放在R2
第二个数的低32放在R3
第二个数的高32放在R4
运算结果的低32放在R5
运算结果的高32放在R6
带进位的加法指令
ADDS R5,R1,R3
ADC R6,R2,R4 @R6=R2+R4+’C’
带借位的减法指令
SUBS R5,51,53
SBC R6,R2,R4 @R6=R2-R4-‘!C’
ADD不关心之前是否有进位,也不关心加了后是否有进位
ADDS不关心之前是否有进位,但关心加了后是否有进位
ADC只关心之前是否有进位,不关心加了后是否有进位
ADCS关心之前是否有进位,关心加了后是否有进位
**