CIL には、、、、 …などの読み込み命令がありldc.i4.0
ます。 </p>
ldc.i4.1
ldc.i4.2
ldc.i4.3
ldc.i4 1
の代わりにldc.i4.1
またはldc.i4 5
の代わりに使用することは可能ldc.i4.5
ですか?
ldc.i4 1
はい、の代わりに使用することは完全に合法ですldc.i4.1
。シングルバイトのオペコードは、最も一般的なシナリオでの効率と簡潔さのために提供されています。特に、これらすべてldarg.0
(1バイト)はすぐに合計され、(3バイト)の場合のように、アセンブリのサイズが大幅に増加します。1ではなく5バイトです。ldarg 0
ldc.i4.1
i++
ldc.i4 1
それらを使用する義務はありません。実際には、JITがより冗長な使用法を見つけて、とにかく同じように扱うことを期待しますが、そうする必要はありません。
個人的には、「emit」などを実行しているときは、任意の値/ローカル/引数などに最も適切なコードを出力するユーティリティメソッドを使用します。
ここにCLRコードインジェクションに関する良い記事があります:http: //www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time