说说ARM汇编的LDR伪指令
添加的内容:
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
gnu下的arm汇编伪指令:.word说明
2007-04-08 20:14
说说这个.word的作用。 word expression就是在当前位置放一个word型的值,这个值就是expression 例如: ldr r1, _rWTCON |
ARM汇编LDR伪指 相关文章:
- ARM汇编中LDR伪指令和LDR指令(11-22)
- arm汇编—ldr伪指令(11-21)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)