3

私はいくつかのCILコードを理解しようとしています。しかし、これら2つのステートメントは同じことをしているようです(私が読んだすべてによると)。

ldc.i4 33

ldc.i4.33

どちらも「値33のスタックにint32をロードする」と思われます。

これは正しいです?なんで?ldc.i4.33「ローカル変数インデックス 33 から整数をスタックにロードする」と思っていたでしょう。

ここでどこが間違っていますか?

4

1 に答える 1

6

オペコード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などです。

于 2011-04-30T07:21:38.113 に答える