一段汇编代码的疑惑
在\arch\arm\boot\compressed\head.S中有这样一段程序:.text
adr r0, LC0
ldmia r0, {r1, r2, r3, r4, r5, r6, ip, sp}
subs r0, r0, r1
beq not_relocated
.type LC0, #object
LC0:.word LC0 @ r1
.word __bss_start@ r2
.word _end @ r3
.word zreladdr@ r4
.word _start @ r5
.word _got_start@ r6
.word _got_end@ ip
.word user_stack+4096@ sp
请问其中的r0和r1分别是什么含义?它们之间的差值又是甚么?是不是虚拟地址和物理地址地问题啊,谢谢! ADR. 小范围的地址读取伪指令.ADR 指令将基于PC 相对偏移的地址值读取到寄存器. LC0: word LC0 这里存放的是编译、连接时LC0处的地址,指令存放地址。ADR RO 则是保存的运行时 LC0 的地址。差值说明了该段数据连接地址与运行地址的区别。比如连接时为0X100,而运行时却将程序COPY到0X200处。因为上面采用的是地址无关指令,所以程序仍然能运行。
页:
[1]