CIL - ldc.i4 33和ldc.i4.33有什么区别?

时间:2011-04-30 07:16:55

标签: .net cil opcode

我正在试图弄清楚一些CIL代码。但似乎这两个陈述做了同样的事情(根据我读过的所有内容)。

ldc.i4 33

ldc.i4.33

两者都应该“将int32加载到值为33的堆栈上”。

这是对的吗?为什么?我原以为ldc.i4.33会“将局部变量索引33中的整数加载到堆栈上”。

我在哪里错了?

1 个答案:

答案 0 :(得分: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等完全相同。