历史上的今天
今天是:2025年02月26日(星期三)
2020年02月26日 | arm汇编adrl(以及ldr与adr的区别)
2020-02-26 来源:eefocus
看《嵌入式linux应用开发》第六章实例中看到个句:
adrl r2,men_cfg_val
最初对adr1相当不解,后来发现,那个不是数字1,而是字母l(认真看头部,有点区别的)
这里记录下ADRL的用法:
功能:将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。
语法
ADRL{cond} Rd,label
其中:
cond:是一个可选的条件代码。Rd:是要加载的寄存器。label:是相对于程序或寄存器的表达式。
上面给出的范围是相对于位于当前指令地址后的、距离当前指令四个字节(在 Thumb 代码中)或两个字(在 ARM 代码中)远的点而言的。如果对齐为 16 字节,或与此点的相关性更高,则远程地址的范围可更大。
查看ADRL的同时,看到篇讲述ldr与adr的区别的博文,感觉写的很好,摘录下来。
http://coon.blogbus.com/logs/2738861.html
ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr
_start: nop 编译的时候设置 RO 为 0x0c008000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
0c008000 <_start-0x14>: c008000: e59f000c ldr r0, [pc, #12] ; c008014 <_start> c008004: e28f0008 add r0, pc, #8 ; 0x8 c008008: e59f0008 ldr r0, [pc, #8] ; c008018 <_start+0x4> c00800c: e1a00000 nop (mov r0,r0) c008010: e1a0f00e mov pc, lr
0c008014 <_start>: c008014: e1a00000 nop (mov r0,r0) c008018: 0c008014 stceq 0, cr8, [r0], -#80
分析:
ldr r0, _start
从内存地址 _start 的地方把值读入。执行这个后,r0 = 0xe1a00000
adr r0, _start
取得 _start 的地址到 r0,但是请看反编译的结果,它是与位置无关的。其实取得的时相对的位置。例如这段代码在 0x0c008000 运行,那么 adr r0, _start 得到 r0 = 0x0c008014;如果在地址 0 运行,就是 0x00000014 了。
ldr r0, =_start
这个取得标号 _start 的绝对地址。这个绝对地址是在 link 的时候确定的。看上去这只是一个指令,但是它要占用 2 个 32bit 的空间,一条是指令,另一条是 _start 的数据(因为在编译的时候不能确定 _start 的值,而且也不能用 mov 指令来给 r0 赋一个 32bit 的常量,所以需要多出一个空间存放 _start 的真正数据,在这里就是 0x0c008014)。 因此可以看出,这个是绝对的寻址,不管这段代码在什么地方运行,它的结果都是 r0 = 0x0c008014
看此文最大的收获不在于说懂了这几个命令的用法,关键却在于反汇编的运用,有反汇编看出不同用法的具体差别。
注:反汇编用arm—linux_objdump就可以实现了。
下一篇:Linux下ARM汇编语法
史海拾趣
|
门禁控制器是门禁系统的核心部分,是门禁系统的灵魂。门禁控制器的质量和性能优劣直接影响着门禁系统的稳定性,而系统的稳定性会直接影响着门禁系统使用者的工作和生活秩序,甚至影响到生命和财产的安全。 目前中国市场上门禁控制 ...… 查看全部问答> |
|
前段时间有朋友问wince的环境搭建方法,由于安装有一些需要注意的地方,直接用语言描述有诸多不便,今天整理了一个图片集,觉得说的比较明白了,需要的朋友看一看,也希望高手朋友们多完善,谢谢! PS: [广告,被屏蔽] 了解更多内容可登陆:[广 ...… 查看全部问答> |
|
XDJM 们: 我现在有一个SIM300的模块,我把这个模块和WinCE的系统的一个COM口接了起来。但是我的这个系统的COM口只有TX和RX,没有其他的DCE和DTE 的管脚。 可是SIM300要求的是traditional DCE-DTE的连接方式。 我现在直接把RTS和CTS连接了起来。 ...… 查看全部问答> |
|
现有一外部中断,中断来临后要求驱动马上读取数据,现在问题是:中断来临后,怎么通知用户主动读取数据,现在我用的是使用了中断上下部,下部处理中断,一产生中断马上进入上半部分处理接收,并传送到用户空间,那么此时的读如果在没有中断时就一直 ...… 查看全部问答> |
|
以前的地址我由于更新网站已经改掉了。 Windows CE实用开发技术 电子档下载。 版权说明,本电子档版权归原书作者所有,下载仅供学习,请与下载后24小时删除。 保护合法版权,请购买正版书籍! 请勿多线程,保护本空间的速度! 谢谢!! 下载 ...… 查看全部问答> |
|
如题,因为WinCE系统自带的Word Viewer是不能够进行新建和编辑的只能用来浏览Word文件,而且我试过插入一个图片和表格在Word Viewer中也能正常显示出来,因为本人现在急需一个也能在WinCE上面进行新建和可编辑的Word(当然插入表格和图片也是可以的 ...… 查看全部问答> |




