4

我正在学习 x86,并且试图弄清楚 .align 指令的作用以及它的用途。

Oracle参考手册说:

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

但我不确定这意味着什么。您是否可以参考我可以在哪里阅读更多相关信息或通过示例简要说明?

4

1 回答 1

9

理解它的作用的关键是理解它为什么存在。

所有计算机都有一个称为wordsize的自然边界。此边界通常为 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"
于 2013-01-27T05:11:13.413 回答