ildasm和.ldarg - 里面发生了什么?

gbk*_*gbk 1 .net c# il cil visual-studio-2012

使用c#,Net framework 4.5 notePad

尝试理解CIL(IL)语言的原理.目前创建2个简单方法

 public static Int32 Add(Int32 a, Int32 b)
    {
        return a + b;
    }
    public Int32 Add1(Int32 a, Int32 b)
    {
        return a + b;
    }
Run Code Online (Sandbox Code Playgroud)

在ildasm.exe打开后得到了

ildasm结果

为什么在Add方法CIL中使用堆栈0中的加载参数和堆栈1中的第二个 - 在方法Add1中使用堆栈0或者我错过了什么?

小智 9

您的第一个方法传递两个参数,a(0)和b(1).你的第二个传递三个参数,this(0),a(1)和b(2).即使你没有使用this它,它仍然存在.

  • @Blindy这个问题是关于IL的,不是关于x86程序集的.当IL编译成机器代码时,`this`将通过寄存器传递. (2认同)