mov mvn
mov r1, r0 @两个寄存器之间数据传递MVN R1,R2 ;把R2的值取反传给R1
ADD R0, R1, R2 ;R0 = R1 + R2
ADD R0, R1, #256 ;R0 = R1 + 256
ADD R0, R2, R3, LSL #1 ;R0 = R2 + (R3 << 1)
SUB R0, R1, R2 ;R0 = R1 - R2
SUB R0, R1, #256 ;R0 = R1 - 256
SUB R0, R2, R3, LSL #1 ;R0 = R2 - (R3 << 1)
RSB{条件}{S} 目的寄存器,操作数1,操作数2
RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,
或一个立即数。该指令可用于有符号数或无符号数的减法运算。
RSC{条件}{S} 目的寄存器,操作数1,操作数2
RSC指令用于把 操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。
该指令可用于有符号数或 无符号数的减法运算
AND{条件}{S} 目的寄存器,操作数1,操作数2
AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令常用于屏蔽操作数1的某些位。
and r0,r0,#3 @保持R0的0,1位,其他位清零
ORR{条件}{S} 目的寄存器,操作数1,操作数2
ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令常用于设置操作数1的某些位
orr r0,r0,#3 @将R0的0,1位置1,其他位保持不变
EOR{条件}{S} 目的寄存器,操作数1,操作数2
EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令常用于反转操作数1的某些位
EOR R0,R0,#3 @该指令反转R0的0、1位,其余位保持不变
BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变
BIC R0,R0,#%1011 @该指令清除 R0 中的位 0 1 3,其余的位保持; %表示是二进制,0x表示十六进制
CMP指令(比较):
CMP{条件} 操作数1, 操作数2
CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。
该指令进行一次减法(cmp r0, r1 等价于 sub r2, r0, r1 (r2 = r0 - r1))运算,但不存储结果,只更改条件标志位。
标志位表示的是操作数1与操作数2的关系(大、小、相等),例如,当操作数1大于操作数2,则此后的有GT后缀的指令将可以执行。
CMN{条件} 操作数1,操作数2
CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,
同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加(cmn r0, r1 等价于 add r0, r1 测试两个数是不是相反数),并根据结果更改条件标志位
tst r0, #0xf @测试r0的bit0~bit3是否全为0
TEQ{条件} 操作数1,操作数2
TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算
并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2 是否相等mvl mla umull umlal smull smlal
https://blog.csdn.net/life_hello/article/details/79993051
https://www.cnblogs.com/bingghost/p/5839022.html