“.align”指令在x86-64汇编中意味着什么?

时间:2013-06-25 19:15:34

标签: assembly x86 x86-64 cpu-architecture computer-architecture

我注意到有一些指令与.align前缀一起使用后跟数值。

我不确定这是什么,也不确定是否有必要使用,但我已经编写了x86 Assembly并且之前从未使用过“.align”。

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

1 个答案:

答案 0 :(得分:10)

来自the MSDN entry for the ALIGN directive(使用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
 ....   | ....