我注意到有一些指令与 .align 前缀后跟数值一起使用。
我不确定这是什么,甚至是否有必要使用,但我已经编写了 x86 程序集并且以前从未使用过“.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 个字节的数据。
如果你使用4
or8
作为你的对齐字节大小,它将确保下一个要组装的字节将被放置在多个 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
.... | ....