伪指令 .align 的含义
伪指令 .align 的作用是在编译时指示编译器填充位置计数器(类似指令计数器)到一个指定的内存边界处,目的是为 了提高 CPU 访问内存中代码或数据的速度和效率。其完整格式为:
.align val_1 , val_2, val_3
其中第 1 个参数值 val_1 是所需要的对齐值;第 2 个是填充字节的值,填充值可以省略,若省略则编 译器使用 0 值填充。第 3 个用来指明最大用于填充或跳过的字节数。如果进行边界对齐会超过 val_3 指定的最大字节数,那么就根本不进行对齐操作。如果需要省略第 2 个参数 val_2 但还是需要使用第 3 个参数 val_3 ,那么只需要放置两个逗号即可。
对于现在使用 ELF 目标格式的 Intel 80X86 CPU ,第 1 个参数 val_1 是需要对齐的字节数。例如, .align 8
表示调整位置计数器,让它在 8 的倍数边界上。如果已经在 8 的倍数边界上,那么编译器就不用改
变了。
但对于 Linux 0.11 中使用 a.out 目标格式的系统来说,第 1 个参数 val_1 是指定对齐到 2 的 val_1 次方。例如前面程序 .align 3
就表示位置计数器需要位于 8 的倍数边界上。
gas(GNU as) 对 ELF 和 a.out 这两个目标格式的处理方法不同是由于 gas 为了模仿各种体系结构系统上自带的汇编器的行为而形成的。
参考资料
《Linux内核完全剖析》(赵炯,机械工业出版社,2006)
还没有评论,来说两句吧...