33

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

我知道虽然系统之间的字长可能不同,但 NASMword是 2 个字节,dword是两倍(4 个字节),qword是一个四字(8 个字节),但是......是tword一个三字(6 个字节)?而且我什owordyword想不出一个似是而非的意思。

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


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

  • 1 字节(8 位):byte, DB,RESB
  • 2 个字节(16 位):word, DW,RESW
  • 4 字节(32 位):dword, DD,RESD
  • 8 字节(64 位):qword, DQ,RESQ
  • 10 字节(80 位):tword, DT,REST
  • 16 字节(128 位):oword, DO, RESO, DDQ,RESDQ
  • 32 字节(256 位):yword, DY,RESY
  • 64 字节(512 位):zword, DZ,RESZ
4

2 回答 2

20

查看nasm 源代码,它看起来像:

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

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

于 2012-08-21T22:31:47.803 回答
10

我用 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 记忆法

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

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

于 2015-04-26T13:41:05.703 回答