我正在学习x86,我正在试图找出.align指令的作用以及它如何有用。
.align指令导致生成的下一个数据对齐 模数整数字节。整数必须是正整数表达式 并且必须是2的幂。如果指定,pad是整数字节值 用于填充。文本部分的pad的默认值是 0x90(nop);对于其他部分,pad的默认值为零(0)。
但我不确定这意味着什么。您是否可以参考我可以阅读更多相关内容或通过示例简要解释一下?
答案 0 :(得分:8)
理解它的作用的关键是理解它为什么存在。
所有计算机都有一个称为 wordsize 的自然边界。该边界通常为4字节或8字节。
如果4和8字节值位于这些边界上,则CPU可以更快地从内存加载和存储,而不会浪费缓存空间。某些类型的CPU 根本无法获取未对齐的值。
因此,汇编器中必须有一个跳转到下一个边界的机制,以便标签和存储分配指令可以从更高效的地址开始。
有关说明,奇数边界适用于大多数计算机,但它们仍会影响性能并浪费缓存空间。
.string "ab\0"
; this next address is 3
VS
.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"