ARM微处理器的指令集概述(五)—— LDR和ADR分析

发布者:星辰古泉最新更新时间:2022-03-14 来源: eefocus关键字:ARM  微处理器  指令集  LDR  ADR 手机看文章 扫描二维码
随时随地手机看文章

ADR的定义为:小范围的地址读取伪指令,ADR指令将基于PC相对偏移的地址值读取到寄存器中,在编译源程序时ADR伪指令被编译器 替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,刚产生错误。


在如上的定义中,有两个关键信息:⑴将基于PC相对偏移的地址值读取到寄存器中;⑵被编译器替换成一条合适的指令。ADR指令只能将地址值读取到寄存器中,而不能是其它的立即数,并用只能用一条指令。


如果在汇编程序中使用ADR R1,ResetHandel语句,其中ResetHandel是汇编程序中的一个标签,此条伪指令的作用是把ResetHandel标签所在的指令地址 读取到寄存器R0中。当汇编器对此条伪指令进行编译的时候,将会编译成机器码:0xE28F100C,转换成二进制就是1110 0010 1000 1111 0001 0000 0000 1100,下面对这个机器码进行分析:


根据上面的分析,可以看到,编译器在编译的时候把ADR伪指令编译成一个ADD R1,PC,Immediate指令,其中Immediate是一个立即数,数值是ResetHandel语句和此条伪指令之间的差值,由编译器自动算 出。由于立即数寻址的约束,这个Immediate存在一定的约束,所以会出现定义中所说的不能用一条指令实现。


LDR说的定义为:大范围地址读取伪指令,LDR伪指令用于加载32们的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译 器替换成一条合适的指令。若加载的常数未超出MOV或者MVN的范围,刚使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入字池,并使用一 条程序相对偏移的LDR指令从文字池读出常量。

        与ARM指令的LDR相比,伪指令的LDR的参数有"="号。

        在如上的定义中,有三个关键信息:⑴用于加载32们的立即数或一个地址值到指定寄存器;⑵被编译器替换成一条合适的指令;⑶优先使用MOV或MVN指令代替该指令。

        如果使用MOV指令,那就使用立即数寻址的方式,但是立即数寻址存在一个范围白约束,所以不是所以的常数都可以使用立即数寻址白方式。当不能使用立 即数寻址方式时,就把常量放入文字池,使用一条程序相对于PC寻址的LDR指令把文字池的内容读取到寄存器中。立即数和地址值的操作方式是一样的。

        如果有伪指令:LDR R0,=0x123456。那编译器在编译该伪指令的时候将会编译成机器码:1110 0101 1001 1111 0000 0000 0001 0100,下面对这个机器码进行分析:


由上面分析可知,伪指令LDR R0,=0x123456其实就是被编译成LDR R0,[PC,Immediate]。其中立即数0x123456被储存在一个文字池中,他的地址和指令LDR R0,[PC,Immediate]的地址之前差了Immediate。因此指令LDR R0,[PC,Immediate]就可以把立即数0x123456读取到R0中了。


原文:http://tanglei9098.blog.163.com/blog/static/502021152010312104430781/

LDR 是ARM中的指令,也是伪指令。

当用 LDR r, =imd  // r 为寄存器, imd为立即数

LDR 是一条伪指令。编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn指令。

当imd能用mov或者mvn操作时,就将它翻译成一条mov或mvn指令。当imd大于mov或mvn能够操作的数时,编译器会将imd存在一个内存单元中,然后再用一条ldr指令加载这个内存单元的的值到寄存器中。

LDR r, label  和 LDR r, =label的区别:

LDR r, =label 会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。

譬如 label的值是 0x8000, LDR r, =label会将 0x8000加载到寄存器中,而LDR r, label则会将内存0x8000处的值加载到寄存器中。

ADR 和 ADRL 伪指令:

ADR 和 ADRL 伪指令用于将一个地址加载到寄存器中。

ADR为小范围的地址读取伪指令。ADR指令将基于PC相对偏移的地址值读取到寄存器中。在汇编编译源程序时,ADR伪指令被编译器替换在一条合适 的指令,通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能使用一条指令实现,则产生错误。其能加载的地址范围,当为字节对齐 时,是-1020~1020,当为非字对齐时在-255~255之间。

ADRL是中等范围的地址读取指令。会被编译器翻译成两条指令。如果不能用两条指令表示,则产生错误。

ADRL能加载的地址范围当为非字节对齐时是-64K~64K之间;当为字节对齐时是-256K~256K之间。


关键字:ARM  微处理器  指令集  LDR  ADR 引用地址:ARM微处理器的指令集概述(五)—— LDR和ADR分析

上一篇:移植u-boot-2010.09到S3C2440(一)——硬件初始化与测试
下一篇:ARM微处理器的指令集概述(三)—— .word的含义

推荐阅读最新更新时间:2024-11-06 18:01

人工智能技术阵营众多 ARM专注后端控制技术
人工智慧(AI)可说是近期科技产业热门关键技术,各大科技大厂像是Google、英特尔(Intel)、NVIDIA更是磨刀霍霍一窝蜂开始投入该领域的技术研发。不过,安谋国际(ARM)认为,人工智慧领域的技术阵营众多,现阶段ARM选择深耕后端控制技术,以支持各式各样的人工智慧应用。 ARM全球市场行销暨策略联盟副总裁Ian Ferguson指出,目前人工智慧市场尚未尚未定于一尊,各家厂商都有自己的人工智慧实作方法。有些厂商采用现场可编程闸阵列(FPGA)技术,有些厂商则是使用GPU搭配ARM处理器,或者是采用自己客制化引擎的厂商来实作人工智慧。因此,针对人工智慧,ARM现阶段的重点是聚焦于建立基础组件和后端控制技术,以协助合作夥伴
[单片机]
ARM处理器出货量超过100亿个
  ARM宣布由其合作伙伴所出货的处理器总量已超过100亿个。ARM公司于1991年开发出其第一个嵌入式RISC内核——ARM6™处理器;如今,ARM公司的半导体合作伙伴所生产的基于ARM技术的处理器每年的出货量已近30亿个。   “ARM的合作伙伴截止目前的累计出货量,足以使地球上每一个人拥有一个以上的基于ARM技术的处理器。”ARM公司首席执行官Warren East表示。“共计100亿个基于ARM技术的处理器已投入使用,这是ARM发展历程中的一个重大里程碑,同时也体现了ARM®处理器架构被全球主要电子公司中的绝大部分所采用,并且用于最广泛的应用领域这一增长趋势。”   ARM处理器产品线覆盖了微处理器应用的每一个领域,从
[焦点新闻]
魅族前高管李楠解读英伟达收购Arm原因
英伟达最近发文确认将以 400 亿美元的价格从软银集团和软银愿景基金(统称“软银”)收购 Arm Limited(以下简称Arm)。 官方称此次合并将英伟达领先的 AI 计算平台与 Arm 庞大的生态系统相结合,旨在打造人工智能时代首屈一指的计算公司,在拓展大规模、高增长市场的同时加速创新。软银仍将通过其持有的英伟达股权(预计低于 10%),致力于实现 Arm 的长期成功。 对于英伟达收购Arm的原因,魅族前高级副总裁、现Angry Miao创始人李楠分享了他的看法,他认为跟苹果密切有关。 李楠称Arm的MBP没有独立的 GPU ,而是把CPU和GPU整合到了一个 SoC 上面,而且两个部分可以共用高速内存。 换而言之, GPU
[手机便携]
ARM-Linux驱动移植--Watch Dog Timer(看门狗)驱动移植
硬件平台:FL2440 (S3C2440) 内核版本:2.6.28 软件平台:Ubuntu 11.04 内核版本:2.6.39 交叉编译器:arm-linux-gcc 3.4.1 原创作品,转载请标明出处 1、加载看门狗驱动 insmod wdt.ko wdt.ko为驱动文件名,不加任何参数如果不喂狗,则计数器到0时执行中断函数(设置LED的状态,然后喂狗,重新设置WTCNT的值) 可选的参数 module_param(tmr_margin, int, 0); module_param(tmr_atboot, int, 0); module_param(nowayout, int, 0); module_para
[单片机]
<font color='red'>ARM</font>-Linux驱动移植--Watch Dog Timer(看门狗)驱动移植
基于ARM9处理器的ZigBee工业以太网网关设计
   引言   目前多标准多协议共存的场合应用增多,而充当协议转换桥梁作用的网关起到了关键作用当前比较流行的两个本地无线技术无疑是Wi-Fi 和蓝牙,但是,对于低功耗、低带宽的控制类应用,诸如工厂内的传感器网络,ZigBee 或许是个更好的选择。配备一个功能强大的处理器后,ZigBee 可以在低功耗、低带宽的限制下高效完成很多复杂的应用。   ZigBee 因其低成本、低功耗、组网灵活等众多优势,成为工业无线通信技术中备受关注的技术之一。ZigBee 是一种低速网络,传输速度为10KB/S~250KB/S,多样的互联方式使得组网方式灵活而稳健。   文章介绍一种基于AT91SAM9260 的ZigBee 工业以太网网关设计,
[单片机]
基于<font color='red'>ARM</font>9处理器的ZigBee工业以太网网关设计
ARM7单片机(学习ing)—(三)、UART—01
三、UART 三—(01)、UART相关应用和寄存器的介绍~~ 一、UART0(UART1与UART0相同,只是增加了一个调制解调器(Moderm)接口~~我就不介绍了~~ 1、特性:(个人感觉特性的了解是入门的必经之路~~尤其是FIFO的性能~~无人能挡啊~~) 1)16字节收发FIFO 2)寄存器位置符合‘550’工业标准 3)接收器FIFO触发点可以为1、4、8、和14字节 4)内置波特率发生器 2、管脚描述: 3、寄存器描述:(这个尤其的重要~~) a、接收缓存寄存器 U0RBR 0XEOOOCOOO, DLAB=0, 只读(它包含了最早接收到的字符~~) b、发送器保持寄存器 U0THR 0X
[单片机]
<font color='red'>ARM</font>7单片机(学习ing)—(三)、UART—01
USB海量存储类设备功能在ARM系统中的应用
技术发展到今天的信息时代,数据的存储和传输在嵌入式系统有了越来越重要的地位。而USB是目前设计成熟、应用广泛且使用极为简捷的技术,USB传输是一种高效方便的数据传输方式。基于上述原因,本文重点论述基于USB的海量存储(USB Mass Storage)设备功能在ARM嵌入式系统中设计和应用。使用该设备功能,上位机可以像读写普通U盘一样对于系统采集并存储在FLASH中的数据进行读写。 1 硬件方案 l.1 器件简介 S3C44B0X 是SAMSUNG公司出品的基于ARM7TDMI内核的RISC型微处理器,8 kB指令和数据共享的缓存,主频可达66 MHz,可以运行16位的Thumb指令和32位的ARM指令,且接口丰富,具有通用
[缓冲存储]
Rene Haas对话黄仁勋:独特的管理理念、系统创新体系以及AI的未来
《Tech Unheard》是一档由 Arm 首席执行官 Rene Haas 主持的科技访谈播客,聚焦行业内的变革力量,探索前沿技术与其背后的故事。首期节目邀请到英伟达的创始人、总裁兼首席执行官黄仁勋,两人通过深入对话,分享了从企业文化到人工智能的未来发展等多个话题。这不仅是一场关于技术的交流,更是一次对未来愿景的探索。 上一次Rene Haas主持与黄仁勋的对话还是在2020年,当时在Arm DevSummit大会上,作为主持人的Haas就与黄仁勋探讨了关于AI的问题。 彼时,黄仁勋表示,我们知道一个全新的计算世界即将到来。有人称之为边缘,有人称之为物联网。我们可以创造自主智能电脑,驾驶汽车,无人物流,快速结帐,保持交通
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved