0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM指令:adr和ldr的用法区别

如意 来源:CSDN 作者:孙晓明 2020-06-20 10:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

同学们在学习ARM指令时,多数都会对adr和ldr这两个命令产生疑惑,那他们究竟有什么区别呢?

其实这两个都是伪指令:adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指定的寄存器中。到这儿就会看到其中的区别了。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使用adr,例如在lds中需要重新定位的地址。当加载32为的立即数或外部地址时请用ldr。

我给大家先举个例子:

AREA test,CODE,READONLY

ENTRY

ldr r0,_start

adr r0,_start

ldr r0,=_start

nop

_start

nop

END

这段代码并无实际意义,只是为了方便说明。我们反汇编一下看看:

4: ldr r0,_start

0x00000000 E59F0008 LDR R0,[PC,#0x0008]

5: adr r0,_start

0x00000004 E28F0004 ADD R0,PC,#0x00000004

6: ldr r0,=_start

0x00000008 E59F0004 LDR R0,[PC,#0x0004]

7: nop

8:

9:

10: _start

0x0000000C E1A00000 NOP

11: nop

ldr r0, _start

从内存地址 _start 的地方把值读入。执行这个后,r0 = 0xe1a00000

adr r0, _start

取得 _start 的地址到 r0,但是请看反编译的结果,它是与位置无关的。其实取得的时相对的位置。例如这段代码在 0x00000000 运行,那么 adr r0, _start 得到 r0 = 0x00000010;

ldr r0, =_start

这个取得标号 _start 的绝对地址。这个绝对地址是在 link 的时候确定的。看上去这只是一个指令,但是它要占用 2 个 32bit 的空间,一条是指令,另一条是 _start 的数据(因为在编译的时候不能确定 _start 的值,而且也不能用 mov 指令来给 r0 赋一个 32bit 的常量,所以需要多出一个空间存放 _start 的真正数据,在这里就是 0x0000000c)。

因此可以看出,这个是绝对的寻址,不管这段代码在什么地方运行,它的结果都是 r0 = 0x0000000c。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9611

    浏览量

    394333
  • adr
    adr
    +关注

    关注

    0

    文章

    9

    浏览量

    11750
  • LDR
    LDR
    +关注

    关注

    0

    文章

    101

    浏览量

    8330
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADR1399:高精度电压基准源的卓越之选

    ADR1399:高精度电压基准源的卓越之选 在电子设计领域,高精度电压基准源是许多精密测量和控制系统的核心组件。今天,我们将深入探讨一款备受关注的电压基准源——ADR1399,它以其出色的性能和丰
    的头像 发表于 05-24 10:05 174次阅读

    一芯全能,OTG 新标杆 ——LDR6021Q 边充边传全场景应用解析

    三、LDR6021Q OTG 典型应用场景 3.1 移动办公:一线搞定充电 + 数据 + 外设 场景:手机 / 平板外接 U 盘、移动硬盘、键盘、鼠标、打印机,同时快充; 体验:手机边 65W
    的头像 发表于 05-18 09:03 436次阅读

    UPS电源能当发电机用吗?90%的人都搞错了,一文理清区别用法

    功能、工作原理完全不同,二者既不能替代,又能协同互补。今天就从原理、差异、用法三方面,彻底讲清二者的区别,帮你避开使用误区。一、核心结论:UPS电源≠发电机,二者本质完全不
    的头像 发表于 01-22 09:37 1328次阅读
    UPS电源能当发电机用吗?90%的人都搞错了,一文理清<b class='flag-5'>区别</b>与<b class='flag-5'>用法</b>

    时钟周期和指令周期的区别是什么

    时钟周期: 是硬件的时间单位,由主频直接决定。类似于音乐的节拍器,所有操作按此节奏同步。例如,72MHz 的 CPU 每秒完成 7200 万次时钟周期。 指令周期: 指令周期是软件视角的耗时
    发表于 11-21 07:01

    ARM架构与DSP有什么区别?哪一个更好?

    ARM架构与DSP有什么区别?哪一个更好?
    发表于 11-19 06:14

    Vector向量指令集简介(四)

    址。 Load/store指令大致分为主要分为unit-stride模式、stride模式和vector index模式。这三种模式主要通过mop的值进行设置。 这几种模式的区别
    发表于 10-22 06:06

    利用Arm i8mm指令优化llama.cpp

    本文将为你介绍如何利用 Arm i8mm 指令,具体来说,是通过带符号 8 位整数矩阵乘加指令 smmla,来优化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。
    的头像 发表于 07-24 09:51 2285次阅读
    利用<b class='flag-5'>Arm</b> i8mm<b class='flag-5'>指令</b>优化llama.cpp

    请帮忙看看这个TI ADR芯片的具体型号

    图片就是这样,验证过,丝印TI 26 ADR也可以用,请大家帮忙给出具体型号,感谢!
    发表于 07-06 23:08

    Analog Devices Inc. ADR1399H-EBZ评估板特性/示意图

    Analog Devices Inc. ADR1399H-EBZ评估板设计用于评估ADR1399超稳定7.05V分压基准,采用4引脚TO-46封装。
    的头像 发表于 06-25 10:38 1170次阅读
    Analog Devices Inc. <b class='flag-5'>ADR</b>1399H-EBZ评估板特性/示意图

    Analog Devices Inc. ADR1399精密分流基准数据手册

    Analog Devices Inc. ADR1399精密分流基准在各种电压、温度和静态电流范围内具有出色的温度稳定性。ADR1399在单片基板上结合了温度稳定环路和有源齐纳,几乎消除了电压随温度的变化。
    的头像 发表于 06-24 15:04 1117次阅读
    Analog Devices Inc. <b class='flag-5'>ADR</b>1399精密分流基准数据手册

    RISC-V和ARM有何区别

    与RISC-VARM是一种精简指令集(RISC),以该指令集为基础的处理器通常被称为ARM芯片,它在全球范围内得到了极为广泛的应用。而RISC-V也是精简指令集,是美国加
    的头像 发表于 06-24 11:38 2372次阅读
    RISC-V和<b class='flag-5'>ARM</b>有何<b class='flag-5'>区别</b>?

    Analog Devices Inc. ADR3625大电流输出电压基准数据手册

    Analog Devices Inc. ADR3625大电流输出电压基准是低功耗、高精度元件,最大温度系数为3ppm/°C(B级),采用8引线MSOP封装。ADR3625能够提供高达70 mA电流
    的头像 发表于 06-18 11:49 1190次阅读
    Analog Devices Inc. <b class='flag-5'>ADR</b>3625大电流输出电压基准数据手册

    Analog Devices Inc. EVAL-ADR3650EBZ评估板数据手册

    Analog Devices EVAL-ADR3650EBZ评估板设计用于评估电路板上包含的ADR3650。该印刷电路板 (PCB) 具有用于GNDS和VOUT引脚、无源器件以及用于更广泛设置
    的头像 发表于 06-14 11:33 1142次阅读
    Analog Devices Inc. EVAL-<b class='flag-5'>ADR</b>3650EBZ评估板数据手册

    步进电机控制指令详解

    这些指令主要是针对用 PLC 直接联动伺服放大器,目的是可以不借助其他扩展设备(例如1GM 模块)来进行简单的点位控制, 使用这些指令时最好配合三菱的伺服放大器 (如 MR-J2)。然而,我们也可以用这些指令来控制步进电机的运行
    的头像 发表于 06-12 10:33 2478次阅读
    步进电机控制<b class='flag-5'>指令</b>详解

    arm指令速查手册

    ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,该企业设计了大量高性能、廉价、耗能低的 RISC 处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点,适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP 和移动式应用等。
    发表于 06-05 17:13 2次下载