微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 说说ARM汇编的LDR伪指令

说说ARM汇编的LDR伪指令

时间:11-21 来源:互联网 点击:

添加的内容:

1 指令LDR

应用举例:

u LDR R0, [R1, #4] ;将内存单元R1+4中的字读取到R0寄存器

其中,R1为基址,#4为偏移地址,R0为目标地址。注意,此时不更新R1。

u LDR R0, [R1, #-4] ;将内存单元R1-4中的字读取到R0寄存器

u LDR R0, [R1, #4]! ;将内存单元R1+4中的字读取到R0寄存器。同时更新R1,R1=R1+4。

u LDR R0, [R1], #4 ;将地址为R1的内存单元数据读取到R0寄存器,然后R1=R1+4。

2 伪指令LDR

ARM中的伪指令不是真正的ARM指令或者Thumb指令,这些伪指令在汇编编译器对源程序进行汇编处理时,被替换为相应的ARM或者Thumb指令(序列)。

LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中。

语法格式:

LDR{cond} register, =[expr | label-expr]

其中,register为目标寄存器

expr为32位的常量。编译器将根据expr的取值情况,如下处理LDR伪指令:

u 当expr所表示的地址值没有超过MOV或MVN指令中的地址取值范围时,编译器用合适的MOV或者MVN指令代替LDR伪指令。

应用举例:

将0xFF0读取到R1中

LDR R1, =0xFF0

汇编后得到:

MOV R1, 0xFF0

u 当expr表示的地址值超过了MOV或者MVN指令中的地址的取值范围(第二操作数的取值范围)时,编译器将该常数放在数据缓冲区中,同时用一条基于PC的LDR指令读取该常数。

LDR R1,=0xFFF

汇编后得到:

LDR R1, [PC, OFFSET_TO_LPOOL]

LPOOL DCD 0xFFF

关于label-expr的介绍我不是很理解。不理解其中关于“连接重定位伪操作”。(P144)

声明:本文为我在学习杜春雷编著的《ARM体系结构与编程》时做的总结笔记,文中摘录了书中的很多内容。

补充2:

原文地址:http://hi.baidu.com/andylgh/blog/item/17dbdc1f7d102a62f624e4dc.html

gnu下的arm汇编伪指令:.word说明

2007-04-08 20:14

说说这个.word的作用。

word expression就是在当前位置放一个word型的值,这个值就是expression
举例来说,
_rWTCON:
.word 0x15300000
就是在当前地址,即_rWTCON处放一个值0x15300000

翻译成intel的汇编语句就是:
_rWTCON dw 0x15300000

例如:

ldr r1, _rWTCON

_rWTCON:
.word 0x15300000
不是把地址0x1530 0000 上的内容传递到r1,是把地址_rWTCON上的内容放到r1,而地址_rWTCON上的内容是0x15300000。实际上就是把r1设置为0x15300000


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top