LDR 、ADR介绍

请教:
(1)LDR R1,= 0x12345678 ;加载 32 位立即数
         LDR R1,0x12345678
有什么不相同啊?
一般在什么情况下用 LDR R1,= 0x12345678 ?
在什么情况下用 LDR R1,0x12345678 ?


(2)LDR R0,=LED_TAB ;加载标号地址
         LDR R0,LED_TAB
有什么不相同啊?
一般在什么情况下用 LDR R0,=LED_TAB ?
在什么情况下用 LDR R0,LED_TAB ?

====================================================

答:
1. 没有“LDR R1,0x12345678 ”。
2. 以下两条指令是一样的,都被称为“伪指令”,就是说编译器会把这条指令替换成其他合适的指令。
LDR R1, =0x12345678
LDR R0, =LED_TAB
如果这些数值不太复杂,那么就会用mov指令代替,比如:
ldr r1, =0x00
在编译时就会变成:
mov r1, #0x00

如果这些数值很复杂,那么编译时,这个数值会被保存在某个地方,然后使用读内存的指令进行读取,比如:
LDR R1, =0x12345678
在编译时变成:
ldr r1, [pc, xxxxx] // 这个xxx与pc相加,刚好就是some_locate的地址──编译器会帮你做好这一切
some_locate: .word 0x12345678

3. 你说“LDR R0,=LED_TAB ;加载标号地址 ”,没错,
LED_TAB是个地址标号,就是一个数值而已,编译器连接程序时会确定它的值,如果它很简单,就会使用mov指令赋值;如果很复杂,就存在某个地址,然后用读内存的指令读出。

4. LDR R0,LED_TAB
没有“=”号,它表示“读内存”.
比如:
LDR R0,LED_TAB
LDR R1, =LED_TAB
LED_TAB: .work 0x12345678

R0的值是0x12345678,R1的值是LED_TAB标号值,就是0x12345678在内存中存放的地址

 

 

adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指定的寄存器中。到这儿就会看到其中的区别了。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使用adr,例如在lds中需要重新定位的地址。当加载32为的立即数或外部地址时请用ldr。
下面是   
    ldr r0,_start
    ldr r1,_TEXT_BASE
    ldr r2,_armboot_start
    ldr r3,_bss_start
    sub r2,r3,r2
    add r2,r2,r0

    adr r0,_start
    ldr r1,_TEXT_BASE
    adr r2,_armboot_start
    adr r3,_bss_start
    sub r2,r3,r2
    add r2,r2,r0
两个片段的反汇编代码
80000068:    e51f0070     ldr    r0, [pc, #ffffff90]    ; 80000000 <_start>
8000006c:    e51f1054     ldr    r1, [pc, #ffffffac]    ; 80000020 <_TEXT_BASE>
80000070:    e51f2054     ldr    r2, [pc, #ffffffac]    ; 80000024 <_armboot_start>
80000074:    e51f3054     ldr    r3, [pc, #ffffffac]    ; 80000028 <_bss_start>
80000078:    e0432002     sub    r2, r3, r2
8000007c:    e0822000     add    r2, r2, r0

--------------------------------------------------------------------------
80000068:    e24f0070     sub    r0, pc, #112    ; 0x70
8000006c:    e24f1054     sub    r1, pc, #84    ; 0x54
80000070:    e24f2054     sub    r2, pc, #84    ; 0x54
80000074:    e24f3054     sub    r3, pc, #84    ; 0x54
80000078:    e0432002     sub    r2, r3, r2
8000007c:    e0822000     add    r2, r2, r0

由于ldr是读取的32为地址,因此会自动用fffff来填充,可是用PC相减的时候就不知道减到哪儿去了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言二进制数怎么表示_搞懂这些公式和原理,二级C语言对你来说肯定会简单很多!...

基本概念&#xff1a;机器数&#xff1a;在计算机中&#xff0c;一个数有二进制表示的数原码&#xff1a;第一位是符号位&#xff0c;其他位表示数值&#xff1a;0&#xff1a;正数&#xff0c;1&#xff1a;负数反码&#xff1a;正数-->原码&#xff0c;负数-->符号位不…

详细js读取execl内容并展示

作者execl内容展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"> <!-- <script type"text/java…

[转载]细说Java反射

原文地址&#xff1a;细说Java反射作者&#xff1a;简单爱一、反射的概念 &#xff1a; 反射的概念是由Smith在1982年首次提出的&#xff0c;主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先…

python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法)。分享给大家供大家参考&#xff0c;具体如下&#xff1a; # coding:utf-8 # Dijkstra算法——通过边实现松弛 # 指定一个点到其他各顶点的路径——单源最短路径 # 初始化图参数 G {1:{1:0, 2:1, 3:12}, 2:{2:…

嵌入式经典面试题

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年&#xff0c;我既参加也组织了许多这种测试&#xff0c;在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息&#xff0c;此外&#xff0c;撇开面试的压力不谈&#xff0c;这种测试也是相当有趣的…

js将百度坐标转为wgs84

作者execl示例 读取并转换结果如下 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- <scrip…

Jetty 服务器架构分析(中)

接上一篇&#xff0c;说到XmlConfiguration ,XmlConfiguration 利用自己实现的 IOC 组装 Server 的全过程如下图所示&#xff1a; 这里可以看到 3 个关键的配置文件&#xff0c; jetty.xml 、 jetty-deploy.xml 、以及 contexts/xxx.xml l Jetty.xml 文件中定义了…

python去掉列表中的单引号_Python:如何从列表项中删除单引号(Python: How to remove single quotes from list item)...

I’m working on a bit of python code to run a query against a redshift (postgres) SQL database, and I’m running into an issue where I can’t strip off the surrounding single quotes from a variable I’m passing to the query. I’m trying to drop a number of…

VxWorks嵌入式操作系统的TrueFFS文件系统驱动开发

嵌入式系统对执行速度和系统可靠性的要求&#xff0c;决定了嵌入式系统需要一种安全、快速的存储设备&#xff0c;这种设备备同时还需要体积小、容量大、掉电数据不丢失等特点。而Flash存储器恰恰能够满足上述要求。这也使得Flash存储器成为嵌入式系统中的主要存储设备。 现…

神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)

矩阵和随机数 矩阵 创建矩阵 #创建矩阵 astring np.mat("1 2 3; 4 5 6") alist [[1,2,3],[4,5,6]] anplist np.array(alist) print(np.matrix(astring))#字符串、列表、元组、数组 print(np.mat(astring))#字符串、列表、元组、数组 print(np.mat(alist)) prin…

python爬虫抓取文本_Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例...

本文实例讲述了Python实现可获取网易页面所有文本信息的网易网络爬虫功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a; #codingutf-8 #--------------------------------------- # 程序&#xff1a;网易爬虫 # 作者&#xff1a;ewang # 日期&#xff1a;2016-7-6 #…

DOC学习之TrueFFS

TrueFFS原理 引用TrueFFS原理及其在CF卡上的实现的部分内容 “1、Wear-Leveling 闪速存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大&#xff0c;但却有限&#xff1b;因此&#xff0c;随着使用次数的加长&#xff0c;它最终会变成只读状态&#xff0c;所以应该尽…

安装 sql server 2005 com+ 目录要求警告 解决方案

用法&#xff1a; 创建记事本&#xff0c;然后改后缀名为.bat echo off setlocal echo %WINDIR%\System32\msdtc.exe -uninstall %WINDIR%\System32\msdtc.exe -uninstall call :delkey "HKCR\CID" call :delkey "HKLM\SYSTEM\CurrentControlSet\Serv…

神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<1>python)

数据可视化 数据分析阶段&#xff1a;理解和洞察数据之间的关系 算法调试阶段&#xff1a;发现问题&#xff0c;优化算法 项目总结阶段&#xff1a;展示项目成果 Matplotlib&#xff1a; 第三方库&#xff0c;可以快速方便地生成高质量的图表 安装Matplotlib库 Figure 对…

Linux 定时器设置

函数alarm设置的定时器只能精确到秒&#xff0c;而以下函数理论上可以精确到微妙&#xff1a; #include <sys/select.h> #include <sys/time.h> int getitimer(int which, struct itimerval*value); int setitimer(int which, const structitimerval *value, s…

idea lombok不生效_Spring Boot 集成 Lombok 让代码更简洁!

点击上方“Java之间”&#xff0c;选择“置顶或者星标”你关注的就是我关心的&#xff01;作者&#xff1a;Anoyi lombok的威力简化代码IntelliJ IDEA安装lombok插件1、菜单栏 File > Settings > Plugins > Browse repositories…安装插件2、搜索 Lombok Plugin 安装后…

IT人转型做技术型销售到底行不行

想想自己已经做了八年的销售了&#xff0c;说不上很成功自己也算满意&#xff0c;多多少少有一些相关的经验。如果有刚刚入行或者即将入行的朋友愿意从一个过来人的视角着手去对这个行当多一些了解&#xff0c;我乐于慢慢码字出来与大家分享。 对很多职业来说&#xff0c;足够的…

arcgis按属性设置符号大小

一般都在高级设置里&#xff0c;以下是两个示例 1.相同颜色&#xff0c;不同大小 2不同颜色&#xff0c;不同大小

3648

/* 2SAT,找出一组解 逆缩图序&#xff0c;拓扑排序&#xff0c;然后染色。 找出和新娘颜色相同的点 */// include file #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <ctime>#i…

druiddatasource配置_Spring核心配置文件详解

点击蓝字“程序员考拉”欢迎关注&#xff01;1&#xff1a;spring的核心配置文件中的各种配置。 spring的核心配置文件的名字 叫做 applicationContext.xml&#xff0c;后期也可以通过配置文件中的配置修改名称&#xff0c;在web.xml中进行如下配置&#xff1a;<contex…