链接地址——位置无关码

/**************************** makefile **************************/

led.bin: start.o led.o
        arm-linux-ld -T leds.lds -o led.elf start.o led.o                       //靠链接脚本来决定程序的地址和段的排放顺序
        arm-linux-objcopy -O binary led.elf led.bin
        arm-linux-objdump -D led.elf > led.dis

start.o : start.S
       arm-linux-gcc -o start.o start.S -c

led.o : led.c
       arm-linux-gcc -o led.o led.c -c

clean:
        rm *.o led.elf led.bin led.dis -f

 

 

/******************************** 链接脚本 ********************************/

SECTIONS                         //段   ( 排放)
{
  . = 0x50000000;               //当前地址(与.=0生成的反汇编码链接地址的区别,见对比)


  .text : {                                //段名称:text,data,bss任取名字
             start.o                     //放置整个start.o文件
              * (.text)                  
//放其他所有文件的.text代码段

            }
      
  .data : {
             * (.data)                 //放所有文件的数据段
             }


 /*bin文件不会包含bss段(否则会浪费内存空间),所以在程序启动之前将bss段所占内存清零(从bss起始清至bss结尾)*/
   bss_start = .;                    //bss段的起始地址(当前地址)
   .bss : {
               * (.bss)                 //放所有文件的bss段
               }
     bss_end  = .;                 //bss段的终止地址(当前地址)
}

bl,b:相对跳转(位置无关码)

bl  text:

 

ldr:绝对跳转(位置相关)

ldr  pc,=text

所以一开始程序还没处于链接地址上,又想跳转时,应用相对跳转指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值