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/umovntdq/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中分配多少字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

x86 ASM Linux - 使用 .bss 部分

设计时的 UWP 资源字符串 (.resw)

源码学习成功运行RESD代码及踩坑记录 - Pytorch版

浮点异常(Core Dumped)在汇编时进行除法

win10 uwp 读取resw资源文件

文献总结RESD:Role-based network embedding via structural features reconstruction with degree-regulariz