ARM启动位置、位置无关码

   S3C2440上电后,硬件自动从NAND FLASH中(NAND 启动)读取前4K字节内容到内部SRAM,并从地址0开始取指令执行,不管这4K的链接地址(运行时代码应该位于的地址)在什么地方,哪怕在0X3000000,CPU也是从SRAM中的0地址开始执行,但是不能读写全局变量或者静态变量,也不能使用位置相关指令跳转。访问全局变量或者静态变量都是链接地址,而位置相关跳转指令如LDR PC这一类的,同样采用链接地址。如果使用B BL这样的便宜地址指令跳转就不会去访问链接地址。,因为链接地址是绝对地址,偏移地址是相对地址。相对地址只和当前执行的地址有关,和链接地址无关。

     如果链接起始地址不是0 ,那么程序一开始从0 执行,遇到访问全局变量的时候就会去链接地址访问,遇到跳转绝对地址代码就会跳到链接地址去,在此之前如果没有重定位就会出错,重定位就是把代码搬到链接地址去执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值