12.6 数据处理指令

汇编中的符号

一、指令

能够编译生成一条32bit机器码,并且能被CPU识别和执行

ARM指令集

1、数据处理指令:

进行数学运算、逻辑运算

数据搬移指令:

MOV R1,#1 @R1=1

MOV PC, #0

MOV R2, R1 @R2=R1

MVN R0 ,#0xFF @R0= ~0xFF、

MOV R0, #0x12345678

@立即数

能放在MOV之后的数,0-255,包含在指令当中的数,属于指令的一部分,优点:速度快取指的时候就可以将其读取到CPU,不用单独去内存读取,缺点:不能是任意的32位的数字,有局限性

@伪指令

MOV R0,#0xFFFFFFFF

@加法指令

ADD R1,R2,R3 @R1=R2+R3

@减法指令

SUB R1, R2, R3 @R1=R2-R3

@逆向减法指令(当想让数减寄存器时使用)

RSB R1, R2, R3 @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

@左移指令

MOV R2, #0xF0

MOV R3, #0x2

LSL R1, R2, R3 @R1 = (R2 <<R3)

@右移指令

LSR R1, R2, R3 @R1 = (R2 >> R3)

@位清零指令

BIC R1, R2, #0xF @第二操作数中哪一位为1,就将第一操作寄存器中哪一位清零,将结果放入目标寄存器

@数据运算指令的格式扩展

MOV R1, R2, LSL #1 @R1 = ( R2<<1 )

@数据运算指令对条件位(N、Z、C、V)的影响

默认情况下数据运算不会对条件位产生影响,当在指令后加后缀“s”后可以影响

MOV R1, #3

SUBS R2, R1, #5

@两个64位的数据在32位的CPU上做加法运算

第一个数的低32位放在R1

第一个数的高32位放在R2

第二个数的低32位放在R3

第二个数的高32位放在R4

运算结果的低32位放在R5

运算结果的高32位放在R6

第一个数

0x00000001 FFFFFFFF

第二个数

0x00000002 00000002

MOV R1, #0xFFFFFFFF

MOV R2, #0x00000001

MOV R3, #0x00000002

MOV R4, #0x00000002

ADDS R5, R1,R3

ADC R6, R2,R4

R5 = R1 +R3

@本质:R6 = R2 +R4 + "C"

@带借位的减法指令

第一个数

0x00000002 00000001

第二个数

0x00000001 00000005

MOV R1, #0x00000001

MOV R2, #0x00000002

MOV R3, #0x00000005

MOV R4, #0x00000001

SUBS R5, R1, R3

SBC R6, R2, R4

@本质:R6 = R2 - R4 ='!C'

《操作码:表示执行哪种操作》《目标寄存器:用于存储运算的结果》《第一操作寄存器:存储第一个参与运算的数据(只能是寄存器)》《第二操作数:第二个参与运算的数据(可以是寄存器或立即数)》

2、跳转指令:

实现程序的的跳转,本质就是修改了PC寄存器

3、load/srore指令:

访问(读写)内存

4、状态寄存器传送指令:

用于访问(读写)CPSR寄存器

5、软中断指令:

出发软中断

6、协处理器指令:

操作协处理器的指令

二、伪指令

本身不是指令,编译器可以将其替换成若干条指令

三、伪操作

不会生成指令,只是在编译阶段高速编译器怎么编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值