.NET (C# および VB) をフルタイムで 3 年間使用した経験があります。MSIL について十分な知識があり、デバッグ ツールとして使用できます。
コンパイル プロセスの次のステップ、つまり、Jitter がいつアセンブリ コードを生成するか (dissassebly ウィンドウに表示される) について、私はあまり知りません。Hans Passant が質問への回答を投稿しました:ネイティブ コード、マシン コード、アセンブリ コードの違いは何ですか? . 私のより経験豊富な同僚は、これは素晴らしい答えだと言いましたが、私はまだ次のコードを理解していません:
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
各行で何が起こっているのか、特に各レジスタが選択された理由、たとえば edx ではなく eax が選択された理由について、より多くの情報を提供できる人はいますか? あるいは、誰かが本を推薦できますか?