ARM汇编指令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM汇编指令相关的知识,希望对你有一定的参考价值。

ARM汇编指令基于RISC架构,因此其指令集非常精简,本文重点介绍必须掌握的相关指令。

1.算数和逻辑指令

mov 指令: mov r0, #1 @ 0x1 ---> r0
mvn指令:mvn r0, #0 @0x0取反 ---> r0
add指令: add r0, r1, r2 @ r0 = r1 + r2
sub指令: sub r0, r1, r2 @ r0 = r1 - r2
and指令: and r0, r1, r2 @ r0 = r1 & r2
bic指令: bic r0, r0, #0b1011 @ 用掩码清零r0,存入r0

2.比较指令

cmp指令: cmp r0, r1 @根据r0-r1值判断状态寄存器(cpsr寄存器)
tst指令: tst r0, #0b1001 @按位与的值判断状态寄存器(cpsr寄存器)

3.跳转指令

b指令: b label @直接跳转
bgt label1 @大于跳转
beq @等于跳转
bl指令: bl func @调用函数跳转(长跳转)

4.位移指令

lsl指令: mov r0, r0, lsl#2 @r0寄存器值算数左移2位
ror指令: mov, r0, r0,ror#1 @r0循环右移1位

5.程序状态指令

msr指令: mrs r0,cpsr @cpsr复制到msr
mrs指令: msr cpsr, r0 @r0复制到cpsr

6.存储器访问指令(如:内存)

ldr指令: ldr r0, [r1] @ r1内存地址到r0
ldr r0, [r1, #1]
str指令: str r0, [r1] @r0到r1内存地址
str r0, [r1, #1]

7.伪指令

伪指令并没有对应的机器码,是给汇编器看的,在编译时候起作用或者转换成其他指令。
(1)定义类伪指令
gobal:定义全局符号
例如:
.global _start
_start:
<汇编代码>

ascii:ascii数据类型
byte:byte数据类型
word:word数据类型
data:定义数据段
例如:
.data
hello:
.asicc "helloworld"
world:
.byte 0x1

equ:相当于c语言的define,例如:.equ NUM 0x12
align:数据对齐,例如: .align 4 @表示4字节对齐

(2)操作类伪指令
nop:空操作,其作用是延时

ldr:由于mov指令的立即数,不能超过8bit,所以需要使用ldr伪指令。
例如:
ldr r0, =0x2ff @立即数前加=号,不是#号

8.协处理器

协处理器用于执行特定的处理任务,如:数学协处理器用于数字处理,以减轻cpu负担,ARM可以多达16个协处理器,其中CP15是最重要的协处理器。CP15主要通过协处理器寄存器进行访问。其实在x86系列处理器中,x87浮点单元,就是一个协处理器。

mcr指令:通用寄存器--->协处理器
mrc指令: 协处理器--->通用寄存器
例如:
mrc p15,0,r0,c0,c0,0 @读取main id寄存器到r0

以上是关于ARM汇编指令的主要内容,如果未能解决你的问题,请参考以下文章

c语言转化为arm汇编指令

ARM 汇编语言指令

arm汇编b指令是绝对地址还是相对地址跳转?

arm汇编中DCBDCWDCDDCQ指令

arm汇编中DCBDCWDCDDCQ指令

汇编指令及其特点