[IL] 纯文本查看 复制代码
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint //程序入口
// Code size 19 (0x13)
.maxstack 3 //定义函数代码所用堆栈的最大深度,也可理解为Call Stack的变量个数
//以下我们把它看做是完成代码中的初始化
.locals init (int32 V_0,int32 V_1,int32 V_2) //定义 int 类型参数 V_0,V_1,V_2 (此时已经把V_0,V_1,V_2存入了Call Stack中)
IL_0000: nop //即No Operation 没有任何操作,我们也不用管它
IL_0001: ldc.i4.1 //加载第一个变量"i" (压入Evaluation Stack中)
IL_0002: stloc.0 //把"i"赋值给Call Stack中第0个位置(V_0)
IL_0003: ldc.i4.2 //加载第二个变量"j" (压入Evaluation Stack中)
IL_0004: stloc.1 //把"j"赋值给Call Stack中第1个位置(V_1)
IL_0005: ldc.i4.3 //加载第三个变量"k" (压入Evaluation Stack中)
IL_0006: stloc.2 //把 "k" 赋值给Call Stack中第2个位置(V_2)
//上面代码初始化完成后要开始输出了,所要把数据从Call Stack中取出
IL_0007: ldloc.0 //取Call Stack中位置为0的元素(V_0)的值("i"的值) (相当于Copy一份值Call Stack中V_0的值。V_0本身的值是不变的)
IL_0008: ldloc.1 //取Call Stack中位置为1的元素(V_1)的值("j"的值) (同上)
IL_0009: add // 做加法操作
IL_000a: ldloc.2 // 取出Call Stack中位置为2的元素(V_2)的值("k"的值)
IL_000b: add // 做加法操作
IL_000c: call void [mscorlib]System.Console::WriteLine(int32) //调用输出方法
IL_0011: nop
IL_0012: ret //即为 return 标记 返回值
} // end of method Program::Main