您的位置:首页 > 其它

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

2015-11-11 00:28 363 查看
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,而且必须在同一个代码段中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: