「アセンブリコードの出力」の編集履歴(バックアップ)一覧はこちら

アセンブリコードの出力」(2009/06/12 (金) 16:21:24) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

まあググれば出てくると思うけど vcでアセンブリコードを出力してみる方法。 どんなコードが出てくるのかなーという参考程度に。 1. visual studioで設定する。 &ref(vcasm.png) 1. 「visual studio 200x コマンドプロンプト」からやる。 (pathとかを自動的に通してくれる。) &ref(vccmd.png) で、ファイルの置いてあるディレクトリに移動してコンパイルする。 たとえばファイルが「d:\user_data\Documents\C\local_vs_global.c」だったら >d: >cd D:\user_data\Documents\C >cl /FAs /Ox local_vs_global.c でokなはず。 /Oxは最大限の最適化なので、いろいろへんてこな最適化をしてくれて楽しい。 たとえば int g_val; void func1() { int a=g_val; ++a; g_val=a+2; } void func2() { int a=g_val, b=g_val<<1; ++a; g_val=a-b; } int main() { func1(); func2(); return 0; } これぐらいの小さいコードなら、g_valがグローバルなのにもかかわらず、ちゃっかりレジスタに乗ったりする。
まあググれば出てくると思うけど vcでアセンブリコードを出力してみる方法。 どんなコードが出てくるのかなーという参考程度に。 1. visual studioで設定する。 &ref(vcasm.png) 2. または「visual studio 200x コマンドプロンプト」からやる。 (pathとかを自動的に通してくれる。) &ref(vccmd.png) で、ファイルの置いてあるディレクトリに移動してコンパイルする。 たとえばファイルが「d:\user_data\Documents\C\local_vs_global.c」だったら >d: >cd D:\user_data\Documents\C >cl /FAs /Ox local_vs_global.c でokなはず。 /Oxは最大限の最適化なので、いろいろへんてこな最適化をしてくれて楽しい。 たとえば int g_val; void func1() { int a=g_val; ++a; g_val=a+2; } void func2() { int a=g_val, b=g_val<<1; ++a; g_val=a-b; } int main() { func1(); func2(); return 0; } これぐらいの小さいコードなら、g_valがグローバルなのにもかかわらず、ちゃっかりレジスタに乗ったりする。

表示オプション

横に並べて表示:
変化行の前後のみ表示: