转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756

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指令不是一个同东西。

转载于:https://www.cnblogs.com/lance-ehf/p/4521788.html

ARM汇编中ldr伪指令和ldr指令(转载)相关推荐

  1. arm汇编中DCB、DCW、DCD、DCQ指令

    背景 在ida中进行分析so文件,就是elf文件,它所对应的arm汇编,在汇编中会时常碰到一些下面的汇编指令.DCB是arm汇编中的伪指令,下面就针对这个指令相关做下小记录. 伪指令及DC系列指令 A ...

  2. 伪指令相当于c语言的什么,ARM汇编中关于“.word”伪指令的概念(转)

    PS:在u-boot源码时遇到_armboot_start._bss_start等这些变量,不知道指向什么地址,于是查了一下,弄清了ARM汇编中".word"这个伪指令是什么意思了 ...

  3. LDR伪指令和LDR指令及MOV指令的区别

    1.前言 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令. 2.LDR指令 就是将地址中的值存放到寄存器中 比如想把数据从内存中某处读取到寄存器中 ...

  4. 【ARM】ARM汇编程序设计(五) str和ldr

    00. 目录 文章目录 00. 目录 01. ldr伪指令 02. ldr指令 03. adr指令 04. str指令 05. 附录 01. ldr伪指令 ldr示例一: .section .roda ...

  5. arm汇编中mov、movs、movw、movl、movb解析

    arm汇编中mov指令 mov 指令在汇编中表示传送含有 movl mov long : 传送字长 : 32位:把32位立即数放到寄存器 movw mov word:传送字 :16位: 把 16 位立 ...

  6. ARM中LDR伪指令与LDR加载指令

    ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是"LDR Rn,=expr".下面举一个例子来说明它的用法. COUNT EQU       ...

  7. ARM汇编指令:LDR伪指令和LDR装载指令的区别

    LDR伪指令的格式: LDR  register, =expression 相当于把expression的值(其实标号可以理解为地址值)放到寄存器中: LDR装载指令的格式: LDR register ...

  8. ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析

    ARM汇编有ldr指令以及ldr.adr伪指令,它们都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别. ldr r0, _start adr r0, _start ...

  9. C语言的变量和汇编中的伪指令,伪指令 尤其EQU DW DB(微机和单片机中的作用稍微不同,但是规则机制相同)微机原理中的汇编指令和伪指令是标准的,单片机的指令和伪指令是在微机标准版基础上修改的版

    微机原理中表明 变量用伪指令DW,DB 单片机中的伪指令EQU C语言中的变量来源与汇编的伪指令(微机和单片机中的作用稍微不同,但是规则机制相同)微机原理中的汇编指令和伪指令是标准的,单片机的指令和伪 ...

最新文章

  1. 3g无线图传点到点模式与服务器模式比较,RTK网络模式分类及网络制式的选择
  2. Python 学习第十八天 js 正则及其它前端知识
  3. android studio 初次使用Kotlin(环境准备篇)
  4. 【Python CheckiO 题解】Striped Words
  5. 超详细springboot热部署
  6. css相关笔记(一)
  7. 航空信息指挥调度系统_应急指挥中心指挥调度系统解决方案(一)
  8. 数字信号处理——多速率信号处理
  9. 中国石油大学(北京)-《 公共社交礼仪 》-​​​​​​​第一阶段在线作业
  10. chatter投稿&メール通知
  11. pycharm安装及添加桌面图标
  12. 如何写出更具有Python风格的代码
  13. Java有没有lower_bound函数_函数 - lower_boundupper_bound
  14. ADXL345传感器介绍
  15. bugku-渗透测试1通关 wp
  16. html文件剖析 - mdn学习
  17. [系统安全] Windbg Preview调试记录
  18. Android /iPhone/iPad UI之常用图标尺寸规范
  19. [OpenBMC] 简单解析 smbios-mdr
  20. 设置数据有效性实现单元格下拉菜单的3种方法

热门文章

  1. 问题 A: 编写函数:比较三个数大小 (Append Code)
  2. amd显卡风扇调节_为什么NVIDIA和AMD公版显卡纷纷摒弃涡轮散热器而采用多风扇散热设计?...
  3. 2018-携程-春招题
  4. linux建sybase设备,linux sybase 安装全过程(写给初学者)
  5. Jenkins配置钉钉通知
  6. Python 测试驱动开发读书笔记(一)使用功能测试协助安装Django
  7. Marlin Protocol正在为验证者开放OTC渠道
  8. Hadoop 的核心(1)—— HDFS
  9. C#中用ILMerge合并DLL和exe文件成一个exe文件或者DLL
  10. MVC和WebApi中设置Area中的页为首页