4 x86 assembly x86-64 cpu-architecture computer-architecture
我注意到有一些指令与.align前缀一起使用后跟数值.
我不确定这是什么,也不确定它是否有必要使用,但我已经写过x86 Assembly并且之前从未使用过".align".
它的基本目的是什么,为什么或为什么不是强制性的?
Bre*_*ugh 11
从ALIGN指令的MSDN条目(使用MASM):
ALIGN [[number]]
Aligns the next variable or instruction on a byte that is a multiple of number.
Run Code Online (Sandbox Code Playgroud)
这通常用于优化存储器中的结构布局,因为所有新的x86架构都具有超过8位的字长(通常为32位或64位).这意味着在单个内存位置,您可以存储4或8个字节的数据.
如果您要使用4或8作为对齐字节大小,它将确保要组装的下一个字节将放置在多个4或8的字节位置,对应于此示例中的机器字长(其他对齐值通常是根据您的应用有用).
例如,组装以下文件(伪造语法):
org $0x00
db $0x01
db $0x02
.align 4
db $0x03
Run Code Online (Sandbox Code Playgroud)
它将确保将其0x03放置在4的任意整数倍的地址上(包括零!).汇编程序将从以下字节开始吐出以下字节$0x00:
Address | Data
---------------
0x00 | 01
0x01 | 02
0x02 | XX/00
0x03 | XX/00
0x04 | 03
.... | ....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6359 次 |
| 最近记录: |