5

Intel 64 and IA-32 Architectures Software Developer's Manual の Row F table A-4 Appendix A.3 Volume 2C (注文番号 326018-045US 2013 年 1 月) は、2 つの組み合わせのプレフィックス サブ行があるという点で一意です。プレフィックス: 0x66 および 0xF2。

これが関連する唯一のオペコードは 0x0F38F1 (CRC32) です。プレフィックス 0xF2 のみの場合、ソース オペランドは Ey (メモリまたは汎用レジスタ; 32 ビットまたは 64 ビット) であり、プレフィックス 0x66 と 0xF2 を合わせた場合、ソース オペランドは Ew (メモリまたは汎用レジスタ; 常に 16 ビット) です。

ただし、これらのソース オペランドは、0x66 が 2 つの必須プレフィックスの組み合わせの最初のプレフィックスではなく、単にオプションのオペランド サイズ オーバーライド プレフィックスである場合と同じです。実際、オプションのプレフィックスとしての 0x66 は、CRC32 命令がどのように文書化されているか (暗黙的に: 16 ビットと 32 ビットの両方のソース オペランドの同一のバイト シーケンス) で、Chapter 3.2 Volume 2A に記載されています。表で 0x66 および 0xF2 行を省略し、ソース オペランドを 0xF2 行の Ev (メモリまたは汎用レジスタ; 16 ビットまたは 32 ビットまたは 64 ビット) として文書化した可能性があるようです。

オペコード マップがオペコード 0x0F38F1 のソース オペランドをこのような独自の方法で文書化する理由はありますか?

編集:マニュアルのバージョンを追加

4

1 に答える 1

5

このオペコードは、Atom の命令と共有されMOVBEます。これは、すべての組み合わせでどのように見えるかだと思います:

0F 38 F1        movbe My, Gy
66 0F 38 F1     movbe Mw, Gw
66 F2 0F 38 F1  crc32 Gd, Ew
F2 0F 38 F1     crc32 Gd, Ey
F2 66 0F 38 F1  crc32 Gd, Ew

EDIT : 0F38 および 0F3A グループのほとんどのオペコードでは、66 プレフィックスは実際の命令を定義する必須のプレフィックスであり、通常のオペランド サイズのプレフィックスではありません。

長さが 4 バイトの 3 バイト オペコードは、必須のプレフィックス (66H、F2H、または F3H) と 2 つのエスケープ バイト (0F38H または 0F3AH) で始まります。4 番目のバイトの上位 4 ビットと下位 4 ビットは、表 A-4 または表 A-5 の特定の行と列にインデックスを付けるために使用されます。

そのため、オペランド サイズのオーバーライドという従来の役割で使用される追加のオプションの 66 プレフィックスの場合は、個別にリストする必要があります。

于 2013-05-28T14:30:48.087 に答える