我正在试图弄清楚一些CIL代码。但似乎这两个陈述做了同样的事情(根据我读过的所有内容)。
ldc.i4 33
和
ldc.i4.33
两者都应该“将int32加载到值为33的堆栈上”。
这是对的吗?为什么?我原以为ldc.i4.33
会“将局部变量索引33中的整数加载到堆栈上”。
我在哪里错了?
答案 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
等完全相同。