[DB
分配1字节的块。
[DW
分配2字节的块。
[DD
分配4字节的块。
[DQ
分配8字节的块。
所以我认为:
[RESB 1
分配1个字节。
[RESW 1
分配2个字节。
[RESD 1
分配4个字节。
[RESQ 1
分配8个字节。
我正确吗?
documentation不多说:
3.2.2 RESB和朋友:声明未初始化的数据
RESB,RESW,RESD,RESQ,REST,RESO,RESY和RESZ被设计为 在模块的BSS部分中使用:它们声明未初始化 储存空间。每个都采用一个操作数,即 字节,字,双字或任何保留字。如本节所述 2.2.7,NASM不支持通过编写DW?保留未初始化空间的MASM / TASM语法。或类似的东西:这就是它 相反。 RESB型伪指令的操作数是 批判性表达:请参见3.8节。
例如:
buffer:resb 64;保留64个字节
wordvar:resw 1;保留一个字
realarray resq 10;十个实数的数组
ymmval:resy 1;一个YMM寄存器
zmmvals:resz 32; 32个ZMM寄存器
我正确吗?
是。
大小后缀在整个NASM中对于d*
和res*
是一致的。它们将x86指令助记符后缀与字节到qword相匹配。 (例如psubd
适用于打包的dword元素。
甚至还有使用o
(八字)的指令助记符:cqo
。
y和z大小的后缀显然与ymm和zmm寄存器的大小匹配,即使由于AVX512屏蔽粒度,指令助记符现在类似于cqo
。