33

NASM / YASM マニュアルtwordで使用されている、owordおよびywordオペランドのサイズは? それに関連して、これらの名前にはトリックや根底にあるアイデアはありますか? より大きなワードサイズに論理名を付ける方法はありますか?

ワード サイズはシステム間で異なる場合がありますが、NASMwordは 2 バイトで、dwordその 2 倍 (4 バイト) でqword、クワッド ワード (8 バイト) ですが、...twordトリプルワード(6 バイト) ですか? そしてowordyword私はもっともらしい意味さえ考えられません。

おそらく簡単な質問ですが、答えが見つかりませんでした。NASM および YASM のマニュアルでは、これらのサイズは説明されておらず、 、 、 、 、疑似命令でも説明さDQDTDYRESQませRESTRESY。MASMが同様のシステムを使用していることをどこかで読みましたが、それについても何も見つかりませんでした.


編集:回答に基づいて、これは完全なリストです:

  • 1 バイト (8 ビット): byteDBRESB
  • 2 バイト (16 ビット): wordDWRESW
  • 4 バイト (32 ビット): dwordDDRESD
  • 8 バイト (64 ビット): qwordDQRESQ
  • 10 バイト (80 ビット): twordDTREST
  • 16 バイト (128ビット) : oword、、、、DORESODDQRESDQ
  • 32 バイト (256 ビット): ywordDYRESY
  • 64 バイト (512 ビット): zwordDZRESZ
4

2 に答える 2

20

nasm sourceを見ると、次のようになります。

  • 'oword'/'DO' は、"word" (" o ctoword" の O) の 8 倍の大きさであり、dqword ("double-quad") と同義です。これは、SSE ベクトル レジスタのサイズに対応する 128 ビットになります。
  • '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 の 2 つのアプローチ (ソース コードと経験的) で確認しました。

ソースコード

ソース: 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 -pそれは 2.11 で追加されたことをgit tag --contains教えてください。私zwordは 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>:
    ...

それぞれの立場の違いを取ると、以前と同じ結論に達します。

ズワード・メネモニック

ZMMAVX-512 によって追加されたレジスタの場合: https://en.wikipedia.org/wiki/AVX-512

アルファベットの文字が終わったらインテルはどうするのだろう。

于 2015-04-26T13:41:05.703 に答える