`
xitong
  • 浏览: 6158773 次
文章分类
社区版块
存档分类
最新评论

ARM汇编中LDR伪指令和LDR指令

 
阅读更多

ARM汇编中ldr伪指令和ldr指令

ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:

ldr r0, 0x12345678

就是把0x12345678这个地址中的值存放到r0中。而mov不能实现这个功能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。


另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个值(一般是一个地址)写到某寄存器中,比如:
ldr r0, =0x12345678

这样,就把0x12345678这个值写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
其实ldr指令可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数。而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替比如:
ldr r1,=0x10
会变成
mov r1,#0x10 

综述所述:ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,ldr伪指令被编译器替换成一条合适的指令。若加载的常数未超出mov或mvn的范围,则使用mov或mvn指令代替该ldr伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的ldr指令从文字池读出常量。
ldr伪指令和ldr指令不是一个同东西。
分享到:
评论

相关推荐

    ARM汇编ADR,LDR等伪指令

    arm中LDR伪指令与LDR加载指令LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… LDR R1,=COUNT MOV R0,#0 STR R0,[R1] COUNT是我们定义的一个变量,地址为0x...

    ARM伪指令ADR与LDR的区别

    详细讲解对比了ARM汇编指令ADR和汇编指令LDR的区别

    常用ARM指令集及汇编.pdf

    ARM 伪指令34 ADR 35 ADRL35 LDR36 NOP37 Thumb 指令集39 Thumb 指令集与 ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 ...

    ARM汇编指令的速查表、特点和格式

     ARM风格ARM汇编:指令一般用大写字母、Windows中的IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]  GNU风格ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]  0.3 ARM汇编指令的特点  ...

    嵌入式系统/ARM技术中的ARM伪指令之地址读取:ADR ADRL LDR

     ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的...

    ARM汇编语言

    1、熟练掌握常用指令LDR LDM STR STM ,条件符号的使用,影响标志位的操作,常用伪指令LDR DCD DCB 等的使用; 2、熟悉ADS1.2汇编的基本格式和调试方法,逐渐掌握排错技巧。 3、ADS1.2软件操作不明的同学查看“ADS...

    ARM汇编常用伪操作总结

    在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与...

    嵌入式系统/ARM技术中的ARM汇编常用伪操作总结

    在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与...

    Uboot中start.S源码的指令级的详尽解析 v1.6

    4.7. 关于为何不直接用mov指令,而非要用adr伪指令 84 4.8. mov指令的操作数的取值范围到底是多少 85 4.9. 汇编学习总结记录 89 4.9.1. 汇编中的标号=C中的标号 89 4.9.2. 汇编中的跳转指令=C中的goto 89 4.9.3. ...

    学习ARM汇编的经典参考资料

    学习ARM汇编指令的经典资料。 对ARM的各种汇编指令进行了深入全面的讲解,并给出了各种示例和详细注解,并且还对一些值得注意的点或是容易犯错误的地方进行了总结。 目录 前言......................................

    ARM指令集 肯定可以下载

    ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式...........................................

    arm指令集-中文 (ARM微控制器基础)

    ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式...........................................

    嵌入式实验报告.doc

    数据的定义采用伪指令DCD实现 END 结果截图: 结果分析: 遍历完成后,数据的最大值和最小值都已经找出,其中最大值存放在R1中,最小值存放 在R2中。由结果可知,R1中为0x00000080,即为128,R2中为0xFFFFFFE9,即为...

    uboott移植实验手册及技术文档

    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 fs2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t fs2410 NULL s3c24x0 arm: CPU的架构(ARCH) arm920t: CPU的类型(CPU),其...

Global site tag (gtag.js) - Google Analytics