RESB,RESW,RESD,RESQ在NASM中分配多少字节?

时间:2017-07-01 10:42:10

标签: assembly x86 nasm

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寄存器

1 个答案:

答案 0 :(得分:5)

  

我说错了吗?

对于d*res*,整个NASM的大小后缀是一致的。它们将字节与xword的x86指令助记符后缀相匹配。 (例如psubd使用压缩的双字元素。)

甚至还有使用o(oct-word)的指令助记符:cqo

y和z大小后缀显然与ymm和zmm寄存器大小匹配,即使指令助记符现在像VBROADCASTI32X8那样因为AVX512屏蔽粒度。