伪指令 .align 的含义

ゝ一世哀愁。 2023-02-22 05:18 71阅读 0赞

伪指令 .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)

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读

    相关 伪指令 .align 含义

    伪指令 .align 的作用是在编译时指示编译器填充位置计数器(类似指令计数器)到一个指定的内存边界处,目的是为 了提高 CPU 访问内存中代码或数据的速度和效率。其完整格式为

    相关 [汇编]伪指令(二)

    \[汇编\]伪指令(二) 数据定义及存储器分配伪指令   80x86提供了各种数据及存储器分配伪指令,这些伪指令在汇编程序对源程序进行汇编期间,由汇编程序完成数据类

    相关 [汇编]伪指令(一)

    \[汇编\]伪指令(一)  段定义伪指令     段定义伪指令是表示一个段开始和结束的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪

    相关 ORG 伪指令

    汇编地址计数器 汇编地址计数器用符号$表示,它用来记录正在被汇编程序翻译的语句的地址,即它的内容标示了汇编程序当前的工作位置。 在一个源程序中往往包含多个段。汇编程序在

    相关 arm开发-伪指令

    伪指令 与指令系统的助记符不同,它没有对应的操作码。 伪指令在源程序中的作用是为完成汇编程序作各种准备工作,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了

    相关 pragma伪指令

    pragma伪指令 通过pragma伪指令告诉编译器如何对待特定的函数、对象或代码段。TMS320C28x C/C++编译器支持如下形式的pragma伪指令:   CODE

    相关 Arm伪指令

    伪指令不是指令,伪指令和指令的根本区别是经过编译后会不会生成机器码。 伪指令的意义在于指导编译过程。 伪指令是和具体的编译器相关的,我们使用gun工具链,因此学习gun环境