所以我试图找出的大小zword,并yword当我偶然发现这是很有帮助的线程其中有各种规模的名单,但有一两件事让我感到困惑。它在编辑中说 atword是 10 个字节,但这对我来说没有意义。一个字是两个字节,所以一个tword字应该是 10 个字,也就是 20 个字节,不是吗?我发现更奇怪的是 anoword确实是 8 个字/16 字节,所以 anoword实际上比 a 大tword。这种奇怪的命名选择有什么解释吗?
在 NASM 中,所有大于 1 字节的东西都是*WORD,例如yword对于 YMM 向量的大小。(@Michael 在评论中指出了这一点;对我来说听起来像是一种有意的模式。)
这导致了TWORD一个由单词组成的十字节东西的愚蠢名称?不要想太多把这个名字分解成它的部分,但如果你忍不住的话,这可能是你最好的选择。
TBYTEMASM / TASM(以及.intel_syntax根据 的GAS使用objdump -drwC -Mintel)作为一个有意义的/合理的名称更有意义。NASM 当然希望名称中有一个 T,以便与现有的汇编器保持一致。
或者,@fuz 建议T代表 "temporary",因为 x87 的额外精度与 IEEE binary64 的主要预期用例double是计算期间的临时文件。通常(对于那个用例)它们可以只存在于寄存器中,但有时您可能想要溢出它们。当然,你可以用它们作为long double扩展精度(显著)更糟糕的加载/存储性能比double,或在该格式的常量。另请参阅 Bruce Dawson 的中级浮点精度文章,了解更多真实世界的 x87 和编译器内容,这是优秀系列的一部分。
NASM 有像resb/ resd/ rest/ ... / 这样的指令来保留空间(用于 BSS),和db/ dd/ dt/ .... 它们只有 1 个字符表示大小,除了 Byte 和 Word 之外,它基本上是一个大小代码. 与 MASM 不同的是,没有DWORD指令可以替代DD,因此“尺寸代码”相对更重要,并且它所坚持的东西更加规范化。
当然,NASM 确实必须将 BYTE 和 WORD 解析为操作数大小的代码,因此很难想象 TBYTE 实际上会使解析器难以编写或维护。(正如问题中链接的问答中的一个答案所示,反汇编器或 NASM 中的某些东西有一个开关,其中每个字符串都是完全分开的,而不是%cWORD大小 > 2,但解析仍然可能不同。)
这似乎是NASM 设计师想要坚持这种模式背后的合理理论*WORD,但我没有关于它的信息,也没有去寻找任何邮件列表文档。IDK 如果 NASM 是在公共场合合作设计的,或者它几乎是原作者。无论哪种方式,我都猜测在设计语法的早期对某人来说似乎是个好主意。
FASM 显然支持相同大小的 TBYTE 和 TWORD 名称,但 NASM仅支持 TWORD。向语言添加一个新的保留/特殊关键字可能会破坏向后兼容的代码,这些代码不明智地使用 TBYTE 作为符号名称,或者 NASM 开发人员甚至根本不想改变。
| 归档时间: | 
 | 
| 查看次数: | 97 次 | 
| 最近记录: |