我有三年.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?或者任何人都可以推薦一本書?
如果我編輯,你做得很好,介意嗎? –
繼續,請隨時:) –
把我的兩美分。 –