NASM中DY、DZ伪指令的工作机制及zmm寄存器零值声明方法
DY、DZ伪指令机制及64字节零值声明方案
DY、DZ基本工作规则
- 属于NASM的Dx类初始化数据声明伪指令,
DY对应256位(32字节)数据单元,匹配YMM寄存器位宽;DZ对应512位(64字节)数据单元,匹配ZMM寄存器位宽,二者要求NASM 2.14及以上版本支持 - 正如官方文档说明:
DB、DW、DD、DQ、DT、DO、DY和DZ(本文档中统称“Dx”类指令)的用法与MASM中类似,用于在输出文件中声明已初始化数据,支持多种调用方式:……DT、DO、DY、DZ不接受整数数值常量作为操作数。
- 二者支持的合法操作数包括:字符串常量、浮点数值常量、
DUP重复声明语法,操作数会自动扩展对齐到对应位宽填充
64字节零值数据的实现方案
方案1:使用DZ伪指令(匹配ZMM位宽,语义更明确)
由于DZ不支持整数常量,可通过浮点零常量或DUP语法实现:
; 写法1:直接传入浮点零,自动扩展为64字节零值 dz 0.0 ; 写法2:使用DUP语法,兼容性更强 dz 1 DUP(0.0)
方案2:通用兼容写法(适用于所有NASM版本)
如果需要兼容不支持DZ的旧版本NASM,可直接使用times前缀配合db声明:
times 64 db 0
两种方案生成的二进制数据完全一致,均为连续64字节的零值,可直接适配ZMM寄存器的读写操作。
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

