nuaagcj 发表于 2008-6-30 15:34:21

一段汇编代码的疑惑

在\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分别是什么含义?它们之间的差值又是甚么?是不是虚拟地址和物理地址地问题啊,谢谢!

深思 发表于 2008-8-6 16:21:33

ADR. 小范围的地址读取伪指令.ADR 指令将基于PC 相对偏移的地址值读取到寄存器. LC0: word LC0 这里存放的是编译、连接时LC0处的地址,指令存放地址。ADR RO 则是保存的运行时 LC0 的地址。差值说明了该段数据连接地址与运行地址的区别。比如连接时为0X100,而运行时却将程序COPY到0X200处。因为上面采用的是地址无关指令,所以程序仍然能运行。
页: [1]
查看完整版本: 一段汇编代码的疑惑