エリックの答えに基づいて、私が見つけたものをいくつか紹介します。理由がわかる場合はそれを示しましたが、そうでない場合は自由に推測します。それらの推測が間違っているかどうかを遠慮なく示してください。
Break
共通言語インフラストラクチャ (CLI) に信号を送って、ブレーク ポイントが作動したことをデバッガーに通知します。
System.Diagnostics.Debugger.Break() を呼び出してこれを行います。これは、その命令を直接使用するのではなく、CLR に組み込まれた BreakInternal() メソッドを使用するように見えます。
Cpblk
とCpobj
指定されたバイト数を送信元アドレスから宛先アドレスにコピーします。オブジェクトのアドレスにある値型 (&、* またはネイティブ int 型) をコピー先オブジェクト (&、* またはネイティブ int 型) のアドレスにコピーします。
これらは C++/CLI (以前の Managed C++) 用に追加されたものだと思いますが、それは私の推測にすぎません。また、特定のシステム コールに存在する場合もありますが、コンパイラによって正常に生成されず、危険な楽しみやゲームにある程度の範囲を提供します。
Endfilter
例外のフィルター句から共通言語インフラストラクチャ (CLI) の例外ハンドラーに制御を戻します。
C# は例外フィルタリングをサポートしていません。ただし、VB コンパイラは間違いなくこれを利用します。
Initblk
特定のアドレスにある指定されたメモリ ブロックを、指定されたサイズと初期値に初期化します。
これが安全でないコードや C++/CLI で役立つ可能性があることをもう一度推測します。
Jmp
現在のメソッドを終了し、指定されたメソッドにジャンプします。
この種のトランポリンは、テール コールを避けたい人に役立つのではないかと推測します。おそらくDLRはそれを利用していますか?
Tailcall
実際の呼び出し命令が実行される前に現在のメソッドのスタック フレームが削除されるように、後置メソッド呼び出し命令を実行します。
他の場所で詳細に説明されていますが、現在、c# コンパイラはこのオペコードを出力しません
Unaligned
現在評価スタックの一番上にあるアドレスが、直後の ldind、stind、ldfld、stfld、ldobj、stobj、initblk、または cpblk 命令の本来のサイズにアラインされていない可能性があることを示します。
C# (および CLR) は、結果として得られるコードとデータの多くの整列された性質に関して、かなりの数の保証を行います。これが出力されないのは当然のことですが、これが含まれる理由はわかります。
Unbox
値型のボックス化された表現をボックス化されていない形式に変換します。
Unbox_Any
C# コンパイラは、この目的のためだけに命令を使用することを好みます。これが 2.0 リリースの命令セットに追加されたことに基づいて、ジェネリックが実現可能になるか、はるかに単純になると思います。その時点で、ジェネリックであろうとなかろうと、すべてのコード全体でそれを使用することは、より安全で、より単純で、より高速でした (またはすべての組み合わせでした)。
脚注:
Prefix1、Prefix2、Prefix3、Prefix4、Prefix5、Prefix6、Prefix7、Prefixref
インフラストラクチャー。これは予約命令です。
これらは命令そのものではありません。一部の IL 命令は他の命令よりも長くなります。これらの可変長のものは、解析を明確にするために、それ自体では決して有効ではないプレフィックスで開始する必要があります。これらのプレフィックス オペコードはそのために予約されているため、他の場所では使用されません。間違いなく、IL シーケンス用の switch ステートメント ベースのパーサーを実装している人は、それらをトラップして状態を維持できるので、これらを高く評価するでしょう。