什么是TWORD,oword和yword操作数的大小?(What are the sizes of

2019-06-27 05:29发布

什么是大小twordowordyword操作数,如使用NASM / YASM手册 ? 而与此相关的,是有没有什么窍门或潜在的想法,这些名字? 是否有通过更大的字长规定的逻辑名称的方式?

我知道,虽然字大小可以系统之间是不同的,一个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

Answer 1:

看着TFS ,它看起来像:

  • 'oword'/ 'DO'是8倍大“字”(O ctoword),代名词dqword( “双四”); 这将是128位,对应于SSE向量寄存器的大小。
  • “TWORD” /“DT”是80位(T对于t烯字节),英特尔的x87浮点寄存器的全尺寸。
  • “yword” /“DY”是256个比特,和Y是用于在Intel AVX扩展256位向量寄存器的YMM名字推测助记符。
  • 'zword'/ 'DZ' 是512位,Z为在Intel AVX-512的扩展的512位向量寄存器的ZMM名称。

因此,不完全是一个合乎逻辑的命名约定。



Answer 2:

源代码和经验:我已经与NASM两种方法检查它。

源代码

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

然后:

git grep -C2 tword

我们制住 :

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 menemonic

对于ZMM通过AVX-512加入寄存器: https://en.wikipedia.org/wiki/AVX-512

我不知道英特尔将尽的时候,字母结束的字母。



文章来源: What are the sizes of tword, oword and yword operands?