博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】ARM中关于绝对寻址相对寻址LDR,ADR的理解
阅读量:7158 次
发布时间:2019-06-29

本文共 671 字,大约阅读时间需要 2 分钟。

ARM 地址有几个地址概念:编译地址、期望运行物理地址、实际运行物理地址、相对地址、绝对地址、位置无关指令

编译地址 : 编译阶段的生成地址,其是相对地址,有些地址还没确定,如调用其他.O文件中的函数或库函数
期望运行物理地址: 链接阶段生成的地址(期望绝对地址),会确定编译阶段没有确定的地址,并会根据链接器假设期望的程序烧录运行物理启始地址 ,来分配期望运行物理地址
实际运行物理地址 : 当程序被烧写到系统(实际绝对地址),实际加载运行时,又有一个实际的程序烧录运行物理启始地址,这个时候进行相应的转换得到实际运行物理地址
位置无关 : 和实际烧写运行的地址无关
 
LDR:是与位置有关的,是个绝对寻址,其后的地址值是在程序编译的时候就确定位置了,例如当程序在内部stepping stone中执行时候,如果使用ldr pc, =copy_proc_beg 则程序就是把copy_proc_beg的绝对地址,即在编译时候确定的地址0x30000000加上偏移量的地址付给pc。实现跳转
    其中,​ldr伪指令的实际寻址空间是32位的
ADR:ADR是基于PC或者寄存器的,相对寻址,所以此条指令是读到的是基于此时指令执行时PC地址+或者-偏移量的地址,所以是与位置无关的,无论在哪执行,读到的地址都是基于PC的偏移量。
        例如  start MOV r0,#10
                ADR   r4,start    编译的时候替换成SUB r4,pc,#0xc  ,因为当前的pc值为此条指令+8 ,所以-0xc
   但是adr的寻址空间只有前后4kb,而且必须在同一个代码段中

转载地址:http://bmhgl.baihongyu.com/

你可能感兴趣的文章
python学习------模块
查看>>
前端js框架引入管理bundle.js
查看>>
vs2015 + opencv3.4.0 + qt msvc2015_64-5.7.1
查看>>
[c语言]左移和右移
查看>>
[HAOI2008]排名系统 & [Zjoi2006]GameZ游戏排名系统 BZOJ1862&BZOJ1056
查看>>
电子商城实录------载入数据库模型
查看>>
iOS上的反射用法
查看>>
python之路-09-文件操作
查看>>
Linux常用命令大全
查看>>
链表API
查看>>
table中绝对定位元素相对td定位失效解决方案
查看>>
打印和显示特殊需求
查看>>
python实现二分查找算法
查看>>
NYOJ747
查看>>
结构体之间的转换
查看>>
Oracle中逻辑结构图解
查看>>
java08双重循环打印图形
查看>>
面向对象03
查看>>
融资融券委托业务
查看>>
CSS实现太极图(3个div实现)
查看>>