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类型伪指令的操作数是a 关键表达:见3.8节。
例如:
缓冲区:resb 64;保留64字节
wordvar:resw 1;保留一个字
realarray resq 10;十个实际的阵列
ymmval:resy 1;一个YMM注册
zmmvals:resz 32; 32 ZMM寄存器
答案 0 :(得分:5)
我说错了吗?
是
对于d*
和res*
,整个NASM的大小后缀是一致的。它们将字节与xword的x86指令助记符后缀相匹配。 (例如psubd
使用压缩的双字元素。)
甚至还有使用o
(oct-word)的指令助记符:cqo
。
y和z大小后缀显然与ymm和zmm寄存器大小匹配,即使指令助记符现在像VBROADCASTI32X8
那样因为AVX512屏蔽粒度。