x86命令リスト


X86_instruction_listings

x86 命令セットは、という命令のセットを指したx86互換マイクロプロセッサがサポートされています。命令は通常、実行可能プログラムの一部であり、多くの場合、コンピューターファイルとして保存され、プロセッサー上で実行されます。
x86命令セットは数回拡張され、より幅広いレジスタとデータ型、および新しい機能が導入されました。

コンテンツ
1 x86整数命令
1.1 元の8086/8088の説明 1.2 特定のプロセッサに追加
1.2.1 80186/80188で追加
1.2.2 80286で追加
1.2.3 80386で追加
1.2.4 80486で追加
1.2.5 Pentiumで追加
1.2.6 PentiumMMXで追加
1.2.7 AMDK6で追加
1.2.8 PentiumProで追加
1.2.9 PentiumIIで追加
1.2.10 SSEで追加
1.2.11 SSE2で追加
1.2.12 SSE3で追加
1.2.13 SSE4.2で追加
1.2.14 x86-64で追加
1.2.15 AMD-Vで追加
1.2.16 IntelVT-xで追加
1.2.17 ABMで追加
1.2.18 BMI1で追加
1.2.19 BMI2で追加
1.2.20 TBMで追加
1.2.21 CLMUL命令セットで追加
1.2.22 IntelADXで追加
2 x87浮動小数点命令
2.1 元の8087の説明 2.2 特定のプロセッサに追加
2.2.1 80287で追加
2.2.2 80387で追加
2.2.3 PentiumProで追加
2.2.4 SSEで追加
2.2.5 SSE3で追加
3 SIMDの説明
3.1 MMXの説明
3.1.1 オリジナルのMMXの説明
3.1.2 特定のプロセッサに追加されたMMX命令
3.1.2.1 EMMIの説明
3.1.2.2 MMX +およびSSEで追加されたMMX命令
3.1.2.3 SSE2で追加されたMMX命令
3.1.2.4 SSSE3で追加されたMMX命令
3.2 3DNow!手順 3.3 3DNow!+の説明
3.3.1 AthlonとK6-2 +が追加されました
3.3.2 GeodeGXで追加
3.43.4 SSE命令 3.5 SSE2の説明
3.5.1 SSE2SIMD浮動小数点命令
3.5.1.1 SSE2データ移動命令
3.5.1.2 SSE2パック算術命令
3.5.1.3 SSE2論理命令
3.5.1.4 SSE2比較手順
3.5.1.5 SSE2のシャッフルとアンパックの手順
3.5.1.6 SSE2変換手順
3.5.2 SSE2SIMD整数命令
3.5.2.1 SSEレジスタに拡張されたSSE2MMXのような命令
3.5.2.2 SSEレジスタ専用のSSE2整数命令
3.6 SSE3の説明
3.6.1 SSE3SIMD浮動小数点命令
3.6.2 SSE3SIMD整数命令
3.7 SSSE3命令 3.8 SSE4の説明
3.8.1 SSE4.1
3.8.1.1 SSE4.1SIMD浮動小数点命令
3.8.1.2 SSE4.1SIMD整数命令
3.8.2 SSE4a
3.8.3 SSE4.2
3.9 SSE5から派生した命令
3.9.1 XOP
3.9.2 F16C
3.9.3 FMA3
3.9.4 FMA4
3.10 AVX 3.11 AVX2 3.12 AVX-512
3.12.1 AVX-512ファンデーション
4 暗号化の指示
4.1 IntelAESの説明 4.2 RDRANDとRDSEED 4.3 IntelSHAの説明
5 文書化されていない指示
5.1 文書化されていないx86命令 5.2 文書化されていないx87の説明
6 も参照してください
7 参考文献
8 外部リンク

x86整数命令
以下は、Intelの完全な8086/8088命令セットです(合計81命令)。これらの命令のすべてではないにしても、ほとんどが32ビットモードで使用できます。これらは、16ビット(ax、bxなど)の対応するものではなく、32ビットレジスタ(eax、ebxなど)と値で動作するだけです。このプロセッサフ​​ァミリのクイックチュートリアルについては、x86アセンブリ言語も参照して更新された命令セットは、アーキテクチャ(i386、i486、i686)に従ってグループ化され、より一般的には(32ビット)x86および(64ビット)x86-64(AMD64とも呼ばれます)と呼ばれます。

元の8086/8088の説明
オリジナルの8086/8088命令セット
命令
意味
ノート
オペコード 追加後のASCII調整AL
解凍された2進化10進数で使用0x37 AAD
ASCIIは除算の前にAXを調整します
8086/8088データシートには、AAD命令のベース10バージョン(オペコード0xD5 0x0A)のみが記載されていますが、他のベースでも機能します。その後、Intelのドキュメントにも一般的な形式がNEC V20およびV30(および場合によっては他のNEC VシリーズCPU)は常に基数10を使用し、引数を無視するため、多くの非互換性が発生します。0xD5 AAM
ASCIIは乗算後にAXを調整します
ベース10バージョン(オペランドは0xA)のみが文書化されています。AADに関する注記を参照して0xD4 AAS
減算後のASCII調整AL0x3F ADC
キャリーで追加
destination = destination + source + carry_flag
0x10…0x15、0x80…0x81 / 2、0x82…0x83 / 2(80186以降) 追加 追加(1)r/m += r/imm;(2)r += m/imm;
0x00…0x05、0x80 /​​ 0…0x81 / 0、0x82 / 0…0x83 / 0(80186以降) と 論理積(1)r/m &= r/imm;(2)r &= m/imm;
0x20…0x25、0x80…0x81 / 4、0x82…0x83 / 4(80186以降)
電話
呼び出し手順
push eip; eip points to the instruction directly after the call
0x9A、0xE8、0xFF / 2、0xFF / 3 CBW バイトをワードに変換0x98 CLC
キャリーフラグをクリアする
CF = 0;0xF8 CLD
方向フラグをクリア
DF = 0;0xFC CLI
割り込みフラグをクリアする
IF = 0;0xFA CMC
補完キャリーフラグ0xF5 CMP
オペランドを比較する
0x38…0x3D、0x80…0x81 / 7、0x82…0x83 / 7(80186以降) CMPSB メモリ内のバイトを比較する0xA6 CMPSW
単語を比較する0xA7 CWD
単語をダブルワードに変換する0x99 DAA
追加後の10進数調整AL(パックされた2進化10進数で使用)0x27 DAS
減算後のALの10進調整0x2F 12月
1ずつデクリメント
0x48…0x4F、0xFE / 1、0xFF / 1 DIV 符号なし除算(1)AX = DX:AX / r/m;結果DX = remainder(2)AL = AX / r/m;結果AH = remainder
0xF7 / 6、0xF6 / 6 浮動小数点ユニットで使用
0xD8..0xDF HLT 停止状態に入る0xF4 IDIV
署名された分割(1)AX = DX:AX / r/m;結果DX = remainder(2)AL = AX / r/m;結果AH = remainder
0xF7 / 7、0xF6 / 7 IMUL 署名された乗算(1)DX:AX = AX * r/m;(2)AX = AL * r/m
0x69、0x6B(両方とも80186以降)、0xF7 / 5、0xF6 / 5、0x0FAF(80386以降) ポートからの入力(1)AL = port;(2)AL = port;(3)AX = port;(4)AX = port;
0xE4、0xE5、0xEC、0xED INC 1ずつインクリメント
0x40…0x47、0xFE / 0、0xFF / 0 INT 割り込みを呼び出す 0xCC、0xCD の中へ
オーバーフローした場合に割り込みを呼び出す0xCE IRET
割り込みからの復帰0xCF Jcc
条件があればジャンプ(JA、JAE、JB、JBE、JC、JE、JG、JGE、JL、JLE、JNA、JNAE、JNB、JNBE、JNC、JNE、JNG、JNGE、JNL、JNLE、JNO、JNP、JNS、JNZ、JO 、JP、JPE、JPO、JS、JZ)
0x70…0x7F、0x0F80…0x0F8F(80386以降) JCXZ CXがゼロの場合はジャンプ0xE3 JMP
ジャンプ
0xE9…0xEB、0xFF / 4、0xFF / 5 LAHF FLAGSをAHレジスタにロードします0x9F LDS
DSを使用してポインタをロードする0xC5 LEA
実効アドレスのロード0x8D LES
ESにポインタをロードする 0xC4 ロック
BUS LOCK#信号をアサートします(マルチプロセッシング用)0xF0 LODSB
文字列バイトをロード
if (DF==0) AL = *SI++; else AL = *SI–;0xAC LODSW
文字列ワードをロード
if (DF==0) AX = *SI++; else AX = *SI–; 0xAD LOOP / LOOPx
ループ制御(LOOPE、LOOPNE、LOOPNZ、LOOPZ)if (x && –CX) goto lbl;0xE0…0xE2 MOV
動く
ある場所から別の場所にデータをコピーする、(1)r/m = r;(2)r = r/m;
0xA0 … 0xA3 MOVSB 文字列から文字列にバイトを移動する
if (DF == 0 ) * (バイト* )DI ++ = * (バイト* )SI ++ ; 他に * (バイト* )DI – = * (バイト* )SI – 。0xA4 MOVSW
文字列から文字列に単語を移動する
if (DF == 0 ) * (word * )DI ++ = * (word * )SI ++ ; 他に * (ワード* )DI – = * (単語* )SI – 。0xA5 MUL
符号なし乗算(1)DX:AX = AX * r/m;(2)AX = AL * r/m;
0xF7 / 4、0xF6 / 4 NEG 2の補数の否定
r/m *= -1;
0xF6 / 3…0xF7 / 3 NOP 操作なし
と同等のオペコード XCHG EAX, EAX 0x90 いいえ
オペランドを否定します。論理NOT
r/m ^= -1;
0xF6 / 2…0xF7 / 2
また
論理OR(1)(2)r/m |= r/imm;r |= m/imm;
0x08…0x0D、0x80…0x81 / 1、0x82…0x83 / 1(80186以降)
アウト
ポートへの出力(1)port = AL;(2)port = AL;(3)port = AX;(4)port = AX;
0xE6、0xE7、0xEE、0xEF
ポップ
スタックからデータをポップ
r/m = *SP++;POP CS(opcode 0x0F)は8086/8088でのみ機能します。それ以降のCPUは、新しい命令のプレフィックスとして0x0Fを使用します。
0x07、0x0F(8086/8088のみ)、0x17、0x1F、0x58…0x5F、0x8F / 0 POPF スタックからFLAGSレジスタをポップします
FLAGS = *SP++; 0x9D 押す
データをスタックにプッシュする
*–SP = r/m;
0x06、0x0E、0x16、0x1E、0x50…0x57、0x68、0x6A(両方とも80186以降)、0xFF / 6 PUSHF FLAGSをスタックにプッシュします
*–SP = FLAGS;0x9C RCL
左に回転(キャリー付き)
0xC0…0xC1 / 2(80186以降)、0xD0…0xD3 / 2 RCR 右に回転(キャリー付き)
0xC0…0xC1 / 3(80186以降)、0xD0…0xD3 / 3 REPxx MOVS / STOS / CMPS / LODS / SCASを繰り返します(REP、REPE、REPNE、REPNZ、REPZ)0xF2、0xF3 RET
手順から戻る
実際の指示ではありません。アセンブラは、ターゲットシステムのメモリモデルに応じて、これらをRETNまたはRETFに変換します。 RETN 近くの手順から戻る0xC2、0xC3 RETF
遠方からの復帰手順0xCA、0xCB ROL
左に回転
0xC0…0xC1 / 0(80186以降)、0xD0…0xD3 / 0 ROR 右に回る
0xC0…0xC1 / 1(80186以降)、0xD0…0xD3 / 1 SAHF AHをFLAGSに保存する0x9E SAL
算術的に左にシフト(符号付き左シフト)(1)r/m <<= 1;(2)r/m <<= CL;
0xC0…0xC1 / 4(80186以降)、0xD0…0xD3 / 4 SAR 算術的に右にシフト(符号付き右シフト)(1)(signed) r/m >>= 1;(2)(signed) r/m >>= CL;
0xC0…0xC1 / 7(80186以降)、0xD0…0xD3 / 7 SBB 借用による減算
の代替1バイトエンコーディングは、文書化されSBB AL, ALていないSALC命令を介して利用できます。
0x18…0x1D、0x80…0x81 / 3、0x82…0x83 / 3(80186以降) SCASB バイト文字列を比較する0xAE SCASW
単語文字列を比較する0xAF SHL
左シフト(符号なし左シフト)
0xC0…0xC1 / 4(80186以降)、0xD0…0xD3 / 4 SHR 右シフト(符号なし右シフト)
0xC0…0xC1 / 5(80186以降)、0xD0…0xD3 / 5 STC キャリーフラグを設定する
CF = 1;0xF9 STD
方向フラグを設定する
DF = 1;0xFD STI
割り込みフラグを設定する
IF = 1;0xFB STOSB
バイトを文字列に格納する
if (DF==0) *ES:DI++ = AL; else *ES:DI– = AL;0xAA STOSW
単語を文字列に保存する
if (DF==0) *ES:DI++ = AX; else *ES:DI– = AX; 0xAB サブ
減算(1)r/m -= r/imm;(2)r -= m/imm;
0x28…0x2D、0x80…0x81 / 5、0x82…0x83 / 5(80186以降)
テスト
論理比較(AND)(1)r/m & r/imm;(2)r & m/imm;
0x84、0x84、0xA8、0xA9、0xF6 / 0、0xF7 / 0
待つ
忙しくなるまで待つ
BUSY#ピンが非アクティブになるまで待機します(浮動小数点ユニットで使用)0x9B XCHG
データを交換する
r :=: r/m;スピンロックは、典型的にXCHG使用アトミック操作。(コマバグ)。
0x86、0x87、0x91…0x97 XLAT テーブルルックアップ変換
次のように動作します MOV AL, 0xD7 XOR
排他的論理和(1)r/m ^= r/imm;(2)r ^= m/imm;
0x30…0x35、0x80…0x81 / 6、0x82…0x83 / 6(80186以降)

特定のプロセッサに追加

追加しました80186 / 80188 命令 意味
ノート
バウンド
配列インデックスを境界と照合します
テストが失敗した場合、ソフトウェア割り込み5を発生させます
入力
スタックフレームを入力してください
高水準言語のプロシージャにエントリするためのスタックを変更します。スタックに割り当てられるストレージの量とプロシージャのネストレベルの2つのオペランドを取ります。 INS ポートから文字列への入力
に相当:
IN (E )AX 、 DX MOV ES :、 (E )AX ; オペランドサイズとDFに応じて(E)DIを調整します
離れる
スタックフレームを離れる
前のENTER命令によって作成されたローカルスタックストレージを解放します。
アウト
ポートへの出力文字列
に相当:
MOV (E )AX 、 DS : OUT DX 、 (E )AX ; オペランドサイズとDFに応じて(E)SIを調整します POPA スタックからすべての汎用レジスタをポップします
に相当:
POP DI POP SI POP BP POP AX ; ここにはPOPSPはなく、ADD SP、2(AXは後で上書きされるため)POP BX POP DX POP CX POP AX
プシャ
すべての汎用レジスタをスタックにプッシュします
に相当:
PUSH AX PUSH CX PUSH DX PUSH BX PUSH SP ; 格納された値は、初期SP値であるPUSH BP PUSH SIのPUSH DI
すぐにプッシュ
即時のバイト/ワード値をスタックにプッシュします
例:
PUSH 12h PUSH 1200h
IMUL即時
即時バイト/ワード値の符号付き乗算
例:
IMUL BX 、12h IMUL DX 、1200h IMUL CX 、 DX 、 12h IMUL BX 、 SI 、 1200h IMUL DI 、 ワード ptr 、 12h IMUL SI 、 ワード ptr 、 1200h
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR即時
即値が1より大きいビットを回転/シフトします
例:
ROL AX 、3 SHR BL 、3

80286で追加 命令 意味
ノート ARPL セレクターのRPLフィールドを調整します CLTS レジスタCR0のタスク切り替えフラグをクリアします LAR アクセス権バイトをロード LGDT グローバル記述子テーブルをロードする LIDT 割り込み記述子テーブルをロードする LLDT ローカル記述子テーブルをロードする LMSW マシンステータスワードをロードします LOADALL GDTなどの内部レジスタを含むすべてのCPUレジスタをロードします
文書化されていない、80286および80386のみ LSL 負荷セグメントの制限 LTR タスクレジスタをロードする SGDT グローバル記述子テーブルを保存する SIDT 割り込み記述子テーブルを保存する SLDT ローカル記述子テーブルを保存する SMSW マシンステータスワードを保存する STR タスクレジスタを保存する VERR 読み取り用のセグメントを確認します VERW 書き込み用のセグメントを確認します

80386で追加 命令 意味
ノート BSF ビットスキャンフォワード BSR ビットスキャンリバース BT ビットテスト BTC ビットテストと補完 BTR ビットテストとリセット
防弾少年団
ビットテストアンドセット CDQ ダブルワードをクアッドワードに変換する
EAXをEDXに符号拡張し、クアッドワードEDX:EAXを形成します。(I)DIVはEDX:EAXを入力として使用するため、EDXが(I)DIVの前に手動で初期化されていない場合(64/32分割のように)、EAXの設定後にCDQを呼び出す必要が CMPSD 文字列のダブルワードを比較する
ES:をDS:と比較し、DFに応じて、(E)DIと(E)SIの両方をインクリメントまたはデクリメントします。REPを前に付けることができます CWDE 単語をダブルワードに変換する
CWDとは異なり、CWDEはAXをDX:AXにではなく、AXをEAXに符号拡張します。 IBTS ビット文字列を挿入
80386のB1ステップで廃止 INSD ポートから文字列への入力ダブルワード IRETx 割り込みリターン; Dサフィックスは32ビットリターンを意味し、Fサフィックスはエピローグコードを生成しないことを意味します(つまり、LEAVE命令)
32ビットの状況では、IRETではなくIRETDを使用します JECXZ ECXがゼロの場合にジャンプする LFS、LGS ファーポインタをロード LSS ロードスタックセグメント LODSD 文字列のダブルワードを読み込む
EAX = *ES:EDI±±;(±±はDFに依存し、ESはオーバーライドできません); REPを前に付けることができます
LOOPW、LOOP cc W
ループ、条件付きループ
LOOPと同じ、以前のプロセッサのLOOP cc LOOPD、LOOPccD 等しいうちにループする
if (cc && –ECX) goto lbl;、cc = Z(ero)、E(qual)、N on Z ero、N(on)E(qual)
CR / DR / TRとの間のMOV
特殊レジスタへの移動/特別レジスタからの移動
CR =制御レジスタ、DR =デバッグレジスタ、TR =テストレジスタ(最大80486) MOVSD 文字列のダブルワードを移動する
*(dword*)ES:EDI±± = *(dword*)ESI±±;(±±はDFに依存します); REPを前に付けることができます MOVSX 符号拡張を使用して移動する(long)r = (signed char) r/m; および同様のもの MOVZX ゼロエクステンションで移動(long)r = (unsigned char) r/m; および同様のもの OUTSD 文字列ダブルワードからポートへの出力 port = *(long*)ESI±±; (±±はDFに依存します) POPAD スタックからすべてのダブルワード(32ビット)レジスタをポップします
レジスタESPをスタックからポップしません POPFD データをEFLAGSレジスタにポップします PUSHAD すべてのダブルワード(32ビット)レジスタをスタックにプッシュします PUSHFD EFLAGSレジスタをスタックにプッシュします SCASD 文字列データのダブルワードをスキャンします
ES:をEAXと比較し、DFに応じて(E)DIをインクリメントまたはデクリメントします。REPを前に付けることができます SETcc 条件付きでバイトを1に設定し、それ以外の場合は0に設定します。(SETA、SETAE、SETB、SETBE、SETC、SETE、SETG、SETGE、SETL、SETLE、SETNA、SETNAE、SETNB、SETNBE、SETNC、SETNE、SETNG、SETNGE、SETNL、SETNLE、SETNO、SETNP、SETNS、SETNZ、SETO 、SETP、SETPE、SETPO、SETS、SETZ) SHLD 左ダブルワードシフト SHRD 右にシフトダブルワード
r1 = r1>>CL ∣ r2<<(32-CL); CLの代わりに、即時1を使用できます STOSD 文字列のダブルワードを格納する
*ES:EDI±± = EAX;(±±はDFに依存し、ESはオーバーライドできません); REPを前に付けることができます XBTS ビット文字列の抽出
80386のB1ステップで廃止

80486で追加 命令 意味
ノート BSWAP バイトスワップ
r = r<<24 | r<<8&0x00FF0000 | r>>8&0x0000FF00 | r>>24;32ビットレジスタに対してのみ定義されます。通常、リトルエンディアンとビッグエンディアンの表現を切り替えるために使用されます。16ビットレジスタで使用すると、486、 586、およびBochs / QEMUでさまざまな異なる結果が生成されます。 CMPXCHG アトミックCoMPareおよびeXCHanGe
文書化されていないオペコードが利用可能であるため、80386以降のコンペアアンドスワップ/を参照して INVD 内部キャッシュを無効にする
内部キャッシュをフラッシュする INVLPG TLBエントリを無効にする
指定されたデータを含むページのTLBエントリを無効にします WBINVD キャッシュを書き戻し、無効にする
プロセッサの内部キャッシュ内の変更されたすべてのキャッシュラインをメインメモリに書き戻し、内部キャッシュを無効にします。 XADD 交換と追加
最初のオペランドを2番目のオペランドと交換してから、2つの値の合計をデスティネーションオペランドにロードします。

Pentiumで追加 命令 意味
ノート CPUID CPUの識別
プロセッサの識別と機能に関するデータを返し、データをEAX、EBX、ECX、およびEDXレジスタに返します。EAXレジスタで指定された命令関数。これは後の80486プロセッサにも追加されました CMPXCHG8B CoMPareおよびeXCHanGe8バイト
EDX:EAXとm64を比較して等しい場合は、ZFを設定し、ECX:EBXをm64にロードします。それ以外の場合は、ZFをクリアし、m64をEDX:EAXにロードします。 RDMSR モデル固有のレジスタからのReaD
ECXで指定されたMSRをEDX:EAXにロードします RDTSC ReaDタイムスタンプカウンター
プロセッサが「オンライン」になってから(システムの最後の電源投入以降)のプロセッサティック数を返します。 WRMSR モデル固有のレジスタへの書き込み
EDX:EAXの値をECXで指定されたMSRに書き込みます RSM システム管理モードから再開します これは私によって導入された386SL以降、私にもあり486SL以降。システム管理モード(SMM)から再開

PentiumMMXで追加 命令 意味
ノート RDPMC PMC [パフォーマンスモニタリングカウンター]を読む
ECXレジスタでレジスタEDX:EAXに指定されます
また、MMXレジスタとMMXサポート命令が追加されました。これらは整数演算と浮動小数点演算の両方に使用できます。以下を参照して

追加しましたAMD K6 命令 意味
ノート SYSCALL SYSENTERと機能的に同等 SYSRET SYSEXITと機能的に同等
AMDは、この機能のCPUID検出ビットをK6-II以降に変更しました。

追加しましたペンティアムプロ 命令 意味
ノート CMOVcc 条件付き移動(CMOVA、CMOVAE、CMOVB、CMOVBE、CMOVC、CMOVE、CMOVG、CMOVGE、CMOVL、CMOVLE、CMOVNA、CMOVNAE、CMOVNB、CMOVNBE、CMOVNC、CMOVNE、CMOVNG、CMOVNGE、CMOVNL、CMOVNLE、CMOVNO、CMOVNP、CMOVNS 、CMOVP、CMOVPE、CMOVPO、CMOVS、CMOVZ) UD2 未定義の指示
無効なオペコード例外を生成します。この命令は、無効なオペコードを明示的に生成するためのソフトウェアテスト用に提供されています。この命令のオペコードは、この目的のために予約されています。

PentiumIIで追加 命令 意味
ノート SYSENTER SYStemコールENTER
Fast System Call命令と呼ばれることもあるこの命令は、オペレーティングシステムコールのパフォーマンスを向上させることを目的としています。Pentium Proでは、CPUID命令がこれらの命令を利用可能として誤って報告することに注意して SYSEXIT SYStemコールEXIT

SSEで追加
命令
オペコード
意味
ノート
NOP r / m16
0F 1F / 0
マルチバイトの無操作命令。
NOP r / m32 PREFETCHT0 0F 18/1
アドレスからデータをプリフェッチする
すべてのキャッシュレベルにプリフェッチします PREFETCHT1 0F 18/2
アドレスからデータをプリフェッチする
L1を除くすべてのキャッシュレベルへのプリフェッチ PREFETCHT2 0F 18/3
アドレスからデータをプリフェッチする
L1とL2を除くすべてのキャッシュレベルにプリフェッチします PREFETCHNTA 0F 18/0
アドレスからデータをプリフェッチする
非一時的なキャッシュ構造にプリフェッチし、キャッシュの汚染を最小限に抑えます。 SFENCE 0F AE F8
ストアフェンス
SFENCE呼び出しの前に行われたすべてのストア操作がグローバルに表示されるようにするためのプロセッサのヒント

SSE2で追加
命令
オペコード
意味
ノート CLFLUSH m8 0F AE / 7
キャッシュラインフラッシュ
プロセッサキャッシュ階層のすべてのレベルから、ソースオペランドで指定された線形アドレスを含むキャッシュラインを無効にします LFENCE 0F AE E8
ロードフェンス
ロード操作をシリアル化します。 MFENCE 0F AE F0
メモリフェンス
MFENCE命令の前に発行されたすべてのロードおよびストア命令に対してシリアル化操作を実行します。
MOVNTI m32、r32
0F C3 / r
ダブルワードを非一時的に移動する
ダブルワードをr32からm32に移動し、キャッシュ階層の汚染を最小限に抑えます。
一時停止 F3 90 スピンループヒント
キャッシュ可能性のために、次のコードがスピンループであるというヒントをプロセッサに提供します

SSE3で追加 命令 意味
ノート
MONITOR EAX, ECX, EDX
モニターアドレスの設定
ハードウェアによって監視される線形アドレス範囲を設定し、モニターをアクティブにします。
MWAIT EAX, ECX
モニター待機
命令の実行を停止し、イベントのクラスが発生するまで実装に依存する最適化された状態に入るためのプロセッサヒント。

SSE4.2で追加
命令
オペコード
意味
ノート
CRC32 r32、r / m8
F2 0F 38 F0 / r
CRC32を蓄積する
CRC-32C(Castagnoli)多項式0x11EDC6F41(通常の形式0x1EDC6F41)を使用してCRC値を計算します。これは、iSCSIで使用される多項式です。イーサネットで使用されるより一般的なものとは対照的に、そのパリティは偶数であるため、奇数の変更ビットでエラーを検出できます。
CRC32 r32、r / m8
F2 REX 0F 38 F0 / r
CRC32 r32、r / m16
F2 0F 38 F1 / r
CRC32 r32、r / m32
F2 0F 38 F1 / r
CRC32 r64、r / m8
F2 REX.W 0F 38 F0 / r
CRC32 r64、r / m64
F2 REX.W 0F 38 F1 / r
CRC32 r32、r / m8
F2 0F 38 F0 / r

x86-64で追加 命令 意味
ノート CDQE EAXをRAXに拡張する符号拡張 CQO RAXをRDX:RAXに符号拡張する CMPSQ CoMPare文字列クワッドワード CMPXCHG16B CoMPareおよびeXCHanGe16バイト IRETQ 割り込みからの64ビットリターン JRCXZ RCXがゼロの場合にジャンプする LODSQ LoaD文字列クワッドワード MOVSXD 32ビットから64ビットへの符号拡張を使用したMOV POPFQ POPRFLAGSレジスタ PUSHFQ PUSHRFLAGSレジスタ RDTSCP ReaDタイムスタンプカウンターとプロセッサーID SCASQ SCAn String Quadword STOSQ STOre文字列クワッドワード SWAPGS GSベースをKernelGSBaseMSRと交換する

AMD-Vで追加 命令 意味
ノート
オペコード CLGI グローバル割り込みフラグをクリアする
GIFをクリアします
0x0F 0x01 0xDD INVLPGA 指定されたASIDのTLBエントリを無効にします
RAXで指定された仮想ページとECXで指定されたASIDのTLBマッピングを無効にします。
0x0F 0x01 0xDF
MOV(CRn)
制御レジスタへの移動または制御レジスタからの移動
32ビットまたは64ビットのコンテンツを制御レジスタに移動します。その逆も同様です。
0x0F0x22または0x0F0x20
MOV(DRn)
デバッグレジスタへの移動またはデバッグレジスタからの移動
32ビットまたは64ビットのコンテンツを制御レジスタに移動します。その逆も同様です。
0x0F0x21または0x0F0x23 SKINIT 証明付きの安全な初期化とジャンプ
安全なハッシュ比較に基づく信頼できるソフトウェアの検証可能な起動
0x0F 0x01 0xDE STGI グローバル割り込みフラグを設定する
GIFを設定します。
0x0F 0x01 0xDC VMLOAD VMCBからのロード状態
RAXレジスタの物理アドレスで指定されたVMCBからプロセッサ状態のサブセットをロードします。
0x0F 0x01 0xDA VMMCALL VMMを呼び出す
VMMとの通信にのみ使用されます
0x0F 0x01 0xD9 VMRUN 仮想マシンを実行する
ゲストOSへの切り替えを行います。
0x0F 0x01 0xD8 VMSAVE 状態をVMCBに保存
追加のゲスト状態をVMCBに保存します。
0x0F 0x01 0xDB

IntelVT-xで追加 命令 意味
ノート
オペコード INVEPT EPTから派生した翻訳を無効にする
TLBおよびページング構造キャッシュのEPT派生エントリを無効にします。
0x66 0x0F 0x38 0x80 INVVPID VPIDに基づいて翻訳を無効にする
VPIDに基づいて、TLBおよびページング構造キャッシュのエントリを無効にします。
0x66 0x0F 0x38 0x80 VMFUNC VM機能を呼び出す
EAXで指定されたVM関数を呼​​び出します。
0x0F 0x01 0xD4 VMPTRLD 仮想マシン制御構造へのロードポインタ
現在のVMCSポインタをメモリからロードします。
0x0F 0xC7 / 6 VMPTRST 仮想マシン制御構造へのストアポインタ
現在のVMCSポインタを指定されたメモリアドレスに格納します。この命令のオペランドは常に64ビットであり、常にメモリ内に
0x0F 0xC7 / 7 VMCLEAR 明確な仮想マシン制御構造
キャッシュされたデータをVMCSに書き込みます
0x66 0x0F 0xC7 / 6 VMREAD 仮想マシン制御構造からフィールドを読み取る
VMCSのフィールドを読み取ります0x0F 0x78 VMWRITE
仮想マシン制御構造へのフィールドの書き込み
VMCSのフィールドを変更します0x0F 0x79 VMCALL
VMモニターへの呼び出し
ゲストシステムからVMモニター機能を呼び出します
0x0F 0x01 0xC1 VMLAUNCH 仮想マシンを起動する
現在のVMCSによって管理されている仮想マシンを起動します
0x0F 0x01 0xC2 VMRESUME 仮想マシンを再開します
現在のVMCSによって管理されている仮想マシンを再開します
0x0F 0x01 0xC3 VMXOFF VMX操作を終了します
ハードウェアでサポートされている仮想化環境を停止します
0x0F 0x01 0xC4 VMXON VMX操作を入力してください
ハードウェアでサポートされている仮想化環境に入ります
0xF3 0x0F 0xC7 / 6

ABMで追加
LZCNT、POPCNT(POPulation CouNT)–高度なビット操作

BMI1で追加
ANDN、BEXTR、BLSI、BLSMSK、BLSR、TZCNT

BMI2で追加
BZHI、MULX、PDEP、PEXT、RORX、SARX、SHRX、SHLX

TBMで追加
AMDは、Piledriver プロセッサラインにBMI1とともにTBMを導入しました。その後、AMDJaguarおよびZenベースのプロセッサはTBMをサポートしません。(2020年現在の)IntelプロセッサはTBMをサポートし
命令 説明
同等のC式
BEXTR ビットフィールド抽出(即時) (src >> start)&((1 << len)-1)
BLCFILL 最下位のクリアビットから入力 x&(x + 1)
BLCI 最下位のクリアビットを分離する x | 〜(x + 1)
BLCIC 最も低いクリアビットを分離し、補完します 〜x&(x + 1)
BLCMSK 最も低いクリアビットからのマスク x ^(x + 1)
BLCS 最小のクリアビットを設定します x | (x + 1)
BLSFILL 最下位のセットビットから入力 x | (x-1)
BLSIC 最下位のセットビットを分離して補完する 〜x | (x-1)
T1MSKC 後続のものからの逆マスク 〜x | (x + 1)
TZMSK 後続ゼロからのマスク 〜x&(x-1)

CLMUL命令セットで追加
命令
オペコード
説明
PCLMULQDQ xmmreg、xmmrm、imm
66 0f 3a 44 / r ib 有限体GF(2 k)上で2つの64ビット多項式のキャリーレス乗算を実行します。
PCLMULLQLQDQ xmmreg、xmmrm
66 0f 3a 44 / r 00 2つのレジスタの下半分を乗算します。
PCLMULHQLQDQ xmmreg、xmmrm
66 0f 3a 44 / r 01 デスティネーションレジスタの上位半分にソースレジスタの下位半分を乗算します。
PCLMULLQHQDQ xmmreg、xmmrm
66 0f 3a 44 / r 10 デスティネーションレジスタの下位半分にソースレジスタの上位半分を乗算します。
PCLMULHQHQDQ xmmreg、xmmrm
66 0f 3a 44 / r 11 2つのレジスタの上位半分を乗算します。

IntelADXで追加
命令
説明 ADCX 2つの符号なし整数とキャリーを追加し、キャリーフラグからキャリーを読み取り、必要に応じてそこに設定します。キャリー以外のフラグには影響しません。 ADOX 2つの符号なし整数とキャリーを追加し、オーバーフローフラグからキャリーを読み取り、必要に応じてそこに設定します。オーバーフロー以外のフラグには影響しません。
x87浮動小数点命令編集

元の8087の説明 命令 意味
ノートF2XM1 2− 1
{2 ^ {x} -1}
 
より正確
2{2 ^ {x}}
 以下のためのxゼロに近いです FABS 絶対値 FADD 追加 FADDP 追加してポップ FBLD BCDをロードする FBSTP BCDとポップを保存する FCHS 記号を変更する FCLEX 例外をクリアする FCOM 比較 FCOMP 比較してポップ FCOMPP 比較して2回ポップする FDECSTP 浮動小数点スタックポインタをデクリメントします FDISI 割り込みを無効にする
8087のみ、それ以外の場合はFNOP FDIV 分ける
PentiumFDIVのバグ FDIVP 分割してポップ FDIVR 逆に分割 FDIVRP 逆に分割してポップ FENI 割り込みを有効にする
8087のみ、それ以外の場合はFNOP FFREE 無料登録 FIADD 整数加算 FICOM 整数比較 FICOMP 整数の比較とポップ FIDIV 整数除算 FIDIVR 整数除算が逆になりました FILD 整数をロード FIMUL 整数乗算 FINCSTP 浮動小数点スタックポインタをインクリメントします FINIT 浮動小数点プロセッサを初期化します 拳 整数を格納する FISTP 整数とポップを格納する FISUB 整数減算 FISUBR 整数減算が逆になりました FLD 浮動小数点負荷 FLD1 1.0をスタックにロードします FLDCW 負荷制御ワード FLDENV 負荷環境の状態 FLDENVW 負荷環境の状態、16ビット FLDL2E ログ2(e)をスタックにロードします FLDL2T ログ2(10)をスタックにロードします FLDLG2 ログ10(2)をスタックにロードします FLDLN2 ln(2)をスタックにロードします FLDPI πをスタックにロードします FLDZ 0.0をスタックにロードします FMUL かける FMULP 掛け算とポップ FNCLEX 例外をクリアし、待つ必要はありません FNDISI 割り込みを無効にし、待つ必要はありません
8087のみ、それ以外の場合はFNOP FNENI 割り込みを有効にし、待つ必要はありません
8087のみ、それ以外の場合はFNOP FNINIT 浮動小数点プロセッサを初期化します。待機なし FNOP 操作なし FNSAVE FPU状態を保存、待機なし、8ビット FNSAVEW FPU状態を保存、待機なし、16ビット FNSTCW 制御ワードを保存し、待つ必要はありません FNSTENV FPU環境を保存し、待つ必要はありません FNSTENVW FPU環境を保存、待機なし、16ビット FNSTSW ステータスワードを保存し、待つ必要はありません FPATAN 部分アークタンジェント FPREM 部分的な残り FPTAN 部分接線 FRNDINT 整数に丸める FRSTOR 保存された状態を復元する FRSTORW 保存された状態を復元する
おそらく8087では実際には利用できません FSAVE FPU状態を保存 FSAVEW FPU状態を保存、16ビット FSCALE 2倍のスケール FSQRT 平方根 FST 浮動小数点ストア FSTCW コントロールワードを保存する FSTENV FPU環境を保存する FSTENVW ストアFPU環境、16ビット FSTP ストアとポップ FSTSW ステータスワードを保存する FSUB 減算 FSUBP 減算してポップ FSUBR 逆減算 FSUBRP 逆減算とポップ FTST ゼロをテストする FWAIT FPUの実行中に待つ FXAM 条件フラグを調べる FXCH 交換レジスタ FXTRACT 指数と仮数を抽出します FYL2X y ・log 2  x
場合yは LOG = B  2を、次いで塩基Bの対数を計算します FYL2XP1 y ・log 2  (x +1)
より正確なログ2  、Z xがゼロに近い場合
特定のプロセッサに追加編集

80287で追加 命令 意味
ノート FSETPM プロテクトモードを設定する
80287のみ、それ以外の場合はFNOP

80387で追加 命令 意味
ノート FCOS 余弦 FLDENVD 負荷環境の状態、32ビット FSAVED FPU状態を保存、32ビット FPREM1 部分的な残り
IEEE剰余を計算します FRSTORD 保存された状態を復元、32ビット FSIN 正弦 FSINCOS サインとコサイン FSTENVD FPU環境の保存、32ビット FUCOM 順序付けられていない比較 FUCOMP 順序付けられていない比較とポップ FUCOMPP 順序付けられていない比較と2回のポップ

追加しましたペンティアムプロ
FCMOVバリアント:FCMOVB、FCMOVBE、FCMOVE、FCMOVNB、FCMOVNBE、FCMOVNE、FCMOVNU、FCMOVU
FCOMIバリアント:FCOMI、FCOMIP、FUCOMI、FUCOMIP

SSEで追加 FXRSTOR、FXSAVE これらは、SSEサポートを含まない後のPentiumIIでもサポートされています

SSE3で追加

FISTTP(ステータスワードに関係なく切り捨てを伴うx87から整数への変換)

SIMDの説明
MMXの説明
MMX命令は、64ビット幅のmmレジスタで動作します。それらはFPUレジスタと共有されます。

オリジナルのMMXの説明
追加しましたペンティアムMMX
命令
オペコード
意味
ノートEMMS 0F 77
空のMMXテクノロジーの状態
FPUで使用するためにすべてのx87FPUレジスタをマークします
MOVD mm、r / m32
0F 6E / r
ダブルワードを移動
MOVD r / m32、mm
0F 7E / r
ダブルワードを移動
MOVQ mm / m64、mm
0F 7F / r
クワッドワードを移動
MOVQ mm、mm / m64
0F 6F / r
クワッドワードを移動
MOVQ mm、r / m64
REX.W + 0F 6E / r
クワッドワードを移動
MOVQ r / m64、mm
REX.W + 0F 7E / r
クワッドワードを移動
PACKSSDW mm1、mm2 / m64
0F 6B / r
ダブルワードをワードにパックする(飽和状態で署名)
PACKSSWB mm1、mm2 / m64
0F 63 / r
ワードをバイトにパックします(飽和で署名されます)
PACKUSWB mm、mm / m64
0F 67 / r
ワードをバイトにパックします(saturationで符号なし)
PADDB mm、mm / m64
0F FC / r
パックされたバイト整数を追加します
PADDW mm、mm / m64
0F FD / r
パックされた単語の整数を追加します
パッドmm、mm / m64
0F FE / r
パックされたダブルワード整数を追加します
PADDQ mm、mm / m64
0F D4 / r
パックされたクアッドワード整数を追加します
PADDSB mm、mm / m64
0F EC / r
パックされた符号付きバイト整数を追加し、飽和させます
PADDSW mm、mm / m64
0F ED / r
パックされた符号付き単語の整数を追加し、飽和させます
PADDUSB mm、mm / m64
0F DC / r
パックされた符号なしバイト整数を追加し、飽和させます
PADDUSW mm、mm / m64
0F DD / r
パックされた符号なし整数を追加し、飽和させます
パンドmm、mm / m64
0F DB / r
ビットごとのAND
PANDN mm、mm / m64
0F DF / r
ビットごとではなく
POR mm、mm / m64
0F EB / r
ビットごとのOR
PXOR mm、mm / m64
0F EF / r
ビット単位のXOR
PCMPEQB mm、mm / m64
0F 74 / r
パックされたバイトが等しいかどうかを比較します
PCMPEQW mm、mm / m64
0F 75 / r
パックされた単語が等しいかどうかを比較する
PCMPEQD mm、mm / m64
0F 76 / r
パックされたダブルワードが等しいかどうかを比較する
PCMPGTB mm、mm / m64
0F 64 / r
パックされた符号付きバイト整数を比較して、
PCMPGTW mm、mm / m64
0F 65 / r
パックされた符号付き単語の整数を
PCMPGTD mm、mm / m64
0F 66 / r
パックされた符号付きダブルワード整数を大なり記号と比較します
PMADDWD mm、mm / m64
0F F5 / r
パックされた単語を乗算し、隣接するダブルワードの結果を追加します
PMULHW mm、mm / m64
0F E5 / r
パックされた符号付きワード整数を乗算し、上位16ビットの結果を格納します
PMULLW mm、mm / m64
0F D5 / r
パックされた符号付きワード整数を乗算し、結果の下位16ビットを格納します
PSLLW mm1、imm8
0F 71/6 ib
左の単語をシフトし、ゼロにシフトします
PSLLW mm、mm / m64
0F F1 / r
左の単語をシフトし、ゼロにシフトします
PSLLD mm、imm8
0F 72/6 ib
左ダブルワードをシフトし、ゼロにシフトします
PSLLD mm、mm / m64
0F F2 / r
左ダブルワードをシフトし、ゼロにシフトします
PSLLQ mm、imm8
0F 73/6 ib
左クワッドワードをシフトし、ゼロにシフトします
PSLLQ mm、mm / m64
0F F3 / r
左クワッドワードをシフトし、ゼロにシフトします
PSRAD mm、imm8
0F 72/4 ib
右ダブルワードをシフトし、符号ビットをシフトします
PSRAD mm、mm / m64
0F E2 / r
右ダブルワードをシフトし、符号ビットをシフトします
PSRAW mm、imm8
0F 71/4 ib
右の単語をシフトし、符号ビットをシフトします
PSRAW mm、mm / m64
0F E1 / r
右の単語をシフトし、符号ビットをシフトします
PSRLW mm、imm8
0F 71/2 ib
右の単語をシフトし、ゼロでシフトします
PSRLW mm、mm / m64
0F D1 / r
右の単語をシフトし、ゼロでシフトします
PSRLD mm、imm8
0F 72/2 ib
右にダブルワードをシフトし、ゼロにシフトします
PSRLD mm、mm / m64
0F D2 / r
右にダブルワードをシフトし、ゼロにシフトします
PSRLQ mm、imm8
0F 73/2 ib
右クワッドワードをシフト、ゼロでシフト
PSRLQ mm、mm / m64
0F D3 / r
右クワッドワードをシフト、ゼロでシフト
PSUBB mm、mm / m64
0F F8 / r
パックされたバイト整数を減算します
PSUBW mm、mm / m64
0F F9 / r
パックされた単語の整数を減算します
PSUBD mm、mm / m64
0F FA / r
パックされたダブルワード整数を減算します
PSUBSB mm、mm / m64
0F E8 / r
飽和した符号付きパックバイトを減算します
PSUBSW mm、mm / m64
0F E9 / r
飽和状態で署名されたパックされた単語を減算します
PSUBUSB mm、mm / m64
0F D8 / r
飽和状態の符号なしパックバイトを減算します
PSUBUSW mm、mm / m64
0F D9 / r
飽和状態の署名されていないパックされた単語を減算します
PUNPCKHBW mm、mm / m64
0F 68 / r
上位バイトをアンパックしてインターリーブする
PUNPCKHWD mm、mm / m64
0F 69 / r
上位の単語を解凍してインターリーブする
PUNPCKHDQ mm、mm / m64
0F 6A / r
上位のダブルワードを解凍してインターリーブします
PUNPCKLBW mm、mm / m32
0F 60 / r
下位バイトをアンパックしてインターリーブする
PUNPCKLWD mm、mm / m32
0F 61 / r
下位の単語を解凍してインターリーブする
PUNPCKLDQ mm、mm / m32
0F 62 / r
下位のダブルワードを解凍してインターリーブします
特定のプロセッサに追加されたMMX命令編集

EMMIの説明
追加しました6x86MXからCyrixの廃止、
PAVEB、PADDSIW、PMAGW、PDISTIB、PSUBSIW、PMVZB、PMULHRW、PMVNZB、PMVLZB、PMVGEZB、PMULHRIW、PMACHRIW

MMX +およびSSEで追加されたMMX命令
次のMMX命令がSSEで追加されました。これらは、MMX +という名前でAthlonでも入手できます。
命令
オペコード
意味
MASKMOVQ mm1、mm2
0F F7 / r
クワッドワードのマスクされた動き
MOVNTQ m64、mm
0F E7 / r
非時間的ヒントを使用してクアッドワードを移動する
PSHUFW mm1、mm2 / m64、imm8
0F 70 / r ib
パックされた単語をシャッフルする
PINSRW mm、r32 / m16、imm8
0F C4 / r
Wordを挿入
PEXTRW reg、mm、imm8
0F C5 / r
単語を抽出する
PMOVMSKB reg、mm
0F D7 / r
バイトマスクの移動
PMINUB mm1、mm2 / m64
0F DA / r
パックされた符号なしバイト整数の最小値
PMAXUB mm1、mm2 / m64
0F DE / r
パックされた符号なしバイト整数の最大値
PAVGB mm1、mm2 / m64
0F E0 / r
パックされた整数の平均
PAVGW mm1、mm2 / m64
0F E3 / r
パックされた整数の平均
PMULHUW mm1、mm2 / m64
0F E4 / r
パックされた符号なし整数を乗算し、高い結果を格納します
PMINSW mm1、mm2 / m64
0F EA / r
パックされた符号付きワード整数の最小値
PMAXSW mm1、mm2 / m64
0F EE / r
パックされた符号付きワード整数の最大値
PSADBW mm1、mm2 / m64
0F F6 / r
絶対差の合計を計算する

SSE2で追加されたMMX命令
次のMMX命令がSSE2で追加されました。
命令
オペコード
意味
PSUBQ mm1、mm2 / m64
0F FB / r
クワッドワード整数を引く
PMULUDQ mm1、mm2 / m64
0F F4 / r
符号なしダブルワード整数を乗算します

SSSE3で追加されたMMX命令
命令
オペコード
意味
PSIGNB mm1、mm2 / m64
0F 38 08 / r
対応する符号に応じて、パックされたバイト整数を否定/ゼロ/保持します
PSIGNW mm1、mm2 / m64
0F 38 09 / r
対応する符号に応じて、パックされた単語の整数を否定/ゼロ/保持します
PSIGND mm1、mm2 / m64
0F 38 0A / r
対応する符号に応じて、パックされたダブルワード整数を否定/ゼロ/保持します
PSHUFB mm1、mm2 / m64
0F 38 00 / r
バイトをシャッフルする
PMULHRSW mm1、mm2 / m64
0F 38 0B / r
16ビットの符号付きワードを乗算し、符号付きダブルワードをスケーリングおよびラウンドし、上位16ビットをパックします。
PMADDUBSW mm1、mm2 / m64
0F 38 04 / r
符号付きバイトと符号なしバイトを乗算し、符号付きワードの水平ペアを追加し、飽和した符号付きワードをパックします
PHSUBW mm1、mm2 / m64
0F 38 05 / r
16ビットの符号付き整数を水平方向に減算してパックします
PHSUBSW mm1、mm2 / m64
0F 38 07 / r
16ビットの符号付き整数を減算して、飽和状態で水平方向にパックします。
PHSUBD mm1、mm2 / m64
0F 38 06 / r
32ビットの符号付き整数を水平方向に減算してパックします
PHADDSW mm1、mm2 / m64
0F 38 03 / r
16ビットの符号付き整数を水平方向に追加してパックし、飽和した整数をmm1にパックします。
PHADDW mm1、mm2 / m64
0F 38 01 / r
16ビット整数を水平方向に追加およびパックします
PHADDD mm1、mm2 / m64
0F 38 02 / r
32ビット整数を水平方向に追加およびパックします
PALIGNR mm1、mm2 / m64、imm8
0F 3A 0F / r ib
宛先オペランドとソースオペランドを連結し、右にシフトされたバイト整列結果を抽出します
PABSB mm1、mm2 / m64
0F 38 1C / r
バイトの絶対値を計算し、符号なしの結果を格納します
PABSW mm1、mm2 / m64
0F 38 1D / r
16ビット整数の絶対値を計算し、符号なしの結果を格納します
PABSD mm1、mm2 / m64
0F 38 1E / r
32ビット整数の絶対値を計算し、符号なしの結果を格納します

3DNow!手順
K6-2で追加
FEMMS、PAVGUSB、PF2ID、PFACC、PFADD、PFCMPEQ、PFCMPGE、PFCMPGT、PFMAX、PFMIN、PFMUL、PFRCP、PFRCPIT1、PFRCPIT2、PFRSQIT1、PFRSQRT、PFSUB、PFSUBR、PI2FD、PMULHRW、PREFET

3DNow!+の説明

AthlonとK6-2 +が追加されました
PF2IW、PFNACC、PFPNACC、PI2FW、PSWAPD

で追加のGeode GX
PFRSQRTV、PFRCPV

SSE命令
PentiumIIIで追加
SSE命令は、128ビット幅のxmmレジスタで動作します。
SSEは、次のSSESIMD浮動小数点命令で構成されています。
命令
オペコード
意味
ANDPS * xmm1、xmm2 / m128
0F 54 / r
パックされた単精度浮動小数点値のビット単位の論理積
ANDNPS * xmm1、xmm2 / m128
0F 55 / r
パックされた単精度浮動小数点値ではなく、ビット単位の論理
ORPS * xmm1、xmm2 / m128
0F 56 / r
単精度浮動小数点値のビットごとの論理OR
XORPS * xmm1、xmm2 / m128
0F 57 / r
単精度浮動小数点値のビット単位の論理XOR
MOVUPS xmm1、xmm2 / m128
0F 10 / r
整列されていないパックされた単精度浮動小数点値を移動する
MOVSS xmm1、xmm2 / m32
F3 0F 10 / r
スカラー単精度浮動小数点値の移動
MOVUPS xmm2 / m128、xmm1
0F 11 / r
整列されていないパックされた単精度浮動小数点値を移動する
MOVSS xmm2 / m32、xmm1
F3 0F 11 / r
スカラー単精度浮動小数点値の移動
MOVLPS xmm、m64
0F 12 / r
低パックの単精度浮動小数点値を移動する
MOVHLPS xmm1、xmm2
0F 12 / r
パックされた単精度浮動小数点値を高から低に移動
MOVLPS m64、xmm
0F 13 / r
低パックの単精度浮動小数点値を移動する
UNPCKLPS xmm1、xmm2 / m128
0F 14 / r
低パックの単精度浮動小数点値をアンパックしてインターリーブする
UNPCKHPS xmm1、xmm2 / m128
0F 15 / r
高パックの単精度浮動小数点値をアンパックしてインターリーブする
MOVHPS xmm、m64
0F 16 / r
高パックの単精度浮動小数点値を移動する
MOVLHPS xmm1、xmm2
0F 16 / r
パックされた単精度浮動小数点値を低から高に移動
MOVHPS m64、xmm
0F 17 / r
高パックの単精度浮動小数点値を移動する
MOVAPS xmm1、xmm2 / m128
0F 28 / r
整列されたパックされた単精度浮動小数点値を移動する
MOVAPS xmm2 / m128、xmm1
0F 29 / r
整列されたパックされた単精度浮動小数点値を移動する
MOVNTPS m128、xmm1
0F 2B / r
整列した4パックのシングルFP非時間移動
MOVMSKPS reg、xmm
0F 50 / r
パックされた単精度浮動小数点4ビットサインマスクを抽出します。レジスタの上位ビットはゼロで埋められます。
CVTPI2PS xmm、mm / m64
0F 2A / r
パックされたDword整数をパックされた単精度FP値に変換します
CVTSI2SS xmm、r / m32
F3 0F 2A / r
Dword整数をスカラー単精度FP値に変換する
CVTSI2SS xmm、r / m64
F3 REX.W 0F 2A / r
Qword整数をスカラー単精度FP値に変換します
MOVNTPS m128、xmm
0F 2B / r
非時間的ヒントを使用して、パックされた単精度浮動小数点値を格納します
CVTTPS2PI mm、xmm / m64
0F 2C / r
切り捨てパックされた単精度FP値をパックされたDword整数に変換する
CVTTSS2SI r32、xmm / m32
F3 0F 2C / r
切り捨てスカラー単精度FP値を使用してDword整数に変換する
CVTTSS2SI r64、xmm1 / m32
F3 REX.W 0F 2C / r
切り捨てスカラー単精度FP値を使用してQword整数に変換する
CVTPS2PI mm、xmm / m64
0F 2D / r
パックされた単精度FP値をパックされたDword整数に変換します
CVTSS2SI r32、xmm / m32
F3 0F 2D / r
スカラー単精度FP値をDword整数に変換する
CVTSS2SI r64、xmm1 / m32
F3 REX.W 0F 2D / r
スカラー単精度FP値をQword整数に変換する
UCOMISS xmm1、xmm2 / m32
0F 2E / r
順序付けられていないスカラー単精度浮動小数点値の比較とEFLAGSの設定
COMISS xmm1、xmm2 / m32
0F 2F / r
スカラー順序の単精度浮動小数点値を比較し、EFLAGSを設定します
SQRTPS xmm1、xmm2 / m128
0F 51 / r
パックされた単精度浮動小数点値の平方根を計算します
SQRTSS xmm1、xmm2 / m32
F3 0F 51 / r
スカラー単精度浮動小数点値の平方根を計算する
RSQRTPS xmm1、xmm2 / m128
0F 52 / r
パックされた単精度浮動小数点値の平方根の逆数を計算します
RSQRTSS xmm1、xmm2 / m32
F3 0F 52 / r
スカラー単精度浮動小数点値の平方根の逆数を計算する
RCPPS xmm1、xmm2 / m128
0F 53 / r
パックされた単精度浮動小数点値の逆数を計算する
RCPSS xmm1、xmm2 / m32
F3 0F 53 / r
スカラー単精度浮動小数点値の逆数を計算する
ADDPS xmm1、xmm2 / m128
0F 58 / r
パックされた単精度浮動小数点値を追加します
ADDSS xmm1、xmm2 / m32
F3 0F 58 / r
スカラー単精度浮動小数点値を追加する
MULPS xmm1、xmm2 / m128
0F 59 / r
乗算パックされた単精度浮動小数点値
MULSS xmm1、xmm2 / m32
F3 0F 59 / r
乗算スカラー単精度浮動小数点値
SUBPS xmm1、xmm2 / m128
0F 5C / r
パックされた単精度浮動小数点値を減算します
SUBSS xmm1、xmm2 / m32
F3 0F 5C / r
スカラー単精度浮動小数点値を減算します
MINPS xmm1、xmm2 / m128
0F 5D / r
最小パック単精度浮動小数点値を返します
MINSS xmm1、xmm2 / m32
F3 0F 5D / r
最小スカラー単精度浮動小数点値を返す
DIVPS xmm1、xmm2 / m128
0F 5E / r
パックされた単精度浮動小数点値を除算する
DIVSS xmm1、xmm2 / m32
F3 0F 5E / r
スカラー単精度浮動小数点値を除算する
MAXPS xmm1、xmm2 / m128
0F 5F / r
最大パック単精度浮動小数点値を返します
MAXSS xmm1、xmm2 / m32
F3 0F 5F / r
最大スカラー単精度浮動小数点値を返します LDMXCSR m32 0F AE / 2
MXCSRレジスタ状態のロード STMXCSR m32 0F AE / 3
MXCSR登録状態の保存
CMPPS xmm1、xmm2 / m128、imm8
0F C2 / r ib
パックされた単精度浮動小数点値を比較する
CMPSS xmm1、xmm2 / m32、imm8
F3 0F C2 / r ib
スカラー単精度浮動小数点値を比較する
SHUFPS xmm1、xmm2 / m128、imm8
0F C6 / r ib
シャッフルパックされた単精度浮動小数点値
浮動小数点の単精度ビット演算ANDPS、ANDNPS、ORPS、およびXORPSは、SSE2整数(PAND、PANDN、POR、PXOR)および二重整数(ANDPD、ANDNPD、ORPD、XORPD)と同じ結果を生成しますが、ドメインに余分な遅延をもたらす可能性があります間違ったタイプの値を適用すると変更されます。

SSE2の説明
Pentium4で追加
SSE2SIMD浮動小数点命令編集

SSE2データ移動命令
命令
オペコード
意味
MOVAPD xmm1、xmm2 / m128
66 0F 28 / r
整列されたパックされた倍精度浮動小数点値を移動する
MOVAPD xmm2 / m128、xmm1
66 0F 29 / r
整列されたパックされた倍精度浮動小数点値を移動する
MOVNTPD m128、xmm1
66 0F 2B / r
非時間的ヒントを使用して、パックされた倍精度浮動小数点値を格納します
MOVHPD xmm1、m64
66 0F 16 / r
高パックの倍精度浮動小数点値を移動する
MOVHPD m64、xmm1
66 0F 17 / r
高パックの倍精度浮動小数点値を移動する
MOVLPD xmm1、m64
66 0F 12 / r
低パックの倍精度浮動小数点値を移動する
MOVLPD m64、xmm1
66 0F 13 / r
低パックの倍精度浮動小数点値を移動する
MOVUPD xmm1、xmm2 / m128
66 0F 10 / r
整列されていないパックされた倍精度浮動小数点値を移動する
MOVUPD xmm2 / m128、xmm1
66 0F 11 / r
整列されていないパックされた倍精度浮動小数点値を移動する
MOVMSKPD reg、xmm
66 0F 50 / r
パックされた倍精度浮動小数点サインマスクを抽出します
MOVSD * xmm1、xmm2 / m64
F2 0F 10 / r
スカラー倍精度浮動小数点値の移動またはマージ
MOVSD xmm1 / m64、xmm2
F2 0F 11 / r
スカラー倍精度浮動小数点値の移動またはマージ

SSE2パック算術命令
命令
オペコード
意味
ADDPD xmm1、xmm2 / m128
66 0F 58 / r
パックされた倍精度浮動小数点値を追加します
ADDSD xmm1、xmm2 / m64
F2 0F 58 / r
低い倍精度浮動小数点値を追加する
DIVPD xmm1、xmm2 / m128
66 0F 5E / r
パックされた倍精度浮動小数点値を除算する
DIVSD xmm1、xmm2 / m64
F2 0F 5E / r
スカラー倍精度浮動小数点値を除算する
MAXPD xmm1、xmm2 / m128
66 0F 5F / r
パックされた倍精度浮動小数点値の最大値
MAXSD xmm1、xmm2 / m64
F2 0F 5F / r
最大スカラー倍精度浮動小数点値を返す
MINPD xmm1、xmm2 / m128
66 0F 5D / r
パックされた倍精度浮動小数点値の最小値
MINSD xmm1、xmm2 / m64
F2 0F 5D / r
最小スカラー倍精度浮動小数点値を返す
MULPD xmm1、xmm2 / m128
66 0F 59 / r
乗算パックされた倍精度浮動小数点値
MULSD xmm1、xmm2 / m64
F2 0F 59 / r
スカラー倍精度浮動小数点値を乗算します
SQRTPD xmm1、xmm2 / m128
66 0F 51 / r
倍精度浮動小数点値の平方根
SQRTSD xmm1、xmm2 / m64
F2 0F 51 / r
スカラー倍精度浮動小数点値の平方根を計算する
SUBPD xmm1、xmm2 / m128
66 0F 5C / r
パックされた倍精度浮動小数点値を減算します
SUBSD xmm1、xmm2 / m64
F2 0F 5C / r
スカラー倍精度浮動小数点値を減算します

SSE2論理命令
命令
オペコード
意味
ANDPD xmm1、xmm2 / m128
66 0F 54 / r
パックされた倍精度浮動小数点値のビット単位の論理積
ANDNPD xmm1、xmm2 / m128
66 0F 55 / r
ビット単位の論理積であり、パックされた倍精度浮動小数点値ではありません
ORPD xmm1、xmm2 / m128
66 0F 56 / r
パックされた倍精度浮動小数点値のビット単位の論理OR
XORPD xmm1、xmm2 / m128
66 0F 57 / r
パックされた倍精度浮動小数点値のビット単位の論理XOR

SSE2比較手順
命令
オペコード
意味
CMPPD xmm1、xmm2 / m128、imm8
66 0F C2 / r ib
パックされた倍精度浮動小数点値を比較する
CMPSD * xmm1、xmm2 / m64、imm8
F2 0F C2 / r ib
低い倍精度浮動小数点値を比較する
COMISD xmm1、xmm2 / m64
66 0F 2F / r
スカラー順序の倍精度浮動小数点値を比較し、EFLAGSを設定します
UCOMISD xmm1、xmm2 / m64
66 0F 2E / r
順序付けられていないスカラー倍精度浮動小数点値の比較とEFLAGSの設定

SSE2のシャッフルとアンパックの手順
命令
オペコード
意味
SHUFPD xmm1、xmm2 / m128、imm8
66 0F C6 / r ib
倍精度浮動小数点値のペアのパックインターリーブシャッフル
UNPCKHPD xmm1、xmm2 / m128
66 0F 15 / r
高パックの倍精度浮動小数点値をアンパックしてインターリーブする
UNPCKLPD xmm1、xmm2 / m128
66 0F 14 / r
低パックの倍精度浮動小数点値をアンパックしてインターリーブする

SSE2変換手順
命令
オペコード
意味
CVTDQ2PD xmm1、xmm2 / m64
F3 0F E6 / r
パックされた倍精度整数をパックされた倍精度浮動小数点値に変換する
CVTDQ2PS xmm1、xmm2 / m128
0F 5B / r
パックされたダブルワード整数をパックされた単精度浮動小数点値に変換する
CVTPD2DQ xmm1、xmm2 / m128
F2 0F E6 / r
パックされた倍精度浮動小数点値をパックされた倍精度整数に変換する
CVTPD2PI mm、xmm / m128
66 0F 2D / r
パックされた倍精度FP値をパックされたDword整数に変換します
CVTPD2PS xmm1、xmm2 / m128
66 0F 5A / r
パックされた倍精度浮動小数点値をパックされた単精度浮動小数点値に変換します
CVTPI2PD xmm、mm / m64
66 0F 2A / r
パックされたDword整数をパックされた倍精度FP値に変換します
CVTPS2DQ xmm1、xmm2 / m128
66 0F 5B / r
パックされた単精度浮動小数点値をパックされた符号付きダブルワード整数値に変換します
CVTPS2PD xmm1、xmm2 / m64
0F 5A / r
パックされた単精度浮動小数点値をパックされた倍精度浮動小数点値に変換します
CVTSD2SI r32、xmm1 / m64
F2 0F 2D / r
スカラー倍精度浮動小数点値をダブルワード整数に変換する
CVTSD2SI r64、xmm1 / m64
F2 REX.W 0F 2D / r
スカラー倍精度浮動小数点値を符号拡張を使用してクアッドワード整数に変換する
CVTSD2SS xmm1、xmm2 / m64
F2 0F 5A / r
スカラーの倍精度浮動小数点値をスカラーの単精度浮動小数点値に変換する
CVTSI2SD xmm1、r32 / m32
F2 0F 2A / r
ダブルワード整数をスカラー倍精度浮動小数点値に変換する
CVTSI2SD xmm1、r / m64
F2 REX.W 0F 2A / r
Quadword整数をスカラー倍精度浮動小数点値に変換する
CVTSS2SD xmm1、xmm2 / m32
F3 0F 5A / r
スカラー単精度浮動小数点値をスカラー倍精度浮動小数点値に変換する
CVTTPD2DQ xmm1、xmm2 / m128
66 0F E6 / r
切り捨てパックされた倍精度浮動小数点値をパックされたダブルワード整数に変換する
CVTTPD2PI mm、xmm / m128
66 0F 2C / r
切り捨てパックされた倍精度FP値をパックされたDword整数に変換する
CVTTPS2DQ xmm1、xmm2 / m128
F3 0F 5B / r
切り捨てパックされた単精度浮動小数点値をパックされた符号付きダブルワード整数値に変換します
CVTTSD2SI r32、xmm1 / m64
F2 0F 2C / r
切り捨てスカラー倍精度浮動小数点値を使用して符号付きDword整数に変換する
CVTTSD2SI r64、xmm1 / m64
F2 REX.W 0F 2C / r
切り捨てスカラー倍精度浮動小数点値を使用して符号付きQword整数に変換する
CMPSDおよびMOVSDは、文字列命令ニーモニックCMPSD(CMPS)およびMOVSD(MOVS)と同じ名前です。ただし、前者はスカラー倍精度 浮動小数点を参照し、後者はダブルワード文字列を参照します。

SSE2SIMD整数命令

SSEレジスタに拡張されたSSE2MMXのような命令
SSE2を使用すると、SSEレジスタでMMX命令を実行し、一度に2倍の量のデータを処理できます。
命令
オペコード
意味
MOVD xmm、r / m32
66 0F 6E / r
ダブルワードを移動
MOVD r / m32、xmm
66 0F 7E / r
ダブルワードを移動
MOVQ xmm1、xmm2 / m64
F3 0F 7E / r
クワッドワードを移動
MOVQ xmm2 / m64、xmm1
66 0F D6 / r
クワッドワードを移動
MOVQ r / m64、xmm
66 REX.W 0F 7E / r
クワッドワードを移動
MOVQ xmm、r / m64
66 REX.W 0F 6E / r
クワッドワードを移動
PMOVMSKB reg、xmm
66 0F D7 / r
バイトマスクを移動し、レジスタの上位ビットをゼロにします
PEXTRW reg、xmm、imm8
66 0F C5 / r ib
指定されたワードを抽出してregに移動し、ビット15〜0を設定し、残りをゼロにします
PINSRW xmm、r32 / m16、imm8
66 0F C4 / r ib
指定された単語位置に下位単語を移動します
PACKSSDW xmm1、xmm2 / m128
66 0F 6B / r
4つのパックされた符号付きダブルワード整数を飽和状態の8つのパックされた符号付きワード整数に変換します
PACKSSWB xmm1、xmm2 / m128
66 0F 63 / r
8個のパックされた符号付きワード整数を飽和状態の16個のパックされた符号付きバイト整数に変換します
PACKUSWB xmm1、xmm2 / m128
66 0F 67 / r
8つの符号付きワード整数を飽和状態の16の符号なしバイト整数に変換します
PADDB xmm1、xmm2 / m128
66 0F FC / r
パックされたバイト整数を追加します
PADDW xmm1、xmm2 / m128
66 0F FD / r
パックされた単語の整数を追加します
PADDD xmm1、xmm2 / m128
66 0F FE / r
パックされたダブルワード整数を追加します
PADDQ xmm1、xmm2 / m128
66 0F D4 / r
パックされたクアッドワード整数を追加します。
PADDSB xmm1、xmm2 / m128
66 0F EC / r
飽和状態のパックされた符号付きバイト整数を追加します
PADDSW xmm1、xmm2 / m128
66 0F ED / r
飽和したパックされた符号付き単語整数を追加します
PADDUSB xmm1、xmm2 / m128
66 0F DC / r
飽和したパックされた符号なしバイト整数を追加します
PADDUSW xmm1、xmm2 / m128
66 0F DD / r
飽和したパックされた符号なしワード整数を追加します
パンドxmm1、xmm2 / m128
66 0F DB / r
ビットごとのAND
PANDN xmm1、xmm2 / m128
66 0F DF / r
ビットごとではなく
POR xmm1、xmm2 / m128
66 0F EB / r
ビットごとのOR
PXOR xmm1、xmm2 / m128
66 0F EF / r
ビット単位のXOR
PCMPEQB xmm1、xmm2 / m128
66 0F 74 / r
パックされたバイトが等しいかどうかを比較します。
PCMPEQW xmm1、xmm2 / m128
66 0F 75 / r
パックされた単語が等しいかどうかを比較します。
PCMPEQD xmm1、xmm2 / m128
66 0F 76 / r
パックされたダブルワードが等しいかどうかを比較します。
PCMPGTB xmm1、xmm2 / m128
66 0F 64 / r
パックされた符号付きバイト整数を比較して、
PCMPGTW xmm1、xmm2 / m128
66 0F 65 / r
パックされた符号付き単語の整数を
PCMPGTD xmm1、xmm2 / m128
66 0F 66 / r
パックされた符号付きダブルワード整数を大なり記号と比較します
PMULLW xmm1、xmm2 / m128
66 0F D5 / r
飽和した符号付きワード整数を乗算します
PMULHW xmm1、xmm2 / m128
66 0F E5 / r
パックされた符号付きワード整数を乗算し、結果の上位16ビットを格納します
PMULHUW xmm1、xmm2 / m128
66 0F E4 / r
乗算された符号なしワード整数、結果の上位16ビットを格納します
PMULUDQ xmm1、xmm2 / m128
66 0F F4 / r
乗算パックされた符号なしダブルワード整数
PSLLW xmm1、xmm2 / m128
66 0F F1 / r
0秒でシフトしながら単語を左にシフト
PSLLW xmm1、imm8
66 0F 71/6 ib
0秒でシフトしながら単語を左にシフト
PSLLD xmm1、xmm2 / m128
66 0F F2 / r
0秒でシフトしながらダブルワードを左にシフト
PSLLD xmm1、imm8
66 0F 72/6 ib
0秒でシフトしながらダブルワードを左にシフト
PSLLQ xmm1、xmm2 / m128
66 0F F3 / r
0秒でシフトしながらクアドワードを左にシフト
PSLLQ xmm1、imm8
66 0F 73/6 ib
0秒でシフトしながらクアドワードを左にシフト
PSRAD xmm1、xmm2 / m128
66 0F E2 / r
サインビットをシフトしながらダブルワードを右にシフト
PSRAD xmm1、imm8
66 0F 72/4 ib
符号ビットをシフトしながらダブルワードを右にシフト
PSRAW xmm1、xmm2 / m128
66 0F E1 / r
符号ビットをシフトしながら単語を右にシフト
PSRAW xmm1、imm8
66 0F 71/4 ib
符号ビットをシフトしながら単語を右にシフト
PSRLW xmm1、xmm2 / m128
66 0F D1 / r
0秒でシフトしながら単語を右にシフト
PSRLW xmm1、imm8
66 0F 71/2 ib
0秒でシフトしながら単語を右にシフト
PSRLD xmm1、xmm2 / m128
66 0F D2 / r
0秒でシフトしながらダブルワードを右にシフト
PSRLD xmm1、imm8
66 0F 72/2 ib
0秒でシフトしながらダブルワードを右にシフト
PSRLQ xmm1、xmm2 / m128
66 0F D3 / r
0秒でシフトしながらクアドワードを右にシフト
PSRLQ xmm1、imm8
66 0F 73/2 ib
0秒でシフトしながらクアドワードを右にシフト
PSUBB xmm1、xmm2 / m128
66 0F F8 / r
パックされたバイト整数を減算します
PSUBW xmm1、xmm2 / m128
66 0F F9 / r
パックされた単語の整数を減算します
PSUBD xmm1、xmm2 / m128
66 0F FA / r
パックされたダブルワード整数を減算します
PSUBQ xmm1、xmm2 / m128
66 0F FB / r
パックされたクアッドワード整数を減算します。
PSUBSB xmm1、xmm2 / m128
66 0F E8 / r
飽和状態のパックされた符号付きバイト整数を減算します
PSUBSW xmm1、xmm2 / m128
66 0F E9 / r
飽和したパックされた符号付きワード整数を減算します
PMADDWD xmm1、xmm2 / m128
66 0F F5 / r
パックされたワード整数を乗算し、隣接するダブルワードの結果を追加します
PSUBUSB xmm1、xmm2 / m128
66 0F D8 / r
飽和したパックされた符号なしバイト整数を減算します
PSUBUSW xmm1、xmm2 / m128
66 0F D9 / r
飽和したパックされた符号なしワード整数を減算します
PUNPCKHBW xmm1、xmm2 / m128
66 0F 68 / r
上位バイトをアンパックしてインターリーブする
PUNPCKHWD xmm1、xmm2 / m128
66 0F 69 / r
上位の単語を解凍してインターリーブする
PUNPCKHDQ xmm1、xmm2 / m128
66 0F 6A / r
上位のダブルワードを解凍してインターリーブします
PUNPCKLBW xmm1、xmm2 / m128
66 0F 60 / r
下位バイトをインターリーブする
PUNPCKLWD xmm1、xmm2 / m128
66 0F 61 / r
下位の単語をインターリーブする
PUNPCKLDQ xmm1、xmm2 / m128
66 0F 62 / r
下位のダブルワードをインターリーブする
PAVGB xmm1、xmm2 / m128
66 0F E0、/ r
丸められた平均パック符号なしバイト整数
PAVGW xmm1、xmm2 / m128
66 0F E3 / r
丸められた平均パック符号なしワード整数
PMINUB xmm1、xmm2 / m128
66 0F DA / r
パックされた符号なしバイト整数を比較し、パックされた最小値を格納します
PMINSW xmm1、xmm2 / m128
66 0F EA / r
パックされた符号付きワード整数を比較し、パックされた最小値を格納します
PMAXSW xmm1、xmm2 / m128
66 0F EE / r
パックされた符号付きワード整数を比較し、パックされた最大値を格納します
PMAXUB xmm1、xmm2 / m128
66 0F DE / r
パックされた符号なしバイト整数を比較し、パックされた最大値を格納します
PSADBW xmm1、xmm2 / m128
66 0F F6 / r
パックされた符号なしバイト整数の絶対差を計算します。次に、8つの低い差と8つの高い差が別々に合計され、2つの符号なしワード整数の結果が生成されます。

SSEレジスタ専用のSSE2整数命令
次の命令は、その性質上MMXレジスタでは機能しないため、SSEレジスタでのみ使用できます。
命令
オペコード
意味
MASKMOVDQU xmm1、xmm2
66 0F F7 / r
XMMレジスタからメモリへの選択されたバイトの非一時的な保存
MOVDQ2Q mm、xmm
F2 0F D6 / r
ロークワッドワードをXMMからMMXレジスタに移動します。
MOVDQA xmm1、xmm2 / m128
66 0F 6F / r
整列されたダブルクワッドワードを移動する
MOVDQA xmm2 / m128、xmm1
66 0F 7F / r
整列されたダブルクワッドワードを移動する
MOVDQU xmm1、xmm2 / m128
F3 0F 6F / r
整列されていないダブルクワッドワードを移動する
MOVDQU xmm2 / m128、xmm1
F3 0F 7F / r
整列されていないダブルクワッドワードを移動する
MOVQ2DQ xmm、mm
F3 0F D6 / r
クアッドワードをMMXレジスタからXMMレジスタの下位クアッドワードに移動します
MOVNTDQ m128、xmm1
66 0F E7 / r
非時間的ヒントを使用してパックされた整数を格納する
PSHUFHW xmm1、xmm2 / m128、imm8
F3 0F 70 / r ib
シャッフルは高い言葉を詰め込んだ。
PSHUFLW xmm1、xmm2 / m128、imm8
F2 0F 70 / r ib
シャッフルは低い言葉を詰め込んだ。
PSHUFD xmm1、xmm2 / m128、imm8
66 0F 70 / r ib
パックされたダブルワードをシャッフルします。
PSLLDQ xmm1、imm8
66 0F 73/7 ib
パックされたシフト左論理ダブルクアドワード。
PSRLDQ xmm1、imm8
66 0F 73/3 ib
パックされた右シフト論理ダブルクアドワード。
PUNPCKHQDQ xmm1、xmm2 / m128
66 0F 6D / r
高次のクアドワードを解凍してインターリーブし、
PUNPCKLQDQ xmm1、xmm2 / m128
66 0F 6C / r
低クアドワードをインターリーブし、

SSE3の説明
SSE3をサポートするPentium4が追加されました

SSE3SIMD浮動小数点命令
命令
オペコード
意味
ノート
ADDSUBPS xmm1、xmm2 / m128
F2 0F D0 / r
単精度浮動小数点値の加算/減算
複素算術用
ADDSUBPD xmm1、xmm2 / m128
66 0F D0 / r
倍精度浮動小数点値の加算/減算
MOVDDUP xmm1、xmm2 / m64
F2 0F 12 / r
倍精度浮動小数点値を移動して複製
MOVSLDUP xmm1、xmm2 / m128
F3 0F 12 / r
偶数インデックスの単精度浮動小数点値を移動して複製します
MOVSHDUP xmm1、xmm2 / m128
F3 0F 16 / r
奇数インデックスの単精度浮動小数点値を移動して複製する
HADDPS xmm1、xmm2 / m128
F2 0F 7C / r
パックされた単精度浮動小数点値を水平方向に追加します
グラフィック用
HADDPD xmm1、xmm2 / m128
66 0F 7C / r
パックされた倍精度浮動小数点値を水平方向に追加
HSUBPS xmm1、xmm2 / m128
F2 0F 7D / r
パックされた単精度浮動小数点値を水平方向に減算します
HSUBPD xmm1、xmm2 / m128
66 0F 7D / r
パックされた倍精度浮動小数点値を水平方向に減算します

SSE3SIMD整数命令
命令
オペコード
意味
ノート
LDDQU xmm1、mem
F2 0F F0 / r
アラインされていないデータをロードし、ダブルクワッドワードを返します
教育的にはMOVDQUと同等です。ビデオエンコーディング用

SSSE3の説明
追加しましたXeonプロセッサ5100シリーズおよび初期のCore 2
SSEレジスタに拡張された次のMMXのような命令は、SSSE3で追加されました。
命令
オペコード
意味
PSIGNB xmm1、xmm2 / m128
66 0F 38 08 / r
対応する符号に応じて、パックされたバイト整数を否定/ゼロ/保持します
PSIGNW xmm1、xmm2 / m128
66 0F 38 09 / r
対応する符号に応じて、パックされた単語の整数を否定/ゼロ/保持します
PSIGND xmm1、xmm2 / m128
66 0F 38 0A / r
対応するものに応じて、パックされたダブルワード整数を否定/ゼロ/保持します
PSHUFB xmm1、xmm2 / m128
66 0F 38 00 / r
バイトをシャッフルする
PMULHRSW xmm1、xmm2 / m128
66 0F 38 0B / r
16ビットの符号付きワードを乗算し、符号付きダブルワードをスケーリングおよびラウンドし、上位16ビットをパックします。
PMADDUBSW xmm1、xmm2 / m128
66 0F 38 04 / r
符号付きバイトと符号なしバイトを乗算し、符号付きワードの水平ペアを追加し、飽和した符号付きワードをパックします
PHSUBW xmm1、xmm2 / m128
66 0F 38 05 / r
16ビットの符号付き整数を水平方向に減算してパックします
PHSUBSW xmm1、xmm2 / m128
66 0F 38 07 / r
16ビットの符号付き整数を減算して、飽和状態で水平方向にパックします。
PHSUBD xmm1、xmm2 / m128
66 0F 38 06 / r
32ビットの符号付き整数を水平方向に減算してパックします
PHADDSW xmm1、xmm2 / m128
66 0F 38 03 / r
16ビット符号付き整数を飽和状態で水平方向に追加およびパックします
PHADDW xmm1、xmm2 / m128
66 0F 38 01 / r
16ビット整数を水平方向に追加およびパックします
PHADDD xmm1、xmm2 / m128
66 0F 38 02 / r
32ビット整数を水平方向に追加およびパックします
PALIGNR xmm1、xmm2 / m128、imm8
66 0F 3A 0F / r ib
宛先オペランドとソースオペランドを連結し、右にシフトされたバイト整列結果を抽出します
PABSB xmm1、xmm2 / m128
66 0F 38 1C / r
バイトの絶対値を計算し、符号なしの結果を格納します
PABSW xmm1、xmm2 / m128
66 0F 38 1D / r
16ビット整数の絶対値を計算し、符号なしの結果を格納します
PABSD xmm1、xmm2 / m128
66 0F 38 1E / r
32ビット整数の絶対値を計算し、符号なしの結果を格納します
SSE4の説明編集

SSE4.1
45nmで製造されたCore2が追加されました

SSE4.1SIMD浮動小数点命令
命令
オペコード
意味
DPPS xmm1、xmm2 / m128、imm8
66 0F 3A 40 / r ib
パックされたSP浮動小数点値を選択的に乗算し、追加して選択的に格納します
DPPD xmm1、xmm2 / m128、imm8
66 0F 3A 41 / r ib
パックされたDP浮動小数点値を選択的に乗算し、追加して選択的に格納します
ブレンドxmm1、xmm2 / m128、imm8
66 0F 3A 0C / r ib
指定されたマスクからパックされた単精度浮動小数点値を選択します
BLENDVPS xmm1、xmm2 / m128、
66 0F 38 14 / r
指定されたマスクからパックされた単精度浮動小数点値を選択します
BLENDPD xmm1、xmm2 / m128、imm8
66 0F 3A 0D / r ib
指定されたマスクからパックされたDP-FP値を選択します
BLENDVPD xmm1、xmm2 / m128、
66 0F 38 15 / r
指定されたマスクからパックされたDPFP値を選択します
ラウンドxmm1、xmm2 / m128、imm8
66 0F 3A 08 / r ib
ラウンドパックされた単精度浮動小数点値
ラウンドxmm1、xmm2 / m32、imm8
66 0F 3A 0A / r ib
低パックの単精度浮動小数点値を丸めます
ROUNDPD xmm1、xmm2 / m128、imm8
66 0F 3A 09 / r ib
ラウンドパックされた倍精度浮動小数点値
ROUNDSD xmm1、xmm2 / m64、imm8
66 0F 3A 0B / r ib
低パックの倍精度浮動小数点値を丸めます
INSERTPS xmm1、xmm2 / m32、imm8
66 0F 3A 21 / r ib
選択した単精度浮動小数点値を指定した宛先要素に挿入し、宛先要素をゼロにします
EXTRACTPS reg / m32、xmm1、imm8
66 0F 3A 17 / r ib
指定されたオフセットで単精度浮動小数点値を1つ抽出し、結果を格納します(該当する場合はゼロ拡張)

SSE4.1SIMD整数命令
命令
オペコード
意味
MPSADBW xmm1、xmm2 / m128、imm8
66 0F 3A 42 / r ib
開始オフセットを使用して、4バイト整数の隣接グループの絶対8ビット整数差を合計します
PHMINPOSUW xmm1、xmm2 / m128
66 0F 38 41 / r
最小の符号なしワードを見つける
PMULLD xmm1、xmm2 / m128
66 0F 38 40 / r
パックされたdword符号付き整数を乗算し、下位32ビットを格納します
PMULDQ xmm1、xmm2 / m128
66 0F 38 28 / r
パックされた符号付きダブルワード整数を乗算し、クアッドワードの結果を格納します
PBLENDVB xmm1、xmm2 / m128、
66 0F 38 10 / r
指定されたマスクからバイト値を選択します
PBLENDW xmm1、xmm2 / m128、imm8
66 0F 3A 0E / r ib
指定されたマスクから単語を選択します
PMINSB xmm1、xmm2 / m128
66 0F 38 38 / r
パックされた符号付きバイト整数を比較する
PMINUW xmm1、xmm2 / m128
66 0F 38 3A / r
パックされた符号なしワード整数を比較する
PMINSD xmm1、xmm2 / m128
66 0F 38 39 / r
パックされた符号付きdword整数を比較します
PMINUD xmm1、xmm2 / m128
66 0F 38 3B / r
パックされた符号なしdword整数を比較します
PMAXSB xmm1、xmm2 / m128
66 0F 38 3C / r
パックされた符号付きバイト整数を比較する
PMAXUW xmm1、xmm2 / m128
66 0F 38 3E / r
パックされた符号なしワード整数を比較する
PMAXSD xmm1、xmm2 / m128
66 0F 38 3D / r
パックされた符号付きdword整数を比較します
PMAXUD xmm1、xmm2 / m128
66 0F 38 3F / r
パックされた符号なしdword整数を比較します
PINSRB xmm1、r32 / m8、imm8
66 0F 3A 20 / r ib
指定された宛先要素にバイト整数値を挿入します
PINSRD xmm1、r / m32、imm8
66 0F 3A 22 / r ib
指定された宛先要素にdword整数値を挿入します
PINSRQ xmm1、r / m64、imm8
66 REX.W 0F 3A 22 / r ib
指定された宛先要素にqword整数値を挿入します
PEXTRB reg / m8、xmm2、imm8
66 0F 3A 14 / r ib
ソースバイトオフセットでバイト整数値を抽出します。上位ビットはゼロになります。
PEXTRW reg / m16、xmm、imm8
66 0F 3A 15 / r ib
ワードを抽出し、ゼロ拡張の下位16ビットにコピーします
PEXTRD r / m32、xmm2、imm8
66 0F 3A 16 / r ib
ソースdwordオフセットでdword整数値を抽出します
PEXTRQ r / m64、xmm2、imm8
66 REX.W 0F 3A 16 / r ib
ソースqwordオフセットでqword整数値を抽出します
PMOVSXBW xmm1、xmm2 / m64
66 0f 38 20 / r
8つのパックされた8ビット整数を8つのパックされた16ビット整数に符号拡張します。
PMOVZXBW xmm1、xmm2 / m64
66 0f 38 30 / r
8つのパックされた8ビット整数を8つのパックされた16ビット整数にゼロ拡張します
PMOVSXBD xmm1、xmm2 / m32
66 0f 38 21 / r
4つのパックされた8ビット整数を4つのパックされた32ビット整数に符号拡張します。
PMOVZXBD xmm1、xmm2 / m32
66 0f 38 31 / r
4つのパックされた8ビット整数を4つのパックされた32ビット整数にゼロ拡張します
PMOVSXBQ xmm1、xmm2 / m16
66 0f 38 22 / r
2つのパックされた8ビット整数を2つのパックされた64ビット整数に符号拡張
PMOVZXBQ xmm1、xmm2 / m16
66 0f 38 32 / r
2つのパックされた8ビット整数を2つのパックされた64ビット整数にゼロ拡張します
PMOVSXWD xmm1、xmm2 / m64
66 0f 38 23 / r
4つのパックされた16ビット整数を4つのパックされた32ビット整数に符号拡張します。
PMOVZXWD xmm1、xmm2 / m64
66 0f 38 33 / r
4つのパックされた16ビット整数を4つのパックされた32ビット整数にゼロ拡張します。
PMOVSXWQ xmm1、xmm2 / m32
66 0f 38 24 / r
2つのパックされた16ビット整数を2つのパックされた64ビット整数に符号拡張
PMOVZXWQ xmm1、xmm2 / m32
66 0f 38 34 / r
2つのパックされた16ビット整数を2つのパックされた64ビット整数にゼロ拡張します
PMOVSXDQ xmm1、xmm2 / m64
66 0f 38 25 / r
2つのパックされた32ビット整数を2つのパックされた64ビット整数に符号拡張
PMOVZXDQ xmm1、xmm2 / m64
66 0f 38 35 / r
2つのパックされた32ビット整数を2つのパックされた64ビット整数にゼロ拡張します
PTEST xmm1、xmm2 / m128
66 0F 38 17 / r
ANDの結果がすべて0の場合はZFを設定し、ANDNOTの結果がすべて0の場合はCFを設定します
PCMPEQQ xmm1、xmm2 / m128
66 0F 38 29 / r
パックされたqwordsが等しいかどうかを比較します
PACKUSDW xmm1、xmm2 / m128
66 0F 38 2B / r
2×4のパックされた符号付きダブルワード整数を飽和状態の8つのパックされた符号なしワード整数に変換します
MOVNTDQA xmm1、m128
66 0F 38 2A / r
WCメモリタイプの場合、非テンポラルヒントを使用してダブルクワッドワードを移動します

SSE4a
Phenomプロセッサーで追加
EXTRQ / INSERTQ
MOVNTSD / MOVNTSS

SSE4.2
Nehalemプロセッサで追加
命令
オペコード
意味
PCMPESTRI xmm1、xmm2 / m128、imm8
66 0F 3A 61 / r imm8
明示的な長さの文字列データのパック比較、インデックスの生成
PCMPESTRM xmm1、xmm2 / m128、imm8
66 0F 3A 60 / r imm8
明示的な長さの文字列データのパック比較、マスクの生成
PCMPISTRI xmm1、xmm2 / m128、imm8
66 0F 3A 63 / r imm8
文字列データと暗黙の長さのパックされた比較、インデックスの生成
PCMPISTRM xmm1、xmm2 / m128、imm8
66 0F 3A 62 / r imm8
文字列データと暗黙の長さのパックされた比較、マスクの生成
PCMPGTQ xmm1、xmm2 / m128
66 0F 38 37 / r
パックされた署名付きqwordを大なり記号と比較します。

SSE5から派生した命令
SSE5は、AMDによって提案されたSSE拡張命令でした。バンドルにはIntelのSSE4命令の完全なセットが含まれていなかったため、後継ではなくSSE4の競合製品になりました。AMDは当初提案されたようにSSE5を実装しないことを選択しましたが、派生したSSE拡張が導入されました。

XOP
ブルドーザープロセッサコアで導入され、Zen(マイクロアーキテクチャ)以降から再び削除されました。
ほとんどのSSE5命令セットの改訂

F16C
半精度浮動小数点変換。 命令 意味
VCVTPH2PS xmmreg、xmmrm64
メモリまたはXMMレジスタの下半分の4つの半精度浮動小数点値をXMMレジスタの4つの単精度浮動小数点値に変換します
VCVTPH2PS ymmreg、xmmrm128
メモリまたはXMMレジスタ(YMMレジスタの下半分)の8つの半精度浮動小数点値をYMMレジスタの8つの単精度浮動小数点値に変換します
VCVTPS2PH xmmrm64、xmmreg、imm8
XMMレジスタ内の4つの単精度浮動小数点値をメモリ内の半精度浮動小数点値またはXMMレジスタの下半分に変換します
VCVTPS2PH xmmrm128、ymmreg、imm8
YMMレジスタ内の8つの単精度浮動小数点値をメモリまたはXMMレジスタ内の半精度浮動小数点値に変換します

FMA3
2014年以降、Piledriverアーキテクチャ以降のAMDプロセッサ、およびHaswellプロセッサとBroadwellプロセッサ以降のIntelでサポートされています。
3つのオペランドを使用した積和演算(浮動小数点ベクトルの積和演算)を融合しました。
命令
意味 VFMADD132PD 融合乗算-パックされた倍精度浮動小数点値の加算 VFMADD213PD 融合乗算-パックされた倍精度浮動小数点値の加算 VFMADD231PD 融合乗算-パックされた倍精度浮動小数点値の加算 VFMADD132PS 融合乗算-パックされた単精度浮動小数点値の加算 VFMADD213PS 融合乗算-パックされた単精度浮動小数点値の加算 VFMADD231PS 融合乗算-パックされた単精度浮動小数点値の加算 VFMADD132SD 融合乗算-スカラー倍精度浮動小数点値の加算 VFMADD213SD 融合乗算-スカラー倍精度浮動小数点値の加算 VFMADD231SD 融合乗算-スカラー倍精度浮動小数点値の加算 VFMADD132SS 融合乗算-スカラー単精度浮動小数点値の加算 VFMADD213SS 融合乗算-スカラー単精度浮動小数点値の加算 VFMADD231SS 融合乗算-スカラー単精度浮動小数点値の加算 VFMADDSUB132PD パックされた倍精度浮動小数点値の乗算-交互加算/減算の融合 VFMADDSUB213PD パックされた倍精度浮動小数点値の乗算-交互加算/減算の融合 VFMADDSUB231PD パックされた倍精度浮動小数点値の乗算-交互加算/減算の融合 VFMADDSUB132PS パックされた単精度浮動小数点値の乗算-交互加算/減算の融合 VFMADDSUB213PS パックされた単精度浮動小数点値の乗算-交互加算/減算の融合 VFMADDSUB231PS パックされた単精度浮動小数点値の乗算-交互加算/減算の融合 VFMSUB132PD パックされた倍精度浮動小数点値の融合乗算-減算 VFMSUB213PD パックされた倍精度浮動小数点値の融合乗算-減算 VFMSUB231PD パックされた倍精度浮動小数点値の融合乗算-減算 VFMSUB132PS パックされた単精度浮動小数点値の融合乗算-減算 VFMSUB213PS パックされた単精度浮動小数点値の融合乗算-減算 VFMSUB231PS パックされた単精度浮動小数点値の融合乗算-減算 VFMSUB132SD 融合乗算-スカラー倍精度浮動小数点値の減算 VFMSUB213SD 融合乗算-スカラー倍精度浮動小数点値の減算 VFMSUB231SD 融合乗算-スカラー倍精度浮動小数点値の減算 VFMSUB132SS 融合乗算-スカラー単精度浮動小数点値の減算 VFMSUB213SS 融合乗算-スカラー単精度浮動小数点値の減算 VFMSUB231SS 融合乗算-スカラー単精度浮動小数点値の減算 VFMSUBADD132PD パックされた倍精度浮動小数点値の乗算-交互減算/加算の融合 VFMSUBADD213PD パックされた倍精度浮動小数点値の乗算-交互減算/加算の融合 VFMSUBADD231PD パックされた倍精度浮動小数点値の乗算-交互減算/加算の融合 VFMSUBADD132PS パックされた単精度浮動小数点値の乗算-交互減算/加算の融合 VFMSUBADD213PS パックされた単精度浮動小数点値の乗算-交互減算/加算の融合 VFMSUBADD231PS パックされた単精度浮動小数点値の乗算-交互減算/加算の融合 VFNMADD132PD 融合された負の乗算-パックされた倍精度浮動小数点値の加算 VFNMADD213PD 融合された負の乗算-パックされた倍精度浮動小数点値の加算 VFNMADD231PD 融合された負の乗算-パックされた倍精度浮動小数点値の加算 VFNMADD132PS 融合された負の乗算-パックされた単精度浮動小数点値の加算 VFNMADD213PS 融合された負の乗算-パックされた単精度浮動小数点値の加算 VFNMADD231PS 融合された負の乗算-パックされた単精度浮動小数点値の加算 VFNMADD132SD 融合された負の乗算-スカラー倍精度浮動小数点値の加算 VFNMADD213SD 融合された負の乗算-スカラー倍精度浮動小数点値の加算 VFNMADD231SD 融合された負の乗算-スカラー倍精度浮動小数点値の加算 VFNMADD132SS 融合された負の乗算-スカラー単精度浮動小数点値の加算 VFNMADD213SS 融合された負の乗算-スカラー単精度浮動小数点値の加算 VFNMADD231SS 融合された負の乗算-スカラー単精度浮動小数点値の加算 VFNMSUB132PD パックされた倍精度浮動小数点値の融合された負の乗算-減算 VFNMSUB213PD パックされた倍精度浮動小数点値の融合された負の乗算-減算 VFNMSUB231PD パックされた倍精度浮動小数点値の融合された負の乗算-減算 VFNMSUB132PS パックされた単精度浮動小数点値の融合された負の乗算-減算 VFNMSUB213PS パックされた単精度浮動小数点値の融合された負の乗算-減算 VFNMSUB231PS パックされた単精度浮動小数点値の融合された負の乗算-減算 VFNMSUB132SD 融合された負の乗算-スカラー倍精度浮動小数点値の減算 VFNMSUB213SD 融合された負の乗算-スカラー倍精度浮動小数点値の減算 VFNMSUB231SD 融合された負の乗算-スカラー倍精度浮動小数点値の減算 VFNMSUB132SS 融合された負の乗算-スカラー単精度浮動小数点値の減算 VFNMSUB213SS 融合された負の乗算-スカラー単精度浮動小数点値の減算 VFNMSUB231SS 融合された負の乗算-スカラー単精度浮動小数点値の減算

FMA4
ブルドーザーアーキテクチャ以降のAMDプロセッサでサポートされています。2017年現在、どのIntelチップでもサポートされ
4つのオペランドを使用した乗算乗算と加算の融合。FMA4は、FMA3より前のハードウェアで実現されていました。
命令
オペコード
意味
ノート
VFMADDPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 69 / r / is4
融合乗算-パックされた倍精度浮動小数点値の加算
VFMADDPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 68 / r / is4
融合乗算-パックされた単精度浮動小数点値の加算
VFMADDSD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6B / r / is4
融合乗算-スカラー倍精度浮動小数点値の加算
VFMADDSS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6A / r / is4
融合乗算-スカラー単精度浮動小数点値の加算
VFMADDSUBPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 5D / r / is4
パックされた倍精度浮動小数点値の乗算-交互加算/減算の融合
VFMADDSUBPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 5C / r / is4
パックされた単精度浮動小数点値の乗算-交互加算/減算の融合
VFMSUBADDPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 5F / r / is4
パックされた倍精度浮動小数点値の乗算-交互減算/加算の融合
VFMSUBADDPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 5E / r / is4
パックされた単精度浮動小数点値の乗算-交互減算/加算の融合
VFMSUBPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6D / r / is4
パックされた倍精度浮動小数点値の融合乗算-減算
VFMSUBPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6C / r / is4
パックされた単精度浮動小数点値の融合乗算-減算
VFMSUBSD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6F / r / is4
融合乗算-スカラー倍精度浮動小数点値の減算
VFMSUBSS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 6E / r / is4
融合乗算-スカラー単精度浮動小数点値の減算
VFNMADDPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 79 / r / is4
融合された負の乗算-パックされた倍精度浮動小数点値の加算
VFNMADDPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 78 / r / is4
融合された負の乗算-パックされた単精度浮動小数点値の加算
VFNMADDSD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7B / r / is4
融合された負の乗算-スカラー倍精度浮動小数点値の加算
VFNMADDSS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7A / r / is4
融合された負の乗算-スカラー単精度浮動小数点値の加算
VFNMSUBPD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7D / r / is4
パックされた倍精度浮動小数点値の融合された負の乗算-減算
VFNMSUBPS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7C / r / is4
パックされた単精度浮動小数点値の融合された負の乗算-減算
VFNMSUBSD xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7F / r / is4
融合された負の乗算-スカラー倍精度浮動小数点値の減算
VFNMSUBSS xmm0、xmm1、xmm2、xmm3
C4E3 WvvvvL01 7E / r / is4
融合された負の乗算-スカラー単精度浮動小数点値の減算

AVX
AVXは、Sandy Bridgeを搭載したIntelと、Bulldozerを搭載したAMDによって最初にサポートされました。
256ビットレジスタのベクトル演算。
命令 説明
VBROADCASTSS 32ビット、64ビット、または128ビットのメモリオペランドをXMMまたはYMMベクトルレジスタのすべての要素にコピーします。VBROADCASTSD VBROADCASTF128
VINSERTF128 256ビットのYMMレジスタの下半分または上半分を128ビットのソースオペランドの値に置き換えます。宛先の残りの半分は変更され
VEXTRACTF128 256ビットYMMレジスタの下半分または上半分のいずれかを抽出し、その値を128ビットのデスティネーションオペランドにコピーします。
VMASKMOVPS SIMDベクトルメモリオペランドから任意の数の要素を条件付きでデスティネーションレジスタに読み取り、残りのベクトル要素を未読のままにして、デスティネーションレジスタの対応する要素をゼロに設定します。または、SIMDベクトルレジスタオペランドからベクトルメモリオペランドに任意の数の要素を条件付きで書き込み、メモリオペランドの残りの要素は変更しません。AMD Jaguarプロセッサアーキテクチャでは、メモリソースオペランドを使用したこの命令は、マスクがゼロの場合に300クロックサイクル以上かかります。この場合、命令は何もしません。これは設計上の欠陥のようです。 VMASKMOVPD VPERMILPS レーン内の順列。1つの入力オペランドの32ビットまたは64ビットのベクトル要素をシャッフルします。これらはレーン内の256ビット命令です。つまり、2つの別々の128ビットシャッフルですべての256ビットで動作するため、128ビットレーン間でシャッフルすることはできません。 VPERMILPD VPERM2F128 2つの256ビットソースオペランドの4つの128ビットベクトル要素を256ビットのデスティネーションオペランドにシャッフルし、即値定数をセレクタとして使用します。
VZEROALL すべてのYMMレジスタをゼロに設定し、未使用としてタグ付けします。128ビット使用と256ビット使用を切り替えるときに使用されます。
VZEROUPPER すべてのYMMレジスタの上半分をゼロに設定します。128ビット使用と256ビット使用を切り替えるときに使用されます。

AVX2
IntelのHaswellマイクロアーキテクチャとAMDのExcavatorで導入されました。
ほとんどのベクトル整数SSEおよびAVX命令の256ビットへの拡張
命令 説明
VBROADCASTSS 32ビットまたは64ビットのレジスタオペランドをXMMまたはYMMベクトルレジスタのすべての要素にコピーします。これらは、AVX1の同じ命令のレジスタバージョンです。128ビットバージョンはありませんが、VINSERTF128を使用して同じ効果を簡単に実現できます。 VBROADCASTSD VPBROADCASTB 8、16、32、または64ビットの整数レジスタまたはメモリオペランドをXMMまたはYMMベクトルレジスタのすべての要素にコピーします。VPBROADCASTW VPBROADCASTD VPBROADCASTQ
VBROADCASTI128 128ビットのメモリオペランドをYMMベクトルレジスタのすべての要素にコピーします。
VINSERTI128 256ビットのYMMレジスタの下半分または上半分を128ビットのソースオペランドの値に置き換えます。宛先の残りの半分は変更され
VEXTRACTI128 256ビットYMMレジスタの下半分または上半分のいずれかを抽出し、その値を128ビットのデスティネーションオペランドにコピーします。
VGATHERDPD 32ビットまたは64ビットのインデックスとスケールを使用して、単精度または倍精度の浮動小数点値を収集します。VGATHERQPD VGATHERDPS VGATHERQPS
VPGATHERDD 32ビットまたは64ビットのインデックスとスケールを使用して32ビットまたは64ビットの整数値を収集します。VPGATHERDQ VPGATHERQD VPGATHERQQ
VPMASKMOVD SIMDベクトルメモリオペランドから任意の数の要素を条件付きでデスティネーションレジスタに読み取り、残りのベクトル要素を未読のままにして、デスティネーションレジスタの対応する要素をゼロに設定します。または、SIMDベクトルレジスタオペランドからベクトルメモリオペランドに任意の数の要素を条件付きで書き込み、メモリオペランドの残りの要素は変更しません。 VPMASKMOVQ VPERMPS 1つの256ビットソースオペランドの8つの32ビットベクトル要素を、レジスタまたはメモリオペランドをセレクタとして使用して、256ビットのデスティネーションオペランドにシャッフルします。 VPERMD VPERMPD 1つの256ビットソースオペランドの4つの64ビットベクトル要素を、レジスタまたはメモリオペランドをセレクタとして使用して、256ビットのデスティネーションオペランドにシャッフルします。 VPERMQ VPERM2I128 2つの256ビットソースオペランドの4つの128ビットベクトル要素を256ビットデスティネーションオペランドにシャッフルし(そのうちの2つ)、セレクタとしてイミディエート定数を使用します。
VPBLENDD PBLEND命令の即時バージョンダブルワードSSE4を。
VPSLLVD 論理的に左にシフトします。パックされた入力に従って各要素がシフトされる可変シフトを許可します。 VPSLLVQ VPSRLVD 論理的に右にシフトします。パックされた入力に従って各要素がシフトされる可変シフトを許可します。 VPSRLVQ VPSRAVD 算術的に右にシフトします。パックされた入力に従って各要素がシフトされる可変シフトを許可します。

AVX-512
Intelの中に導入さXeonプロセッサファイX200
512ビットレジスタのベクトル演算。

AVX-512ファンデーション
命令 説明
VBLENDMPD opmaskコントロールを使用してfloat64ベクトルをブレンドします
VBLENDMPS opmaskコントロールを使用してfloat32ベクトルをブレンドします
VPBLENDMD opmaskコントロールを使用してint32ベクトルをブレンドする
VPBLENDMQ opmaskコントロールを使用してint64ベクトルをブレンドする
VPCMPD 符号付き/符号なしのダブルワードをマスクに比較する VPCMPUD VPCMPQ 符号付き/符号なしのクアドワードをマスクに比較する VPCMPUQ VPTESTMD 32ビット整数または64ビット整数の論理積およびセットマスク。 VPTESTMQ VPTESTNMD 32ビットまたは64ビット整数の論理NANDおよびセットマスク。 VPTESTNMQ VCOMPRESSPD スパースパックされた倍精度/単精度浮動小数点値を高密度メモリに格納します VCOMPRESSPS VPCOMPRESSD スパースパックされたダブルワード/クワッドワード整数値を高密度メモリ/レジスタに格納します VPCOMPRESSQ VEXPANDPD 密なメモリからスパースパックされた倍精度/単精度浮動小数点値をロードします VEXPANDPS VPEXPANDD 密なメモリ/レジスタからスパースパックされたダブルワード/クワッドワード整数値をロードします VPEXPANDQ VPERMI2PD 完全なシングル/ダブル浮動小数点は、インデックスを上書きします。 VPERMI2PS VPERMI2D 完全なダブルワード/クワッドワードは、インデックスを上書きします。 VPERMI2Q VPERMT2PS 完全なシングル/ダブル浮動小数点は、最初のソースを上書きします。 VPERMT2PD VPERMT2D 完全なダブルワード/クワッドワードは、最初のソースを上書きします。 VPERMT2Q VSHUFF32x4 4つのパックされた128ビットラインをシャッフルします。VSHUFF64x2 VSHUFFI32x4 VSHUFFI64x2
VPTERNLOGD ビット単位の3値論理 VPTERNLOGQ VPMOVQD クワッドワードまたはダブルワードをダブルワード、ワード、またはバイトにダウンコンバートします。不飽和、飽和、または飽和の符号なし。SSE4.1からの符号/ゼロ拡張命令の逆。VPMOVSQD VPMOVUSQD VPMOVQW VPMOVSQW VPMOVUSQW VPMOVQB VPMOVSQB VPMOVUSQBVPMOVDW VPMOVSDW VPMOVUSDW VPMOVDB VPMOVSDB VPMOVUSDB
VCVTPS2UDQ 切り捨ての有無にかかわらず、パックされた単精度または倍精度浮動小数点をパックされた符号なしダブルワード整数に変換します。VCVTPD2UDQ VCVTTPS2UDQ VCVTTPD2UDQ
VCVTSS2USI 切り捨て、スカラー単精度または倍精度浮動小数点の有無にかかわらず、符号なしダブルワード整数に変換します。VCVTSD2USI VCVTTSS2USI VCVTTSD2USI
VCVTUDQ2PS パックされた符号なしダブルワード整数をパックされた単精度または倍精度浮動小数点に変換します。 VCVTUDQ2PD VCVTUSI2PS スカラー符号なしダブルワード整数を単精度または倍精度浮動小数点に変換します。 VCVTUSI2PD VCVTUSI2SD スカラー符号なし整数を単精度または倍精度浮動小数点に変換します。 VCVTUSI2SS VCVTQQ2PD パックされたクアッドワード整数をパックされた単精度または倍精度浮動小数点に変換します。 VCVTQQ2PS VGETEXPPD パックされたfp値の指数をfp値に変換します VGETEXPPS VGETEXPSD スカラーfp値の指数をfp値に変換します VGETEXPSS VGETMANTPD float32 / float64ベクトルから正規化された仮数のベクトルを抽出します VGETMANTPS VGETMANTSD float32 / float64スカラーから正規化された仮数のfloat32 / float64を抽出します VGETMANTSS VFIXUPIMMPD 特別にパックされたfloat32 / float64値を修正します VFIXUPIMMPS VFIXUPIMMSD 特別なスカラーfloat32 / float64値を修正 VFIXUPIMMSS VRCP14PD パックされたfloat32 / float64値のおおよその逆数を計算します VRCP14PS VRCP14SD スカラーfloat32 / float64値の近似逆数を計算します VRCP14SS VRNDSCALEPS パックされたfloat32 / float64値を丸めて、指定された数の小数ビットを含めます VRNDSCALEPD VRNDSCALESS スカラーfloat32 / float64値を丸めて、指定された数の小数ビットを含めます VRNDSCALESD VRSQRT14PD パックされたfloat32 / float64値の平方根の近似逆数を計算します VRSQRT14PS VRSQRT14SD スカラーfloat32 / float64値の平方根の近似逆数を計算します VRSQRT14SS VSCALEFPS パックされたfloat32 / float64値をfloat32 / float64値でスケーリングします VSCALEFPD VSCALEFSS スカラーfloat32 / float64値をfloat32 / float64値でスケーリングします VSCALEFSD VALIGND ダブルワードまたはクワッドワードのベクトルを揃える VALIGNQ VPABSQ パックされた絶対値クワッドワード
VPMAXSQ パックされた符号付き/符号なしクワッドワードの最大値 VPMAXUQ VPMINSQ パックされた符号付き/符号なしクワッドワードの最小値 VPMINUQ VPROLD ビットは左または右に回転します VPROLVD VPROLQ VPROLVQ VPRORD VPRORVD VPRORQ VPRORVQ
VPSCATTERDD 署名されたダブルワードとクアッドワードのインデックスを持つスキャッターパックされたダブルワード/クワッドワードVPSCATTERDQ VPSCATTERQD VPSCATTERQQ
VSCATTERDPS 符号付きダブルワードおよびクアッドワードインデックスを備えたスキャッターパックfloat32 / float64VSCATTERDPD VSCATTERQPS
VSCATTERQPD

暗号化の指示

IntelAESの説明
AES命令セット
6つの新しい指示。
命令 説明
AESENC AES暗号化フローを1ラウンド実行します
AESENCLAST AES暗号化フローの最後のラウンドを実行します
AESDEC AES復号化フローを1ラウンド実行します
AESDECLAST AES復号化フローの最後のラウンドを実行します
AESKEYGENASSIST AESラウンドキー生成を支援します
AESIMC AESインバースミックスカラムを支援

RDRANDとRDSEED RDRAND 命令 説明
RDRAND 乱数を読む
RDSEED ランダムシードを読む

IntelSHAの説明
IntelSHA拡張機能
7つの新しい指示。
命令 説明
SHA1RNDS4 4ラウンドのSHA1操作を実行します
SHA1NEXTE 4ラウンド後のSHA1状態変数Eを計算します
SHA1MSG1 次の4つのSHA1メッセージDwordの中間計算を実行します
SHA1MSG2 次の4つのSHA1メッセージDwordの最終計算を実行します
SHA256RNDS2 2ラウンドのSHA256操作を実行する
SHA256MSG1 次の4つのSHA256メッセージDwordの中間計算を実行します
SHA256MSG2 次の4つのSHA256メッセージDwordの最終計算を実行します

文書化されていない指示

文書化されていないx86命令
x86 CPUには、チップに実装されているが一部の公式ドキュメントには記載されていない、ドキュメント化されていない命令が含まれています。それらは、ラルフブラウンの割り込みリストやsandpile.orgなど、インターネット上のさまざまなソースで見つけることができます。
ニモニック オペコード 説明 状態
AAM imm8 D4 imm8 ASCII-乗算後の調整。バイナリ乗算の結果をBCDに変換します。
Pentium以降に文書化された8086以降で利用可能(以前の文書には引数が記載されていません)
AAD imm8 D5 imm8 ASCII-調整-除算前。次の除算命令のために、BCD値をバイナリに変換します。AAMのディビジョンカウンターパート
Pentium以降に文書化された8086以降で利用可能(以前の文書には引数が記載されていません)
SALC D6 キャリーフラグの値に応じてALを設定します(SBB AL、ALの1バイトの代替) 8086以降で利用可能ですが、PentiumPro以降にのみ文書化されています。
ICEBP F1 シングルバイトシングルステップ例外/ ICEの呼び出し Pentium Pro以降に(INT1として)文書化された80386以降で利用可能
不明なニーモニック 0F 04 正確な目的は不明で、CPUハング(HCF)を引き起こします。唯一の解決策はCPUのリセットです。一部の実装では、停止シーケンスとしてBIOSを介してエミュレートされます。でヴィンテージコンピューティング連盟のフォーラムの投稿、この命令はSAVEALLとして説明します。ICEモードと相互作用します。 80286でのみ利用可能
LOADALL 0F 05 メモリアドレス0x000800Hからすべてのレジスタをロードします 80286でのみ利用可能
LOADALLD 0F 07 メモリアドレスES:EDIからすべてのレジスタをロードします 80386でのみ利用可能
不明なニーモニック 0F 0E AMD K6以降ではFEMMS操作(MMX状態の高速クリア)にマップされますが、IntelではIntelで読み取られたuarchデータとして識別されます
赤のロック解除状態でのみ使用可能(0F 0Fも)
不明なニーモニック 0F 0F uarchを書く IntelのマイクロコードのRAM部分を変更できます
UD1 0F B9 意図的に定義されていない命令ですが、UD2とは異なり、これは公開されていません
ALTINST 0F 3F 文書化されていない代替命令セットの命令をジャンプして実行します。
作られたいくつかのx86プロセッサでのみ利用可能であるVIA Technologies。

文書化されていないx87の説明
FFREEPはFFREEST(i)とポップスタックを実行します

も参照してくださいCLMUL RDRAND
Larrabee拡張機能
高度なベクトル拡張2
ビット操作命令セット
CPUID

参考文献
^ 「Re:Intelプロセッサの識別とCPUID命令」。
^ Toth、Ervin(1998-03-16)。「16ビットレジスタを備えたBSWAP」。1999-11-03にオリジナルからアーカイブされました。この命令は、上位16ビットに影響を与えることなくダブルワードレジスタの上位ワードをダウンさせます。
^ Coldwin、Gynvael(2009-12-29)。「BSWAP + 66hプレフィックス」。小さい(16ビット)レジスタの値を内部(ゼロ)拡張する…bswapを32ビット値「00 00 AH AL」に適用する、…下位16ビット(「0000」)に切り捨てる。…Bochs…bswapreg16はbswapreg32と同じように動作します…QEMU…66hプレフィックスを無視します
^ 「RSM-システム管理モードから再開」。2012年3月12日にオリジナルからアーカイブされました。
^ Intel 64およびIA-32アーキテクチャ最適化リファレンスマニュアル、セクション7.3.2 ^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル、セクション4.3、サブセクション「PREFETCHh-データをキャッシュにプリフェッチする」 ^ ホリングスワース、ブレント。「新しい「ブルドーザー」と「まんぐり返し」の説明」(pdf)。Advanced Micro Devices、Inc 。取得した11年12月2014。
^ 「ファミリー16hAMD Aシリーズデータシート」(PDF)。amd.com。AMD。2013年10月。
^ 「AMD64アーキテクチャプログラマーズマニュアル、第3巻:汎用およびシステムの説明」(PDF)。amd.com。AMD。2013年10月。
^ “”GCC4.8のtbmintrin.h”” 。
^ https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdfセクション3.5.2.3 ^ 「Intel、AMD、およびVIA CPUのマイクロアーキテクチャ:アセンブリプログラマおよびコンパイラメーカー向けの最適化ガイド」(PDF)。
^ 「チェスプログラミングAVX2」。
^ “”Re:文書化されていないオペコード(HINT_NOP)”。アーカイブされたオリジナルの2004年11月6日に。取り出さ2010-11-07に。
^ 「Re:文書化されていない0Fhオペコードもいくつかあります」。2003年6月26日にオリジナルからアーカイブされました。取り出さ2010-11-07に。
^ 「最新のIntelプロセッサのマイクロアーキテクチャレベルでCPUを制御するための文書化されていないx86命令」(PDF)。2021年7月9日。

外部リンク
ウィキブックスのx86アセンブリには、次のトピックに関するページがX86の説明
Intelが提供する無料のIA-32およびx86-64ドキュメント
x86オペコードおよび命令リファレンス
x86およびamd64命令リファレンス
命令テーブル:Intel、AMD、およびVIA CPUの命令レイテンシ、スループット、およびマイクロオペレーションの内訳のリスト
Netwide Assembler命令リスト(Netwide Assemblerから)”