ARM中关于绝对寻址相对寻址LDR,ADR的理解

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,而且必须在同一个代码段中


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值