讲的比较好的一篇帖子,ADR和LDR区别的比较清除:

LDR和ADR的区别

Load/Store指令

ARM属于RISC指令集,CPU无法对内存的数据进行直接操作,只能通过Load/Store指令来实现:当我们需要对内存中的数据进行操作时,首先将这个数据从内存中加载到寄存器,在寄存器中进行数据处理,最后将结果重新存储到内存中。使用指令:


LDR X1,[X0] //将x0的值作为地址,将该地址的数据保存到寄存器x1LDR X1,LOOP  //将LOOP地址上的数据送给X1STR X1,[X0] //将x0的值作为地址,把X1寄存器的值存储到这个地址

ARM伪指令

常见的伪指令有:ADR、LDR、NOP,他们的用法:

ADR X0,LOOP  //将标号LOOP的地址保存在X0中
LDR X0,=0x08000000 //将内存地址0x08000000赋值给x0
NOP  //空操作=mov x0,x0

LDR伪指令

LDR伪指令的操作数前一般会有一个"="来表示这是一个伪指令,常用来传送比较长的数据,比如向X0传送64位地址。LDR伪指令在编译器处理时翻译成标准的汇编指令LDR + 文字池的形式。如:

LDR X0,=0x08030000
//被编译器翻译成:
LDR X0,[PC,#OFFSET]
。。。。。。。。。。。
DCD 0x08030000

编译器会自动为0x08030000分配到文字池中,然后计算出LDR伪指令到文字池数据的偏移,然后利用相对寻址传送到x0中。

ADR伪指令

ADR伪指令和LDR伪指令相似,都是加载一个地址到寄存器。不同的是ADR伪指令通常被编译器翻译成ADD指令,如:

ADR X0,LOOP
..........
LOOP:B LOOP
//被编译器翻译成:
OFFSET=LOOP-(PC-8)
ADD X0,PC,#OFFSET

编译器先计算出ADR到LOOP的编译,然后使用ADD指令把地址传送到X0。

ADR伪指令和LDR伪指令的使用区别:

  • LDR伪指令主要来操作外部设备寄存器;而ADR主要通过相对寻址,生成与位置无关的代码,只要标号的位置不变,就可以与位置无关。
  • LDR伪指令使用绝对寻址,ADR伪指令使用相对寻址。
  • LDR伪指令使用的地址范围【0-32GB】,ADR伪指令要求当前指令和标号必须在同一个段中,地址编译范围较小。

ARM LDR和ADR指令相关推荐

  1. ARM指令 LDR 和 ADR的一些区别

    LDR 是ARM中的指令,也是伪指令. 当用 LDR r, =imd  // r 为寄存器, imd为立即数 LDR 是一条伪指令.编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn ...

  2. arm汇编指令:ldr和adr的区别

    在分析uboot源码时,遇到adr.ldr指令,却分不清这2者的区别,网上很多解释含糊不清,现对adr与ldr指令做解释. 首先给出一段汇编代码: ldr r0, _startadr r0, _sta ...

  3. ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH

    ARM的六大类指令集---LDR.LDRB.LDRH.STR.STRB.STRH ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则 ...

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

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

  5. 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)

    首先说明一下 ARM是RISC("reduced instruction set computer",即"精简指令集计算机")结构 x86是CISC(" ...

  6. ldr和adr在使用标号表达式作为操作数的区别

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

  7. ARM中的---汇编指令

    ARM中的---汇编指令 一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是 ...

  8. ARM中跳转指令BL/BLX偏移值计算规则

    源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...

  9. 01 ARM体系结构与汇编指令

    注:本文章是由笔者学习朱有鹏arm的学习笔记,特此感谢朱老师. 关于汇编: 1.汇编的实质是机器指令(机器码)的 助记符,是一款CPU的本质特征. 2.不同CPU的机器指令集设计不同,因此 汇编程序不 ...

最新文章

  1. 影院平台搭建 - (2)FLV发布系统的简单搭建
  2. HDU 1873 看病要排队(结构体+优先队列)
  3. windowsxp的自动更新关闭后怎么能不提示?
  4. b树的阶数如何确定_通过一个示例来聊聊如何规划一个PLC项目
  5. 二级c语言笔试需要带笔吗,考计算机二级需要准备什么
  6. 例解 autoconf 和 automake 生成 Makefile 文件[转+个人修改]
  7. 一不小心,老司机又翻车了
  8. Graphviz样例之有向图
  9. 蓝牙CC2540 CC2541常用AT指令集
  10. 国产电影凭什么霸屏电影院?
  11. 笔记本电脑触摸板手势命令
  12. DSL是什么意思?Mbps是什么意思?
  13. Hive3详细教程(四)beeline的使用
  14. Java导出Excel(Poi详解)
  15. Mysql系列003:sql必知必会(面试必备)
  16. 网页技巧-网页的版式设计---版式的基本类型
  17. 工业品销售,如何才能轻松赢得订单!
  18. 如何区分客户端是手机端还是PC端
  19. mysql之视图、索引
  20. vue横屏分页加载 vue 分页 左右滑动分页 横着分页

热门文章

  1. web应用程序和web网站_Web应用程序中的泄露秘密
  2. jQuery筛选--hasClass(class)和eq(index|-index)
  3. 【企业】米聊败北案例
  4. java几大特性_关于java三大特性的总结
  5. 像素与图片尺寸、分辨率之间的关系
  6. 什么是数字签名?(数字签名与信息摘要又有什么关系?)
  7. 总结下chromebook刷galliumOS安装过程
  8. 硬件工程师基础知识架构
  9. Ubuntu下手动挂载U盘
  10. libCurl 下载提速