".align指令是用来做什么的?"

5

我正在学习x86,想知道.align指令的作用以及它如何有用。

Oracle参考手册中说:

.align指令使下一个生成的数据对整数字节取模对齐。Integer必须是正整数表达式,且必须是2的幂。如果指定了pad,则pad是用于填充的整数字节值。文本段的pad默认值为0x90(nop);其他段的pad默认值为零(0)。

但我不确定它是什么意思。你能否提供更多关于它的阅读材料或简要说明并举例说明?

1个回答

11
理解它的作用的关键在于理解它存在的原因。
所有计算机都有一个自然界限,称为字长。这个界限通常是4字节或8字节。
如果4字节和8字节的值位于这些边界上,CPU可以更快地从内存中加载和存储,而不浪费缓存空间。某些类型的CPU根本无法提取未对齐的值。
因此,汇编语言中必须有一种机制来跳到下一个边界,以便标签和存储分配指令可以从更高效的地址开始。
对于指令而言,在大多数计算机上,奇数边界可以工作,但仍会影响性能并浪费缓存空间。
   .string "ab\0"
; this next address is 3

对抗

    .string "ab\0"
    .align 4 # sometimes interpreted as 2**n, so, .align 2
; this next address is 4, and would still be 4 if the string was just "a"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接