x86-64 汇编中的 ".align" 指令是什么意思?



我注意到有些指令使用的前缀是.align,后面跟着数值。

我不确定这是什么,也不确定是否有必要使用,但我写过x86汇编,以前从未使用过".align"。

它的基本目的是什么,为什么或为什么不强制执行?

从ALIGN指令的MSDN条目(使用MASM):

ALIGN [[number]]
Aligns the next variable or instruction on a byte that is a multiple of number.

这通常用于优化内存中的结构布局,因为所有新的x86体系结构的字长都超过8位(通常为32或64位)。这意味着在单个内存位置中,可以存储4或8个字节的数据。

如果使用48作为对齐字节大小,则可以确保要组装的下一个字节将放置在4或8的倍数的字节位置,与本例中的机器字长相对应(其他对齐值通常很有用,具体取决于您的应用程序)。


例如,组装以下文件(组成语法):

org $0x00
db  $0x01
db  $0x02
.align 4
db  $0x03

它将确保0x03被放置在4的任意整数倍(包括零!)的地址上。汇编程序将从$0x00开始吐出以下字节:

Address | Data
---------------
 0x00   |  01
 0x01   |  02
 0x02   | XX/00
 0x03   | XX/00
 0x04   |  03
 ....   | ....

最新更新