ARM常用汇编指令大全

数据运算指令基本格式

《操作码》《目标寄存器》《第一操作寄存器》《第二操作数》

①操作码:            表示执行哪种运算

②目标寄存器:     用来存储运算结果

③第一操作寄存器:第一个参与运算的数据(只能是寄存器)

④第二操作数:    第二个参与运算的数据(可以是寄存器也可以是立即数)

一、数据搬移指令

1、补充:立即数

①概念:能够写在MOV后且能被编译成功的数

②本质:就是包含在指令当中的数,是指令的一部分

③优点:取指的时候就可以将其读到CPU,不用单独去内存读取,速度快

④缺点:不能是任意的32位数字,有局限性

2、MOV

①使用方法:

MOV    R1,    #1            相当于R1=1

3、MVN

①使用方法:

MVN    R1,    #0xFF           相当于R1=~0xFF=0xFFFFFF00

把0xFF按位取反后再搬移给R1

二、加法指令

1、ADD

ADD  R1,    R2,    R3               相当于R1 = R2 + R3

ADD  R1,    R2,    #1               相当于R1 = R2 + 1

2、ADDS

带进位的加法指令

MOV   R1,    #0xFFFFFFFF

MOV   R2,    #0x00000001

ADDS   R3,     R1,     R2

三、减法指令

1、SUB

ADD  R1,    R2,    R3               相当于R1 = R2 - R3

ADD  R1,    R2,    #1               相当于R1 = R2 - 1

2、RSB

逆向减法指令

ADD  R1,    R2,    R3               相当于R1 = R3 - R2

3、SUBS

带借位的减法指令

MOV   R1,    #0x00000001

MOV   R2,    #0x00000005

SUBS   R3,    R1,      R2

四、乘法指令

1、MUL

MUL   R1,   R2,   R3         相当于R1 = R2 * R3

注意:乘法指令只能用于两个寄存器相乘

五、按位与指令

1、AND

 AND   R1,   R2,   R3               相当于R1 = R2 & R3

六、按位或指令

1、ORR

 ORR   R1,   R2,   R3               相当于R1 = R2 | R3

七、按位异或指令

1、EOR

 EOR   R1,   R2,   R3               相当于R1 = R2 ^ R3

八、左移指令

1、LSL

 LSL   R1,   R2,   R3                      相当于R1 = (R2 << R3)

九、右移指令

1、LSR

 LSR   R1,   R2,   R3                      相当于R1 = (R2 >> R3)

十、位清零指令

1、BIC

MOV R2, #0xFF

BIC R1, R2, #0x0F                 相当于R1 = 0xF0

第二操作数中的哪一位为1,就将第一操作寄存器的中哪一位清零,然后将结果写入目标寄存器

十一、跳转指令

1、B

不带返回的跳转指令,本质就是将PC寄存器的值修改成跳转标号下指令的地址

2、BL

带返回的跳转指令,本质就是将PC寄存器的值修改成跳转标号下指令的地址,同时将跳转指令下一条指令的地址存储到LR寄存器

3、直接修改PC的值

一般不建议使用,需要自己计算目标指令的绝对地址,容易出错

十二、比较指令

1、CMP

本质就是一条减法指令(SUBS),只是没有将运算结果存入目标寄存器;常与条件码搭配使用

2、条件码

3、案列

MOV R1, #1

MOV R2, #2

CMP R1, R2

BEQ FUNC          如果R1和R2相等就跳转到FUNC函数,否则就执行下条指令

ADD   R3,  R2,  R1

注:ARM指令集中大多数指令都可以带条件码后缀

十三、写内存指令

1、STR

MOV R1, #0xFF000000

MOV R2, #0x40000000

STR    R1,    [R2]                     将R1寄存器中的数据写入到R2指向的内存空间

2、STRB

MOV R1, #0xFF000000

MOV R2, #0x40000000

STRB    R1,    [R2]                     将R1寄存器中的数据的bit[ 7:0 ]写入到R2指向的内存空间

3、STRH

MOV R1, #0xFF000000

MOV R2, #0x40000000

STRH    R1,    [R2]                     将R1寄存器中的数据的bit[ 15:0 ]写入到R2指向的内存空间

十四、读内存指令

1、LDR

MOV R2, #0x40000000

LDR    R1,    [R2]                     将R2指向的内存空间中的数据读取到R1寄存器

2、LDRB

MOV R2, #0x40000000

LDRB    R1,    [R2]                     将R2指向的内存空间中的数据的[ 7:0 ]读取到R1寄存器

3、LDRH

MOV R2, #0x40000000

LDRH    R1,    [R2]                     将R2指向的内存空间中的数据的[ 15:0 ]读取到R1寄存器

十五、LDR

LDR指令用来将数据从内存加载到寄存器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鯨觞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值