私はいくつかのCILコードを理解しようとしています。しかし、これら2つのステートメントは同じことをしているようです(私が読んだすべてによると)。
ldc.i4 33
と
ldc.i4.33
どちらも「値33のスタックにint32をロードする」と思われます。
これは正しいです?なんで?ldc.i4.33
「ローカル変数インデックス 33 から整数をスタックにロードする」と思っていたでしょう。
ここでどこが間違っていますか?
オペコードldc.i4.33
が存在しません。
以下から、いくつかの特別な (マクロと呼ばれる) オペコードがあります。
ldc.i4.m1 // has the same effect as: ldc.i4 -1
に
ldc.i4.8 // has the same effect as: ldc.i4 8
ldc.i4
ただし、一般的なケースでは、CIL サイズを最適化するための短い形式のオペコードにすぎません。
同様に、ldloc.0
は短い形式です (つまり、よりコンパクトな CIL エンコーディングがありますが、まったく同じことを行います)ldloc 0
などです。