我有三年.NET(C#和VB)全职工作经验。我对MSIL具有良好的工作知识,可以将其用作调试工具。.NET JIT编译天真
我对编译过程的下一步没有太多的了解,即当Jitter产生汇编代码(显示在拆散窗口中)时。 Hans Passant在这里发布了一个问题的答案:What is the difference between native code, machine code and assembly code?。我的经验更丰富的同事说,这是一个辉煌的答案,但我还是不明白下面的代码:
static void Main(string[] args) {
Console.WriteLine("Hello world");
00000000 55 push ebp ; save stack frame pointer
00000001 8B EC mov ebp,esp ; setup current frame
00000003 E8 30 BE 03 6F call 6F03BE38 ; Console.Out property getter
00000008 8B C8 mov ecx,eax ; setup "this"
0000000a 8B 15 88 20 BD 02 mov edx,dword ptr ds:[02BD2088h] ; arg = "Hello world"
00000010 8B 01 mov eax,dword ptr [ecx] ; TextWriter reference
00000012 FF 90 D8 00 00 00 call dword ptr [eax+000000D8h] ; TextWriter.WriteLine()
00000018 5D pop ebp ; restore stack frame pointer
}
00000019 C3 ret ; done, return
任何人都可以提供每行发生了什么,更具体为什么每个寄存器例如选择的更多信息为什么选择eax代替edx?或者任何人都可以推荐一本书?
如果我编辑,你做得很好,介意吗? –
继续,请随时:) –
把我的两美分。 –