word、word 和 y word 操作数的大小是多少?

Posted

技术标签:

【中文标题】word、word 和 y word 操作数的大小是多少?【英文标题】:What are the sizes of tword, oword and yword operands? 【发布时间】:2012-08-17 07:53:12 【问题描述】:

NASM/YASM manual 中使用的twordowordyword 操作数的大小是多少?在相关的说明中,这些名称是否有技巧或潜在的想法?有没有办法给更大的字长赋予逻辑名称?

我知道虽然系统之间的字长可能不同,但 NASM word 是 2 个字节,dword 是它的两倍(4 个字节),qword 是一个四字(8 个字节),但是... tword三个字(6 个字节)吗?对于owordyword,我什至想不出一个合理的含义。

请注意,这可能是一个简单的问题,但我找不到答案。在 NASM 和 YASM 手册中没有解释这些大小,甚至在 DQDTDYRESQRESTRESY 伪指令中也没有解释。我在某处读到 MASM 使用类似的系统,但也找不到任何东西。


编辑:根据答案,这是完整列表:

1 字节(8 位):byteDBRESB 2 字节(16 位):wordDWRESW 4 字节(32 位):dwordDDRESD 8 字节(64 位):qwordDQRESQ 10 字节(80 位):twordDTREST 16 字节(128 位):owordDORESODDQRESDQ 32 字节(256 位):ywordDYRESY 64 字节(512 位):zwordDZRESZ

【问题讨论】:

【参考方案1】:

看the nasm source,是这样的:

'oword'/'DO'是“word”的8倍(O代表“octoword”),与dqword(“double-quad”)同义;这将是 128 位,对应于 SSE 向量寄存器的大小。 'tword'/'DT' 为 80 位(T 表示“ten 字节”),是 Intel x87 浮点寄存器的完整大小。 'yword'/'DY' 是 256 位,Y 可能是英特尔 AVX 扩展中 256 位向量寄存器的 YMM 名称的助记符。 'zword'/'DZ' 是 512 位,Z 代表英特尔 AVX-512 扩展中 512 位向量寄存器的 ZMM 名称。

所以,这不完全是一个合乎逻辑的命名约定; “它刚刚长大”。

【讨论】:

这是我第一次知道YWORD (DY?)。它是 NASM/YASM 还是英特尔特定的(即:不是或还不是标准)? 128 位数据还有其他关键字吗? 不知道,可能不是标准的。对于 NASM,DO == DDQ,OWORD == DQWORD @Jay:这是 NASM 的事情。 (MASM 和 gas .intel_syntax 对内存操作数大小覆盖使用类似的命名约定,例如 vmovdqa ymmword ptr [rdi], ymm0。您通常只会在反汇编输出中看到这一点;我想不出内存操作数宽度不明确的情况向量指令,因为至少有一个操作数总是一个寄存器。) o 被英特尔用于cqo,但向量指令使用dq 而不是o(例如punpckhqdq)。另见my answer on a recent duplicate of this question【参考方案2】:

我用 NASM 的两种方法对其进行了检查:源代码和经验。

源代码

来源:http://repo.or.cz/w/nasm.git

然后:

git grep -C2 tword

我们fall upon:

switch (size) 
case 1:
    return "byte";
case 2:
    return "word";
case 4:
    return "dword";
case 8:
    return "qword";
case 10:
    return "tword";
case 16:
    return "oword";
case 32:
    return "yword";
case 64:
    return "zword";
default:
    return "???";

经验

git log -pgit tag --contains 告诉我 zword 是在 2.11 中添加的,由于我在 2.10 并且懒惰,所以我将省略那个。

在我们的.asm 文件中:

section .bss
resb1 resb 1
resw1 resw 1
resq1 resq 1
rest1 rest 1
reso1 reso 1
resy1 resy 1
; Just to read the objdump better.
resb2 resb 1

然后编译:

objdump -D -j .bss main.o

给予:

00000000 <resb1>:
    ...

00000001 <resw1>:
    ...

00000003 <resd1>:
3:  00 00                   add    %al,(%eax)
    ...

00000007 <resq1>:
    ...

0000000f <rest1>:
    ...

00000019 <reso1>:
    ...

00000029 <resy1>:
    ...

00000049 <resb2>:
    ...

如果我们取每个位置之间的差异,我们会得出与之前相同的结论。

zword 记忆法

对于 AVX-512 添加的 ZMM 寄存器:https://en.wikipedia.org/wiki/AVX-512

我想知道当字母表中的字母结束时英特尔会做什么。

【讨论】:

以上是关于word、word 和 y word 操作数的大小是多少?的主要内容,如果未能解决你的问题,请参考以下文章

如何把A4的word文档,用A5大小的纸张打印出来,

C# 如何操作一个已经打开的word文档里的表格

C#操作Word的超详细总结

word中操作,调整页面的高度和宽度,是否就是指 调整纸张大小?

数据结构作业——word(栈)

怎样批量设置word文档里图片大小