C# Code:
- public static void Main3_3_3()
- {
- int x = 10;
- int y = 6;
- if (x > y)
- {
- Console.WriteLine(x);
- }
- else
- {
- Console.WriteLine(y);
- }
- Console.Read();
- }
对应MSIL及其注释:
- .method public hidebysig static void Main3_3_3() cil managed
- {
- .maxstack 2
- .locals init (
- [0] int32 x,
- [1] int32 y,
- [2] bool CS$4$0000)//定义三个变量
- L_0000: nop
- L_0001: ldc.i4.s 10//把整型值10载入堆栈
- L_0003: stloc.0 //把刚才载入堆栈的10赋值给第一个local变量,也就是int x=10;
- L_0004: ldc.i4.6 //把整型值6载入堆栈
- L_0005: stloc.1 //把刚才载入堆栈的6赋值给第二个local变量,也就是int y=6;
- L_0006: ldloc.0
- L_0007: ldloc.1 //这两句,把x,y两个local变量载入堆栈
- L_0008: cgt //比较x,y的大小,结果会保存在堆栈最上方(结果以0或1表示true ,false)
- L_000a: ldc.i4.0 //把0载入堆栈
- L_000b: ceq //比较0和cgt的运算结果是否相等,结果会保存在堆栈最上方(结果以0或1表示true ,false)
- L_000d: stloc.2 //ceq的运算结果保存入bool变量中
- L_000e: ldloc.2 //再把ceq运算结果载入
- L_000f: brtrue.s L_001a//判断跳转,若跳转显式Y,不跳转显式X
- L_0011: ldloc.0
- L_0012: call void [mscorlib]System.Console::WriteLine(int32)
- L_0017: nop
- L_0018: br.s L_0021
- L_001a: ldloc.1
- L_001b: call void [mscorlib]System.Console::WriteLine(int32)
- L_0020: nop
- L_0021: call int32 [mscorlib]System.Console::Read()
- L_0026: pop
- L_0027: ret
- }