关于bootloader链接脚本中的ALIGN关键字的解析

https://blog.csdn.net/btoh_workstation/article/details/27510869

 

最终结论:

1.ALIGN对齐在汇编文件中和链接脚本中都会涉及到:

     在汇编文件中,是伪操作 .align x 实现的:表示2的x次幂个字节对齐;

     在链接脚本中,ALIGN关键字:ALIGN(X)中的X表示多少个字节对齐。

2.X的取值也是有讲究的,必须是2的整数次幂。例如:填写1,2,4,8,16,32,64,....

3.在链接脚本当中,ALIGN主要是在程序链接时用来实现数据边界对齐功能:

     什么是边界对齐,怎样对齐呢?

     首先解释什么是边界对齐:

当有一块数据需要存放时,需要一个起始地址(存储空间的上边界),然后放数据,

放完后会有一个结束地址(存储空间的下边界);

     然后是该怎样对齐?一般情况,上边界都是给定的,但是下边如何确定呢?

先看ALIGN(X)是多少字节对齐,再看上边界,然后就可以确定下边界。

     下边界的确定有以下三种情况:

     (1).如果字节对齐数是ALIGN(X);并且上边界地址小于等于X,

           则下边界为:基地址+X

     (2).如果字节对齐数是ALIGN(X);并且上边界地址大于X,则下边界为:

   基地址+X*n  ;n为多少呢?n=(上边界地址尾数%X的除数)+1

     什么是基地址?其实是指链接脚本中最开始指定的地址的尾数变为零,

          例如:0x33e0_0008  ->  基地址就是:0x33e0_0000

                0x33e0_00F5  ->  基地址就是:0x33e0_00F0

PS:

ALIGN(X)中的X最好是大于等于4,因为32位的处理器最小就是4字节对齐;

如果X赋值为1,2,则也是使用的默认4字节对齐。
————————————————
版权声明:本文为CSDN博主「btoh_workstation」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/btoh_workstation/article/details/27510869

posted on 2020-01-13 17:04  Red_Point  阅读(1857)  评论(0)    收藏  举报

导航