RESB、RESW、RESD、RESQ在NASM中分配多少字节? [复制]
Posted
技术标签:
【中文标题】RESB、RESW、RESD、RESQ在NASM中分配多少字节? [复制]【英文标题】:How many bytes do RESB, RESW, RESD, RESQ allocate in NASM? [duplicate] 【发布时间】:2017-12-05 05:07:03 【问题描述】: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不支持MASM/TASM写DW预留未初始化空间的语法?或类似的东西:这就是它 相反。 RESB 类型伪指令的操作数是 批判性表达:见第 3.8 节。
例如:
缓冲区:resb 64;保留 64 字节
wordvar: resw 1 ;留个言
realarray req 10 ;十个实数数组
ymmval: resy 1 ;一个 YMM 寄存器
zmmvals: resz 32 ; 32个ZMM寄存器
【问题讨论】:
是的,你是对的。这些文档对我来说似乎很清楚。 你需要想想你写了什么。RESB 64
明确表示“保留 64 个长度为 1 字节的东西”
@David Hoelzer 是的,我注意到了这一点,但文档只清楚地说明了 resb
而不是其余的。
我不确定文档有什么不清楚的地方。你不知道他们说“词”是什么意思吗?本节应在阅读the previous section之后阅读,因为它使用相同的类型后缀。
【参考方案1】:
我说的对吗?
是的。
对于d*
和res*
,整个NASM 的大小后缀是一致的。它们将字节到 qword 的 x86 指令助记符后缀匹配。 (例如 psubd
与打包的 dword 元素一起使用)。
甚至还有一个使用o
(八进制字)的指令助记符:cqo
。
y 和 z 大小后缀显然与 ymm 和 zmm 寄存器大小匹配,即使指令助记符现在由于 AVX512 屏蔽粒度而类似于 VBROADCASTI32X8
。
【讨论】:
嗯,或多或少是一致的。英特尔偶尔会提出一些愚蠢和令人困惑的术语,例如dq
(双四边形)单词而不是 owords。 rest
保留十个 bytes 而不是 pentaword 。尽管如此,在这种情况下,我还是建议检查清单和/或调试器以查看实际结果。
@doynax:这就是为什么我说它匹配到 qword 的助记符,因为 movdqa/u
、movntdq/dqa
和有趣的名字 punpckhqdq
(解压 qword 到 dqword)等等。或cmpxchg16b
。英特尔的文档从未将m80
x87 操作数称为 TBYTE 或 penta-word 或类似的东西,如果他们命名的话,他们只会说 80 位。或者例如"18-digit packed BCD integer".
其他相关:What are the sizes of tword, oword and yword operands? / What comes after QWORD?以上是关于RESB、RESW、RESD、RESQ在NASM中分配多少字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
源码学习成功运行RESD代码及踩坑记录 - Pytorch版
文献总结RESD:Role-based network embedding via structural features reconstruction with degree-regulariz