Assembly 在NASM中RESB、RESW、RESD、RESQ分配多少字节?
Assembly 在NASM中RESB、RESW、RESD、RESQ分配多少字节?,assembly,x86,nasm,Assembly,X86,Nasm,DB以1字节为单位进行分配 DW以2字节为单位进行分配 DD以4字节为单位进行分配 DQ以8字节为单位进行分配 因此,我假设: RESB 1分配1个字节 RESW 1分配2个字节 RESD 1分配4个字节 RESQ 1分配8个字节 我说得对吗 报告没有说太多: 3.2.2 RESB和朋友:声明未初始化的数据 RESB、RESW、RESD、RESQ、REST、RESO、RESY和RESZ设计为: 用于模块的BSS部分:它们声明未初始化 存储空间。每个都接受一个操作数,即 字节、字、双字或任何要保
DB
以1字节为单位进行分配
DW
以2字节为单位进行分配
DD
以4字节为单位进行分配
DQ
以8字节为单位进行分配
因此,我假设:
RESB 1
分配1个字节
RESW 1
分配2个字节
RESD 1
分配4个字节
RESQ 1
分配8个字节
我说得对吗
报告没有说太多: 3.2.2 RESB和朋友:声明未初始化的数据 RESB、RESW、RESD、RESQ、REST、RESO、RESY和RESZ设计为: 用于模块的BSS部分:它们声明未初始化 存储空间。每个都接受一个操作数,即 字节、字、双字或任何要保留的内容。如第节所述 2.2.7,NASM不支持通过写入DW来保留未初始化空间的MASM/TASM语法?或者类似的事情:这就是它 相反,它是这样做的。RESB类型伪指令的操作数是 临界表达式:见第3.8节 例如: 缓冲区:resb64;保留64字节 wordvar:resw1;保留一句话 realarray resq 10;十实数组 ymmval:resy1;一个YMM寄存器 zmmvals:resz32;32 ZMM寄存器 我说得对吗 对 对于
d*
和res*
,大小后缀在整个NASM中是一致的。它们匹配x86指令助记符后缀,表示字节到qword。(例如,psubd
与压缩dword元素一起工作)
甚至还有一种指令助记符使用o
(oct-word):
y和z大小后缀显然与ymm和zmm寄存器大小相匹配,尽管由于AVX512掩蔽粒度,指令助记符现在类似。是的,您是正确的。这些文件对我来说似乎很清楚。你需要想想你写了什么
RESB 64
明确表示“保留64个长度为1字节的内容”@David Hoelzer是的,我注意到了,但文档只清楚地说明了RESB
而没有说明其他内容。我不确定文档中有什么不清楚的地方。你不知道他们说“单词”是什么意思吗?这一节是为了在阅读后阅读,因为它使用了相同的类型后缀。嗯,或多或少是一致的。英特尔偶尔会想出一些愚蠢而令人困惑的术语,比如dq
(双四元组)单词而不是单字rest
保留十个字节,而不是一个五字。尽管如此,我还是主张检查列表和/或调试器以查看本例中的实际结果。@doynax:这就是为什么我说它将助记符匹配到qword,因为movdqa/u
,movntdq/dqa
,以及有趣的名称punpckhqdq
(将qword解包到dqword),等等。或cmpxchg16b
。英特尔的文档从来没有将m80
x87操作数称为TBYTE或penta字或诸如此类的东西,如果他们命名的话,他们只会说80位。或例如。也与以下内容相关:/