发布于 ,更新于 

AT&T 汇编伪指令说明

AT&T 汇编伪指令说明

.globl 或者 .global

.globl / .global 伪指令将符号定义为全局可链接的,跨文件可以访问的符号。

1
.globl  label_name

.extern

.extern 定义外部符号

1
.extern  label_name

.comm.lcomm

.comm 定义 COMM (未初始化变量)类型的全局符号; .lcomm 定义 COMM (未初始化变量)类型的局部符号

1
2
3
#.comm/.lcomm 符号名, 大小
.comm label_name, 8
.lcomm label_name, 16

.weak

.weak 伪指令将符号定义为弱类型,其他同名符号存在是,应该优先采用其他强类型的符号。

1
.weak  label_name

.hidden

.hidden 伪指令将符号定义为隐藏属性。该符号为全局符号,但是对于 elf 文件来说,不暴露处理。加上此属性的符号,在生成的 .so 文件中,其他模块是找不到该符号的。

1
.hidden  label_name

.type

.type 伪指令指明符号的类型,可以取值:object 或者 function。object 表示数据,function 表示函数。

1
2
.type	var1, @object
.type function_1, @function

.size

.size 伪指令指明符号的占用空间的大小

1
.size	var1, 4

.align

.align 指出紧跟的数据或者代码要求的对齐值。

1
.align 4

.zero

填充多少个0

1
.zero	4

.rept.endr

用来重复汇编语句块,例子:

1
2
3
4
5
6
7
.rept   3
.long 100
.endr
# 相当于如下重复了 3 次
.long 100
.long 100
.long 100

.space

填充产生多个重复字节的值:

1
2
3
# .space size, fill
.space 100, 2 # 100 个 2
.space 200 # 200 个 0,不指定值则默认为 0