查看: 2886|回复: 0

常用ARM汇编指令

[复制链接]

该用户从未签到

发表于 2012-8-29 15:40:24 | 显示全部楼层 |阅读模式
分享到:
常用ARM汇编指令  

1、 相对跳转指令:b、bl
其中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、 内存访问指令:ldr、str、ldm、stm
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*/


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

4、 加减指令:add、sub
示例如下:
Add r1,r2,#1    /*表示r1=r2+1*/
Sub r1,r2,#1    /*表示r1=r2-1*/


5、 程序状态寄存器的访问指令:msr、mrs
ARM处理器有一个程序状态寄存器(cpsr),它用来控制处理器的工作模式、设置中断的总开关。示例如下:
Msr cpsr ,r0    /*复制r0到cpsr中*/
Mrs r0,cpsr   /*复制cpsr到r0中*/



6、 其它伪指令
常见如下:
.extern    main
.text
.global   _start
_start:

“.extern”定义一个外部符号,上面的代码表示本文件中引用的main是一个外部函数。
“.text”表示下面的语句都属于代码段。
“.global”将本文件中的某个程序标号定义为全局的。

ARM汇编STR和LDR
1.使用单一数据传送指令(STR 和 LDR)来装载和存储单一字节或字的数据从/到内
存。  
请问装载(LDR)和存储(STR)有什么区别?我个人理解没有区别.就是向指定的地址写数
据.是么?  
LDR是内存数据放到寄存器,即装载,是读
STR是寄存器数据到内存,即存储,是写


2.ldr     r0, PtEBIBase  
对于这条指令中的PtEBIBase,它是一个地址么?可是它之前的定义是:  
PtEBIBase:  
            .long         EBI_BASE      

PtEBIBase是一个标号,指向一个long型的数,这个数的值等于EBI_BASE,就是EBI的
基地址


3.ldr     r1, [pc,#-(8+.-InitTableEBI)]   
#-(8+.-InitTableEBI)这个东西如何计算?比如:  

InitTableEBI是一个标号
8 + 当前地址 = 当前PC
8 + 当前地址 - InitTableEBI = 当前PC到InitTableEBI这个标号(即地址)的距
离。
pc - (8 + 当前地址 - InitTableEBI) = InitTableEBI这个标号的地址。
就是说,最后r1的值是InitTableEBI这个标号的地址。


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /1 下一条

手机版|小黑屋|与非网

GMT+8, 2024-6-2 23:39 , Processed in 0.104514 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.