【问题标题】:How many bytes do RESB, RESW, RESD, RESQ allocate in NASM? [duplicate]RESB、RESW、RESD、RESQ在NASM中分配多少字节? [复制]
【发布时间】: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之后阅读,因为它使用相同的类型后缀。

标签: assembly x86 nasm


【解决方案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".
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 2020-03-12
  • 2016-03-20
  • 2015-01-31
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多