汇编器指令在编译时起作用,用来控制汇编器的操作,不属于 CPU 指令集,因此称为伪指令。
下面例举汇编器指令可以做的部分事情:
1)为汇编器值指明程序的开始和结束位置
2)为数据提供存储位置
3)为变量赋值
4)定义不同段的开始和结束位置,在程序中定义宏等等。
下面介绍几个 x86 汇编器支持的指令
.align integer, pad
指明下一个生成的数据以模 integer 为对齐,其中 integer 必须要是 2 的幂,pad 用来指明填充的内容,对于 text section,是 0x90(nop),对于其他 section 是 0。
.bss
将当前 section 改为 .bss。
.byte byte1, byte2, ..., byteN
在当前 section 生成 N 个已初始化的字节,对 .bss section 无效。
.data
将当前 section 改为 .data
.double float
在当前 section 生成一个 double 精度的浮点数,对 .bss section 无效。
.global symbol1, symbol2, ..., symbolN
定义 N 个全局符号。
.ident "string"
在 .comment section 生成一个包含 "string" 的项。
.local symbol1, symbol2, ..., symbolN
定义 N 个局部符号
.popsection
将当前 section stack 中的栈顶 section 弹出,并继续处理被弹出的 section。
.pushsection section
将 section 推入当前 section stack 的栈顶,并将当前 section 改为 section。
.section section, attributes
将当前 section 设置为 section。
参考资料:
1. https://electronicsdesk.com/assembler-directives.html
2. https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg.html