09_ARM汇编自学笔记指令系统之数据处理指令

数据处理指令

数据处理指令可分为数据传送指令算术逻辑运算指令比较指令等。

数据传送指令:用于在寄存器和存储器之间进行数据的双向传输。

算术逻辑运算指令:完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新 CPSR中的相应条件标志位。

比较指令:不保存运算结果,只更新CPSR中相应的条件标志位。

数据处理指令包括:

MOV 数据传送指令

MVN 数据取反传送指令

CMP 比较指令

CMN 反值比较指令

TST 位测试指令

TEQ 相等测试指令

ADD 加法指令

ADC 带进位加法指令

SUB 减法指令

SBC 带借位减法指令

RSB 逆向减法指令

RSC 带借位的逆向减法指令

AND 逻辑与指令

ORR 逻辑或指令

EOR 逻辑异或指令

BI C 位清除指令

1、 MOV指令

MOV指令的格式为:MOV{条件}{S} 目的寄存器,源操作数

MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中 S选项决定指令的操作是否影响 CPSR中条件标志位的值,当没有 S时指令不更新 CPSR中条件标志位的值。指令示例:

MOV  R1,R0 ;将寄存器 R0 的值传送到寄存器 R1

MOV  PC,R14 ;将寄存器 R14 的值传送到 PC,常用于子程序返回

MOV  R1,R0,LSL#3  ;将寄存器 R0 的值左移 3 位后传送到 R1

2、 MVN指令

MVN指令的格式为:MVN{条件}{S} 目的寄存器,源操作数

MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。 MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中 S决定指令的操作是否影响 CPSR中条件标志位的值,当没有 S时指令不更新 CPSR中条件标志位的值。指令示例:

MVN  R0,#0 ;将立即数 0 取反传送到寄存器 R0 中,完成后 R0=-1

3、 CMP指令

CMP指令的格式为:CMP{条件} 操作数 1,操作数 2

CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新 CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数 1与操作数 2的关系(大、小、相等),例如,当操作数 1大于操作操作数 2,则此后的有GT后缀的指令将可以执行。指令示例:

CMP  R1,R0 ;将寄存器 R1 的值与寄存器 R0 的值相减,并根据结果设置CPSR 的标志位

CMP  R1,#100  ;将寄存器 R1 的值与立即数 100 相减,并根据结果设置CPSR 的标志位

4、 CMN指令

CMN指令的格式为:CMN{条件} 操作数 1,操作数 2

CMN 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数 1和操作数 2相加,并根据结果更改条件标志位。指令示例:

CMN  R1,R0 ;将寄存器 R1 的值与寄存器 R0 的值相加,并根据结果设置CPSR 的标志位

CMN  R1,#100  ;将寄存器 R1 的值与立即数 100 相加,并根据结果设置CPSR 的标志位

5、 TST指令

TST指令的格式为:TST{条件} 操作数 1,操作数 2

TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新 CPSR中条件标志位的值。操作数1 是要测试的数据,而操作数 2 是一个位掩码,该指令一般用来检测是否设置了特定的位。指令示例:

TST  R1,#%1  ;用于测试在寄存器 R1 中是否设置了最低位(%表示二进制数

TST  R1,#0xffe ;将寄存器 R1 的值与立即数 0xffe 按位与,并根据结果设置CPSR 的标志位

6、 TEQ指令

TEQ指令的格式为:TEQ{条件} 操作数 1,操作数 2

TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数 1和操作数 2是否相等。指令示例:

TEQ  R1,R2 ;将寄存器 R1 的值与寄存器 R2 的值按位异或,并根据结果设置 CPSR 的标志位

7、 ADD指令

ADD指令的格式为:ADD{条件}{S} 目的寄存器,操作数 1,操作数 2

ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。

指令示例:

ADD R0,R1,R2 ; R0 = R1 + R2

ADD R0,R1,#256 ; R0 = R1 + 256

ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 << 1)

8、 ADC指令

ADC指令的格式为:ADC{条件}{S} 目的寄存器,操作数 1,操作数 2

ADC指令用于把两个操作数相加,再加上 CPSR中的 C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的数的加法,注意不要忘记设置 S 后缀来更改进位标志。操作数 1应是一个寄存器,操作数 2可以是一个寄存器,被移位的寄存器,或一个立即数。

以下指令序列完成两个128 位数的加法,第一个数由高到低存放在寄存器 R7~R4,第二个数由高到低存放在寄存器 R11~R8,运算结果由高到低存放在寄存器 R3~R0:

ADDS R0,R4,R8 ;加低端的字

ADCS R1,R5,R9 ;加第二个字,带进位

ADCS R2,R6,R10 ;加第三个字,带进位

ADC R3,R7,R11 ;加第四个字,带进位

9、 SUB指令

SUB指令的格式为:SUB{条件}{S} 目的寄存器,操作数 1,操作数 2

SUB指令用于把操作数 1 减去操作数 2,并将结果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:

SUB R0,R1,R2 ; R0 = R1 - R2

SUB R0,R1,#256 ; R0 = R1 - 256

SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 << 1)

10、SBC指令

SBC指令的格式为:SBC{条件}{S} 目的寄存器,操作数 1,操作数 2

SBC指令用于把操作数 1 减去操作数 2,再减去 CPSR中的 C条件标志位的反码,并将结果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减法,注意不要忘记设置 S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:

SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设置 CPSR 的进位标志位

11、RSB指令

RSB指令的格式为:RSB{条件}{S} 目的寄存器,操作数 1,操作数 2

RSB 指令称为逆向减法指令,用于把操作数 2 减去操作数 1,并将结果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例:

RSB R0,R1,R2 ; R0 = R2 – R1

RSB R0,R1,#256 ; R0 = 256 – R1

RSB R0,R2,R3,LSL#1 ; R0 = (R3 << 1) - R2

12、RSC指令

RSC指令的格式为:RSC{条件}{S} 目的寄存器,操作数 1,操作数 2

RSC指令用于把操作数 2 减去操作数 1,再减去 CPSR中的 C条件标志位的反码,并将结果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减法,注意不要忘记设置 S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:

RSC R0,R1,R2 ; R0 = R2 – R1 - !C

13、AND指令

AND指令的格式为:AND{条件}{S} 目的寄存器,操作数 1,操作数 2

AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数 1 的某些位。指令示例:

AND R0,R0,#3 ;该指令保持 R0 的 0、1 位,其余位清零。

14、ORR指令

ORR指令的格式为:ORR{条件}{S} 目的寄存器,操作数 1,操作数 2

ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数 1应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数 1 的某些位。指令示例:

ORR R0,R0,#3 ;该指令设置 R0 的 0、1 位,其余位保持不变。

15、EOR指令

EOR指令的格式为:EOR{条件}{S} 目的寄存器,操作数 1,操作数 2

EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数 1 的某些位。指令示例:

EOR R0,R0,#3 ;该指令反转 R0 的 0、1 位,其余位保持不变。

16、BI C指令

BI C指令的格式为:BI C{条件}{S} 目的寄存器,操作数 1,操作数 2

BI C指令用于清除操作数 1 的某些位,并把结果放置到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。操作数 2 为 32 位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。指令示例:

BIC R0,R0,#%1011 ;该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值