位置独立代码讨论 起个头 抛砖引玉 兼论uboot第一阶段

darwinmarx 2014-11-26 11:06:57
以前一直不是很明白位置无关代码和位置相关代码的区别,这几天抽空突击一下。位置无关代码的核心思是代码编译成可执行文件后,这个可执行文件既可以在0x0000_0000上正确执行,也可以在0x8000_0000上执行,也就是说程序的执行和链接时的链接地址无关。

要写出一个位置无关代码,就必须遵循一些编程规则,核心的思想是不能使用绝对地址跳转。

那么问题来了,这条指令 ldr r0, =SYS_CTRL_REG_BASE 是不是一条绝对地址跳转指令?SYS_CTRL_REG_BASE定义在了platform.h中,值为0x2005_0000。
这条指令的反汇编后的代码为 106c: e59f07d8 ldr r0, [pc, #2008] ; 0x184c 从这里可以看出这是一条相对跳转指令。

那么 ldr 寄存器 =标号 这样的指令什么时候是绝对跳转,什么时候是相对跳转。

ldr pc =标号 是绝对跳转指令码?
...全文
248 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧