常用ARM汇编指令

1、  相对跳转指令:bbl

其中bl除了跳转之外,还将返回地址保存在lr寄存器中。

这两条指令的可跳转范围是当前指令的前后32MB

它们是位置无关的指令。

2、  数据传送指令mov,地址读取伪指令ldr

Mov指令可以把一个寄存器的值赋给另一个寄存器,或者把一个常数赋给寄存器。示例如下:

Mov r1 ,r2    /*r1=r2*/

Mov r1 ,#4096    /*r1=4096*/

Mov指令传送的常数必须能用立即数来表示。

当不知道一个数能否用“立即数”来表示时,可以使用ldr命令来赋值。

Ldr是伪指令,它不是真实存在的指令,编译器会把它扩展成真正的指令。

Ldr的本意为“大范围的地址读取伪指令”。

示例如下:

ldr  r1 ,=4096    /*r1=4096*/

 

3、  内存访问指令:ldrstrldmstm

Ldr指令从内存中读取数据到寄存器。Str指令把寄存器的值存储到内存中。它们操作的数据都是32位的。示例如下:

ldr r1 ,[r2,#4]    /*将地址为r2+4的内存单元数据读取到r1*/

ldr r1 ,[r2]       /*将地址为r2的内存单元数据读取到r1*/

ldr r1 ,[r2],#4    /*将地址为r2的内存单元数据读取到r1中,然后r2=r2+4*/

str r1 ,[r2,#4]    /*r1的数据保存到地址为r2+4的内存单元中*/

str r1 ,[r2]    /*r1的数据保存到地址为r2的内存单元中*/

str r1 ,[r2] ,#4    /*r1的数据保存到地址为r2的内存单元中,然后r2=r2+4*/

 

Ldmstm属于批量内存访问指令,只用一条指令就可以读写多个数据。

 

4、  加减指令:addsub

示例如下:

Add r1,r2,#1    /*表示r1=r2+1*/

Sub r1,r2,#1    /*表示r1=r2-1*/

 

5、  程序状态寄存器的访问指令:msrmrs

ARM处理器有一个程序状态寄存器(cpsr),它用来控制处理器的工作模式、设置中断的总开关。示例如下:

Msr cpsr ,r0    /*复制r0cpsr*/

Mrs r0cpsr   /*复制cpsrr0*/

 

 

6、  其它伪指令

常见如下:

.extern    main

.text

.global   _start

_start:

.extern”定义一个外部符号,上面的代码表示本文件中引用的main是一个外部函数。

.text”表示下面的语句都属于代码段。

.global”将本文件中的某个程序标号定义为全局的。

 

记:嵌入式linux应用开发完全手册---------读书笔记

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值