数据传送指令 |
|
MOV |
MOV R1,#0x6 ;R1=0x6 MOV R0,R1 ;R0=R1 MOV R3,R1,LSL #2 ;R3=R1<<2 MOV R3,R1,LSL R2 ;R3=R1<<R2 数据传送指令 |
MVN |
MVN R1,#0x6 ;R1=~0x6 MVN R0,R1 ;R0=~R1 MVN R3,R1,LSL #2 ;R3=~(R1<<2) MVN R3,R1,LSL R2 ;R3=~(R1<<R2) 数据求反传送指令 |
算术指令 |
|
ADD |
ADD R1,R1,#0x6 ;R1=R1 + 0x6 ADD R1,R1,R2 ;R1=R1 + R2 ADD R3,R1,R2,LSL #2 ;R3=R1 + R2<<2 ADD R3,R1,R2,LSL R6 ;R3=R1 + R2<<R6 加法指令 |
ADC |
ADC R1,R1,#0x6 ;R1=R1 + 0x6 + C ADC R1,R1,R2 ;R1=R1 + R2 + C ADC R3,R1,R2,LSL #2 ;R3=R1 + R2<<2 + C ADC R3,R1,R2,LSL R6 ;R3=R1 + R2<<R6 + C 带进位加法指令 注:因为是带进位的,所以还要加上CPSR中的C条件标志位的值 |
SUB |
SUB R1,R1,#0x6 ;R1=R1 - 0x6 SUB R1,R1,R2 ;R1=R1 - R2 SUB R3,R1,R2,LSL #2 ;R3=R1 - R2<<2 SUB R3,R1,R2,LSL R6 ;R3=R1 - R2<<R6 减法指令 |
SBC |
SBC R1,R1,#0x6 ;R1=R1 - 0x6 - !C SBC R1,R1,R2 ;R1=R1 - R2 - !C SBC R3,R1,R2,LSL #2 ;R3=R1 - R2<<2 - !C SBC R3,R1,R2,LSL R6 ;R3=R1 - R2<<R6 - !C 带借位的减法指令 注:因为是带借位的,所以还要再减去CPSR中的C条件标志位的反码 |
RSB |
RSB R1,R1,#0x6 ;R1=0x6 - R1 RSB R1,R1,R2 ;R1=R2 - R1 RSB R3,R1,R2,LSL #2 ;R3=R2<<2 – R1 RSB R3,R1,R2,LSL R6 ;R3=R2<<R6 – R1 逆向减法指令 |
RSC |
RSC R1,R1,#0x6 ;R1=0x6 – R1 - !C RSC R1,R1,R2 ;R1=R2 - R1 - !C RSC R3,R1,R2,LSL #2 ;R3=R2<<2 - R1 - !C RSC R3,R1,R2,LSL R6 ;R3=R2<<R6 - R1 - !C 带借位的逆向减法指令 注:因为是带借位的,所以还要再减去CPSR中的C条件标志位的反码 |
逻辑指令 |
ARM汇编语言
最新推荐文章于 2024-03-13 12:43:46 发布
ARM的条件码域
大部分ARM指令都可以条件执行,也就是根据CPSR中的条件标志位决定是否执行该指令。当条件满足时执行,当条件不满足时该指令被当做一条NOP指令。
(一)跳转指令
B 跳转指令
BL 保存返回地址的跳转指令
BX 带状态切换的跳转指令
BLX 保存返回地址和状态切换的跳转指令
B、BL和BLX(1)后面跟地址标号。BLX(1)为无条件执行指令
BX和BLX(2)后面跟寄存器
例:B Lable
BX R0
(二)数据处理指令
数据处理指令又分为三类:数据传送指令,如MOV; 算数逻辑运算指令,如ADD,SUB,AND等; 比较指令,如TST等
比较指令不保存运算结果,只更新CPSR中相应的条件标志位
默认情况下,数据处理指令不影响条件标志位,只有比较指令能够影响CPSR中的条件标志位。但可以通过添加S来影响条件标志位。如ADDS。