QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2649|回复: 1

一段汇编代码的疑惑

[复制链接]
发表于 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处。因为上面采用的是地址无关指令,所以程序仍然能运行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 08:35 , Processed in 0.046358 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表