【IL指令】简单IL指令解析

本文深入探讨了C#代码与生成的IL(中间语言)指令之间的对应关系,通过实例展示两者执行过程,帮助理解底层实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的C#代码与IL代码的比较

C#代码如下:

	public static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a * 3 + 2);
    }

生成的IL指令如下

  .method public hidebysig static void
    Main(
      string[] args
    ) cil managed
  {
    .entrypoint //主函数
    .maxstack 2 //评估堆栈(evaluation stack)的最大深度
    .locals init (
      [0] int32 a
    )    		//本地变量的定义

    IL_0000: nop  //啥都不做
    IL_0001: ldc.i4.1		//将常量1存入评估堆栈
    IL_0002: stloc.0      //从评估堆栈中取出值保存到序号为0的本地变量
    IL_0003: ldloc.0      //读取序号为0的本地变量并存入评估堆栈
    IL_0004: ldc.i4.3		//将常量3存入评估堆栈
    IL_0005: mul			//从评估堆栈中取出两个值,计算相乘的结果并存入评估堆栈
    IL_0006: ldc.i4.2		//将常量2存入评估堆栈
    IL_0007: add			//从评估堆栈中取出两个值,计算相加的结果并存入评估堆栈
    //调用Console.WriteLine方法,参数从评估堆栈中取出
    IL_0008: call         void [mscorlib]System.Console::WriteLine(int32)
    IL_000d: nop //啥都不做
    IL_000e: ret //从函数返回,当返回类型不为void时从评估堆栈取出返回值
  } // end of method Program::Main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值