CIL命令のリスト
これは、共通中間言語バイトコードの命令セット内の命令のリストです。
- オペコードはオペレーションコードの略で、実行される操作を指定する機械語命令の部分です。
- 基本命令はチューリング完全な命令セットを形成します。
- オブジェクト モデル命令は、共通型システムの実装を提供します。
| オペコード | 命令 | 説明 | 指導の種類 |
|---|---|---|---|
| 0x58 | add | 2 つの値を加算し、新しい値を返します。 | 基本命令 |
| 0xD6 | add.ovf | オーバーフローチェック付きの符号付き整数値を追加します。 | 基本命令 |
| 0xD7 | add.ovf.un | オーバーフローチェック付きの符号なし整数値を追加します。 | 基本命令 |
| 0x5F | and | 2 つの整数値のビット単位のANDを計算し、整数値を返します。 | 基本命令 |
| 0xFE 0x00 | arglist | 現在のメソッドの引数リストハンドルを返します。 | 基本命令 |
| 0x3B | beq <int32 (target)> | 等しい場合はターゲットにブランチします。 | 基本命令 |
| 0x2E | beq.s <int8 (target)> | 等しい場合はターゲットへのブランチ、短縮形。 | 基本命令 |
| 0x3C | bge <int32 (target)> | より大きいか等しい場合はターゲットに分岐します。 | 基本命令 |
| 0x2F | bge.s <int8 (target)> | より大きいか等しい場合にターゲットに分岐する、短縮形。 | 基本命令 |
| 0x41 | bge.un <int32 (target)> | より大きいか等しい場合(符号なしまたは順序なし)、ターゲットに分岐します。 | 基本命令 |
| 0x34 | bge.un.s <int8 (target)> | 指定値以上の場合、ターゲットに分岐します(符号なしまたは順序なし)。短縮形。 | 基本命令 |
| 0x3D | bgt <int32 (target)> | より大きい場合はターゲットに分岐します。 | 基本命令 |
| 0x30 | bgt.s <int8 (target)> | より大きい場合にターゲットに分岐する、短縮形。 | 基本命令 |
| 0x42 | bgt.un <int32 (target)> | より大きい場合、ターゲットに分岐します(符号なしまたは順序なし)。 | 基本命令 |
| 0x35 | bgt.un.s <int8 (target)> | より大きい場合、ターゲットに分岐します(符号なしまたは順序なし)、短縮形。 | 基本命令 |
| 0x3E | ble <int32 (target)> | 以下の場合、ターゲットに分岐します。 | 基本命令 |
| 0x31 | ble.s <int8 (target)> | 以下の値以下の場合にターゲットに分岐する(短縮形)。 | 基本命令 |
| 0x43 | ble.un <int32 (target)> | 以下の場合、ターゲットに分岐します(符号なしまたは順序なし)。 | 基本命令 |
| 0x36 | ble.un.s <int8 (target)> | 以下の場合ターゲットに分岐します(符号なしまたは順序なし)、短縮形。 | 基本命令 |
| 0x3F | blt <int32 (target)> | より小さい場合はターゲットに分岐します。 | 基本命令 |
| 0x32 | blt.s <int8 (target)> | より小さい場合はターゲットに分岐します(短縮形)。 | 基本命令 |
| 0x44 | blt.un <int32 (target)> | より小さい場合、ターゲットに分岐します(符号なしまたは順序なし)。 | 基本命令 |
| 0x37 | blt.un.s <int8 (target)> | より小さい場合、ターゲットに分岐します(符号なしまたは順序なし)、短縮形。 | 基本命令 |
| 0x40 | bne.un <int32 (target)> | 不等号または順序がない場合はターゲットに分岐します。 | 基本命令 |
| 0x33 | bne.un.s <int8 (target)> | 不等号または順序なしの場合にターゲットに分岐する、短縮形。 | 基本命令 |
| 0x8C | box <typeTok> | ボックス可能な値をボックス化された形式に変換します。 | オブジェクトモデルの説明 |
| 0x38 | br <int32 (target)> | ターゲットへのブランチ。 | 基本命令 |
| 0x2B | br.s <int8 (target)> | ターゲットへの分岐、短縮形。 | 基本命令 |
| 0x01 | break | ブレークポイントに到達したことをデバッガーに通知します。 | 基本命令 |
| 0x39 | brfalse <int32 (target)> | 値がゼロ ( false ) の場合はターゲットに分岐します。 | 基本命令 |
| 0x2C | brfalse.s <int8 (target)> | 値がゼロ ( false ) の場合にターゲットに分岐します (短縮形)。 | 基本命令 |
| 0x3A | brinst <int32 (target)> | 値が null 以外のオブジェクト参照の場合、ターゲットに分岐します (brtrue のエイリアス)。 | 基本命令 |
| 0x2D | brinst.s <int8 (target)> | 値が null 以外のオブジェクト参照の場合はターゲットに分岐します。短縮形s ( brtrue.sの別名)。 | 基本命令 |
| 0x39 | brnull <int32 (target)> | 値がnullの場合にターゲットに分岐します( brfalseのエイリアス)。 | 基本命令 |
| 0x2C | brnull.s <int8 (target)> | 値がnullの場合にターゲットに分岐します( brfalse.sのエイリアス)、短縮形。 | 基本命令 |
| 0x3A | brtrue <int32 (target)> | 値がゼロ以外 ( true ) の場合、ターゲットに分岐します。 | 基本命令 |
| 0x2D | brtrue.s <int8 (target)> | 値がゼロ以外 ( true ) の場合にターゲットに分岐します (短縮形)。 | 基本命令 |
| 0x39 | brzero <int32 (target)> | 値がゼロの場合にターゲットに分岐します( brfalseのエイリアス)。 | 基本命令 |
| 0x2C | brzero.s <int8 (target)> | 値がゼロの場合にターゲットに分岐します( brfalse.sのエイリアス)、短縮形。 | 基本命令 |
| 0x28 | call <method> | メソッドによって記述されたメソッドを呼び出します。 | 基本命令 |
| 0x29 | calli <callsitedescr> | callsitedescr で記述された引数を使用して、スタックに示されたメソッドを呼び出します。 | 基本命令 |
| 0x6F | callvirt <method> | オブジェクトに関連付けられたメソッドを呼び出します。 | オブジェクトモデルの説明 |
| 0x74 | castclass <class> | obj をクラスにキャストします。 | オブジェクトモデルの説明 |
| 0xFE 0x01 | ceq | value1 e がvalue2 と等しい場合は 1 (int32 型) をプッシュし、そうでない場合は 0 をプッシュします。 | 基本命令 |
| 0xFE 0x02 | cgt | value1がvalue2 より大きい場合は 1 (int32 型) をプッシュし、そうでない場合は 0 をプッシュします。 | 基本命令 |
| 0xFE 0x03 | cgt.un | value1がvalue2 より大きい場合、符号なしまたは順序なしの場合は 1 (int32 型) をプッシュし、それ以外の場合は 0 をプッシュします。 | 基本命令 |
| 0xC3 | ckfinite | 値が有限数でない場合は ArithmeticException をスローします。 | 基本命令 |
| 0xFE 0x04 | clt | value1 が value2より小さい場合は 1 (int32 型) をプッシュし、そうでない場合は 0 をプッシュします。 | 基本命令 |
| 0xFE 0x05 | clt.un | value1 が value2より小さい場合、符号なしまたは順序なしの場合は 1 (int32 型) をプッシュし、それ以外の場合は 0 をプッシュします。 | 基本命令 |
| 0xFE 0x16 | constrained. <thisType> | T 型に制約された型の仮想メソッドを呼び出します。 | 命令の接頭辞 |
| 0xD3 | conv.i | ネイティブ int に変換し、ネイティブ int をスタックにプッシュします。 | 基本命令 |
| 0x67 | conv.i1 | nt8に変換し、nt32 をスタックにプッシュします。 | 基本命令 |
| 0x68 | conv.i2 | nt16に変換し、nt32 をスタックにプッシュします。 | 基本命令 |
| 0x69 | conv.i4 | nt32に変換し、スタックに nt32をプッシュします。 | 基本命令 |
| 0x6A | conv.i8 | i nt64に変換し、i nt64 をスタックにプッシュします。 | 基本命令 |
| 0xD4 | conv.ovf.i | ネイティブ int に変換し(スタック上ではネイティブ int として) 、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x8A | conv.ovf.i.un | unsignedをネイティブ int (スタック上ではネイティブ int として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB3 | conv.ovf.i1 | int8に変換し(スタック上では int32 として) 、オーバーフローの場合は例外をスローします。 | 基本命令 |
| 0x82 | conv.ovf.i1.un | unsigned を int8 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB5 | conv.ovf.i2 | int16 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x83 | conv.ovf.i2.un | unsigned を int16 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB7 | conv.ovf.i4 | int32 に変換し (スタック上では int32 として)、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x84 | conv.ovf.i4.un | unsigned を int32 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB9 | conv.ovf.i8 | int64 に変換し (スタック上では int64 として)、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x85 | conv.ovf.i8.un | unsigned を int64 (スタック上では int64 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xD5 | conv.ovf.u | ネイティブの unsigned int (スタック上ではネイティブ int として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x8B | conv.ovf.u.un | unsigned をネイティブの unsigned int (スタック上ではネイティブ int として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB4 | conv.ovf.u1 | unsigned int8 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x86 | conv.ovf.u1.un | unsigned を unsigned int8 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB6 | conv.ovf.u2 | unsigned int16 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x87 | conv.ovf.u2.un | unsigned を unsigned int16 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xB8 | conv.ovf.u4 | unsigned int32 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x88 | conv.ovf.u4.un | unsigned を unsigned int32 (スタック上では int32 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0xBA | conv.ovf.u8 | unsigned int64 (スタック上では int64 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x89 | conv.ovf.u8.un | unsigned を unsigned int64 (スタック上では int64 として) に変換し、オーバーフロー時に例外をスローします。 | 基本命令 |
| 0x76 | conv.r.un | 符号なし整数を浮動小数点に変換し、F をスタックにプッシュします。 | 基本命令 |
| 0x6B | conv.r4 | float32 に変換し、F をスタックにプッシュします。 | 基本命令 |
| 0x6C | conv.r8 | float64 に変換し、F をスタックにプッシュします。 | 基本命令 |
| 0xE0 | conv.u | ネイティブの unsigned int に変換し、ネイティブ int をスタックにプッシュします。 | 基本命令 |
| 0xD2 | conv.u1 | unsigned int8 に変換し、int32 をスタックにプッシュします。 | 基本命令 |
| 0xD1 | conv.u2 | unsigned int16 に変換し、int32 をスタックにプッシュします。 | 基本命令 |
| 0x6D | conv.u4 | unsigned int32 に変換し、int32 をスタックにプッシュします。 | 基本命令 |
| 0x6E | conv.u8 | unsigned int64 に変換し、int64 をスタックにプッシュします。 | 基本命令 |
| 0xFE 0x17 | cpblk | メモリからメモリにデータをコピーします。 | 基本命令 |
| 0x70 | cpobj <typeTok> | 値の型を src から dest にコピーします。 | オブジェクトモデルの説明 |
| 0x5B | div | 2 つの値を割って、商または浮動小数点の結果を返します。 | 基本命令 |
| 0x5C | div.un | 2 つの値を符号なしで割り、商を返します。 | 基本命令 |
| 0x25 | dup | スタックの一番上の値を複製します。 | 基本命令 |
| 0xDC | endfault | 例外ブロックの障害節を終了します。 | 基本命令 |
| 0xFE 0x11 | endfilter | 例外処理フィルター句を終了します。 | 基本命令 |
| 0xDC | endfinally | 例外ブロックのfinally句を終了します。 | 基本命令 |
| 0xFE 0x18 | initblk | メモリ ブロック内のすべてのバイトを指定されたバイト値に設定します。 | 基本命令 |
| 0xFE 0x15 | initobj <typeTok> | アドレス dest の値を初期化します。 | オブジェクトモデルの説明 |
| 0x75 | isinst <class> | obj がクラスのインスタンスであるかどうかをテストし、null またはそのクラスまたはインターフェースのインスタンスを返します。 | オブジェクトモデルの説明 |
| 0x27 | jmp <method> | 現在のメソッドを終了し、指定されたメソッドにジャンプします。 | 基本命令 |
| 0xFE 0x09 | ldarg <uint16 (num)> | 番号 num の引数をスタックにロードします。 | 基本命令 |
| 0x02 | ldarg.0 | 引数 0 をスタックにロードします。 | 基本命令 |
| 0x03 | ldarg.1 | 引数 1 をスタックにロードします。 | 基本命令 |
| 0x04 | ldarg.2 | 引数2をスタックにロードします。 | 基本命令 |
| 0x05 | ldarg.3 | 引数 3 をスタックにロードします。 | 基本命令 |
| 0x0E | ldarg.s <uint8 (num)> | 番号 num の引数をスタックにロードします (短縮形)。 | 基本命令 |
| 0xFE 0x0A | ldarga <uint16 (argNum)> | 引数argNumのアドレスを取得します。 | 基本命令 |
| 0x0F | ldarga.s <uint8 (argNum)> | 引数 argNum のアドレス (短縮形) を取得します。 | 基本命令 |
| 0x20 | ldc.i4 <int32 (num)> | int32 型の num を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x16 | ldc.i4.0 | 0 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x17 | ldc.i4.1 | 1 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x18 | ldc.i4.2 | 2 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x19 | ldc.i4.3 | 3 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x1A | ldc.i4.4 | 4 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x1B | ldc.i4.5 | 5 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x1C | ldc.i4.6 | 6 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x1D | ldc.i4.7 | 7 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x1E | ldc.i4.8 | 8 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x15 | ldc.i4.m1 | -1 を int32 としてスタックにプッシュします。 | 基本命令 |
| 0x15 | ldc.i4.M1 | -1 を int32 としてスタックにプッシュします (ldc.i4.m1 のエイリアス)。 | 基本命令 |
| 0x1F | ldc.i4.s <int8 (num)> | num を int32 の短縮形としてスタックにプッシュします。 | 基本命令 |
| 0x21 | ldc.i8 <int64 (num)> | int64 型の num を int64 としてスタックにプッシュします。 | 基本命令 |
| 0x22 | ldc.r4 <float32 (num)> | float32 型の num を F としてスタックにプッシュします。 | 基本命令 |
| 0x23 | ldc.r8 <float64 (num)> | float64 型の num を F としてスタックにプッシュします。 | 基本命令 |
| 0xA3 | ldelem <typeTok> | インデックスの要素をスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x97 | ldelem.i | インデックスのネイティブ int 型の要素をネイティブ int としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x90 | ldelem.i1 | インデックスの int8 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x92 | ldelem.i2 | インデックスの int16 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x94 | ldelem.i4 | インデックスの int32 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x96 | ldelem.i8 | インデックスの int64 型の要素を int64 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x98 | ldelem.r4 | インデックスの float32 型の要素を F としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x99 | ldelem.r8 | インデックスの float64 型の要素を F としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x9A | ldelem.ref | インデックスの要素を O としてスタックの一番上にロードします。O の型は、CIL スタックにプッシュされた配列の要素の型と同じです。 | オブジェクトモデルの説明 |
| 0x91 | ldelem.u1 | インデックスの unsigned int8 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x93 | ldelem.u2 | インデックスの unsigned int16 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x95 | ldelem.u4 | インデックスの unsigned int32 型の要素を int32 としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x96 | ldelem.u8 | インデックスの unsigned int64 型の要素を int64 (ldelem.i8 のエイリアス) としてスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x8F | ldelema <class> | インデックスの要素のアドレスをスタックの一番上にロードします。 | オブジェクトモデルの説明 |
| 0x7B | ldfld <field> | オブジェクト (または値型) obj のフィールドの値をスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0x7C | ldflda <field> | オブジェクト obj のフィールドのアドレスをスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0xFE 0x06 | ldftn <method> | メソッドによって参照されるメソッドへのポインターをスタックにプッシュします。 | 基本命令 |
| 0x4D | ldind.i | ネイティブ int 型の値をネイティブ int としてスタックに間接的にロードします。 | 基本命令 |
| 0x46 | ldind.i1 | スタック上に int8 型の値を int32 として間接的にロードします。 | 基本命令 |
| 0x48 | ldind.i2 | スタック上に int16 型の値を int32 として間接的にロードします。 | 基本命令 |
| 0x4A | ldind.i4 | int32 型の値を int32 としてスタックに間接的にロードします。 | 基本命令 |
| 0x4C | ldind.i8 | int64 型の値を int64 としてスタックに間接的にロードします。 | 基本命令 |
| 0x4E | ldind.r4 | スタックに float32 型の値を F として間接的にロードします。 | 基本命令 |
| 0x4F | ldind.r8 | スタックに float64 型の値を F として間接的にロードします。 | 基本命令 |
| 0x50 | ldind.ref | スタック上にオブジェクト参照型の値を O として間接的にロードします。 | 基本命令 |
| 0x47 | ldind.u1 | unsigned int8 型の値を int32 としてスタックに間接的にロードします。 | 基本命令 |
| 0x49 | ldind.u2 | unsigned int16 型の値を int32 としてスタックに間接的にロードします。 | 基本命令 |
| 0x4B | ldind.u4 | unsigned int32 型の値を int32 としてスタックに間接的にロードします。 | 基本命令 |
| 0x4C | ldind.u8 | unsigned int64 型の値を int64 としてスタックに間接的にロードします (ldind.i8 のエイリアス)。 | 基本命令 |
| 0x8E | ldlen | 配列の長さ (native unsigned int 型) をスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0xFE 0x0C | ldloc <uint16 (indx)> | インデックス indx のローカル変数をスタックにロードします。 | 基本命令 |
| 0x06 | ldloc.0 | ローカル変数 0 をスタックにロードします。 | 基本命令 |
| 0x07 | ldloc.1 | ローカル変数 1 をスタックにロードします。 | 基本命令 |
| 0x08 | ldloc.2 | ローカル変数 2 をスタックにロードします。 | 基本命令 |
| 0x09 | ldloc.3 | ローカル変数 3 をスタックにロードします。 | 基本命令 |
| 0x11 | ldloc.s <uint8 (indx)> | インデックス indx のローカル変数をスタックにロードします (短縮形)。 | 基本命令 |
| 0xFE 0x0D | ldloca <uint16 (indx)> | インデックス indx でローカル変数のアドレスをロードします。 | 基本命令 |
| 0x12 | ldloca.s <uint8 (indx)> | インデックス indx (短縮形) を使用してローカル変数のアドレスをロードします。 | 基本命令 |
| 0x14 | ldnull | スタックに null 参照をプッシュします。 | 基本命令 |
| 0x71 | ldobj <typeTok> | アドレス src に格納されている値をスタックにコピーします。 | オブジェクトモデルの説明 |
| 0x7E | ldsfld <field> | 静的フィールドの値をスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0x7F | ldsflda <field> | 静的フィールド field のアドレスをスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0x72 | ldstr <string> | リテラル文字列の文字列オブジェクトをプッシュします。 | オブジェクトモデルの説明 |
| 0xD0 | ldtoken <token> | メタデータ トークンを実行時表現に変換します。 | オブジェクトモデルの説明 |
| 0xFE 0x07 | ldvirtftn <method> | 仮想メソッドのアドレスをスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0xDD | leave <int32 (target)> | 保護されたコード領域を終了します。 | 基本命令 |
| 0xDE | leave.s <int8 (target)> | 保護されたコード領域を終了します (短縮形)。 | 基本命令 |
| 0xFE 0x0F | localloc | ローカル メモリ プールからスペースを割り当てます。 | 基本命令 |
| 0xC6 | mkrefany <class> | 型クラスの ptr への型付き参照をスタックにプッシュします。 | オブジェクトモデルの説明 |
| 0x5A | mul | 値を乗算します。 | 基本命令 |
| 0xD8 | mul.ovf | 符号付き整数値を乗算します。符号付き結果は同じサイズに収まる必要があります。 | 基本命令 |
| 0xD9 | mul.ovf.un | 符号なし整数値を乗算します。符号なしの結果は同じサイズに収まる必要があります。 | 基本命令 |
| 0x65 | neg | 値を否定します。 | 基本命令 |
| 0x8D | newarr <etype> | etype 型の要素を持つ新しい配列を作成します。 | オブジェクトモデルの説明 |
| 0x73 | newobj <ctor> | 初期化されていないオブジェクトまたは値型を割り当てて、ctor を呼び出します。 | オブジェクトモデルの説明 |
| 0xFE 0x19 | いいえ。 { 型チェック、 範囲チェック、 ヌルチェック } | 通常、後続の命令の実行の一部として実行される指定された障害チェックは、スキップすることができます。 | 命令の接頭辞 |
| 0x00 | nop | 何もしない( N o操作)。 | 基本命令 |
| 0x66 | not | ビットの補数。 | 基本命令 |
| 0x60 | or | 2 つの整数値のビットORを計算し、整数を返します。 | 基本命令 |
| 0x26 | pop | スタックから値をポップします。 | 基本命令 |
| 0xFE 0x1E | readonly. | 後続の配列アドレス操作では実行時に型チェックを実行せず、制御された可変性を持つマネージド ポインターを返すことを指定します。 | 命令の接頭辞 |
| 0xFE 0x1D | refanytype | 型付き参照に格納されている型トークンをプッシュします。 | オブジェクトモデルの説明 |
| 0xC2 | refanyval <type> | 型指定された参照に格納されているアドレスをプッシュします。 | オブジェクトモデルの説明 |
| 0x5D | rem | ある値を別の値で割るときの注意事項。 | 基本命令 |
| 0x5E | rem.un | 符号なしの値を別の符号なしの値で割る場合の注意事項。 | 基本命令 |
| 0x2A | ret | メソッドから戻ります。値が含まれる場合もあります。 | 基本命令 |
| 0xFE 0x1A | rethrow | 現在の例外を再スローします。 | オブジェクトモデルの説明 |
| 0x62 | shl | 整数を左にシフトし(ゼロをシフトして)、整数を返します。 | 基本命令 |
| 0x63 | shr | 整数を右にシフト(符号シフト)し、整数を返します。 | 基本命令 |
| 0x64 | shr.un | 整数を右にシフトし (ゼロをシフト)、整数を返します。 | 基本命令 |
| 0xFE 0x1C | sizeof <typeTok> | 型のサイズ (バイト単位) を unsigned int32 としてプッシュします。 | オブジェクトモデルの説明 |
| 0xFE 0x0B | starg <uint16 (num)> | 引数numに値を格納します。 | 基本命令 |
| 0x10 | starg.s <uint8 (num)> | 短縮形のnum で番号付けされた引数に値を格納します。 | 基本命令 |
| 0xA4 | stelem <typeTok> | インデックスの配列要素をスタック上の値に置き換えます。 | オブジェクトモデルの説明 |
| 0x9B | stelem.i | インデックスの配列要素をスタック上のネイティブ int 値に置き換えます。 | オブジェクトモデルの説明 |
| 0x9C | stelem.i1 | インデックスの配列要素をスタック上の int8 値に置き換えます。 | オブジェクトモデルの説明 |
| 0x9D | stelem.i2 | インデックスの配列要素をスタック上の int16 値に置き換えます。 | オブジェクトモデルの説明 |
| 0x9E | stelem.i4 | インデックスの配列要素をスタック上の int32 値に置き換えます。 | オブジェクトモデルの説明 |
| 0x9F | stelem.i8 | インデックスの配列要素をスタック上の int64 値に置き換えます。 | オブジェクトモデルの説明 |
| 0xA0 | stelem.r4 | インデックスの配列要素をスタック上の float32 値に置き換えます。 | オブジェクトモデルの説明 |
| 0xA1 | stelem.r8 | インデックスの配列要素をスタック上の float64 値に置き換えます。 | オブジェクトモデルの説明 |
| 0xA2 | stelem.ref | インデックスの配列要素をスタック上の ref 値に置き換えます。 | オブジェクトモデルの説明 |
| 0x7D | stfld <field> | オブジェクト obj のフィールドの値を value に置き換えます。 | オブジェクトモデルの説明 |
| 0xDF | stind.i | ネイティブ int 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x52 | stind.i1 | int8 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x53 | stind.i2 | int16 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x54 | stind.i4 | int32 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x55 | stind.i8 | int64 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x56 | stind.r4 | float32 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x57 | stind.r8 | float64 型の値をアドレスのメモリに格納します。 | 基本命令 |
| 0x51 | stind.ref | オブジェクト参照型 (O 型) の値をアドレスのメモリに格納します。 | 基本命令 |
| 0xFE 0x0E | stloc <uint16 (indx)> | スタックから値をポップしてローカル変数 indx に格納します。 | 基本命令 |
| 0x0A | stloc.0 | スタックから値をポップしてローカル変数 0 に格納します。 | 基本命令 |
| 0x0B | stloc.1 | スタックから値をポップしてローカル変数 1 に格納します。 | 基本命令 |
| 0x0C | stloc.2 | スタックから値をポップしてローカル変数 2 に格納します。 | 基本命令 |
| 0x0D | stloc.3 | スタックから値をポップしてローカル変数 3 に格納します。 | 基本命令 |
| 0x13 | stloc.s <uint8 (indx)> | スタックから値をローカル変数 indx にポップします (短縮形)。 | 基本命令 |
| 0x81 | stobj <typeTok> | typeTok 型の値をアドレスに格納します。 | オブジェクトモデルの説明 |
| 0x80 | stsfld <field> | 静的フィールドの値を val に置き換えます。 | オブジェクトモデルの説明 |
| 0x59 | sub | value1 から value2 を減算して、新しい値を返します。 | 基本命令 |
| 0xDA | sub.ovf | ネイティブ int からネイティブ int を減算します。符号付きの結果は同じサイズに収まる必要があります。 | 基本命令 |
| 0xDB | sub.ovf.un | ネイティブの unsigned int からネイティブの unsigned int を減算します。符号なしの結果は同じサイズに収まる必要があります。 | 基本命令 |
| 0x45 | switch <uint32, int32, int32 (t1..tN)> | n 個の値のいずれかにジャンプします。 | 基本命令 |
| 0xFE 0x14 | tail. | 後続の呼び出しにより現在のメソッドが終了します。 | 命令の接頭辞 |
| 0x7A | throw | 例外をスローします。 | オブジェクトモデルの説明 |
| 0xFE 0x12 | unaligned. (alignment) | 後続のポインタ命令はアラインされていない可能性があります。 | 命令の接頭辞 |
| 0x79 | unbox <valuetype> | obj からそのボックス化された表現である値型を抽出し、それに対する可変性が制御された管理ポインターをスタックの先頭にプッシュします。 | オブジェクトモデルの説明 |
| 0xA5 | unbox.any <typeTok> | obj から値型とそのボックス化された表現を抽出し、スタックの先頭にコピーします。 | オブジェクトモデルの説明 |
| 0xFE 0x13 | volatile. | 後続のポインタ参照はvolatileです。 | 命令の接頭辞 |
| 0x61 | xor | 整数値のビット単位のXORを計算し、整数を返します。 | 基本命令 |
参照
- 共通中間言語は、命令セットを使用するアセンブリ言語です。
- 共通言語インフラストラクチャは、共通中間言語が定義される標準です。
- .NET Frameworkは、共通言語インフラストラクチャのプラットフォームおよび実装です。
- Monoは、共通言語インフラストラクチャのクロスプラットフォームのオープンソース実装です。
参考文献
- C# Online.NET の CIL 命令セット (CSharp-Online.NET)
- ECMA - CIL 命令セット - ページ 321 (ECMA-335.pdf)