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

アセンブリコードの出力 - (2009/06/12 (金) 15:56:29) の1つ前との変更点

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

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

まあググれば出てくると思うけど vcでアセンブリコードを出力してみる方法。 どんなコードが出てくるのかなーという参考程度に。 1. 「visual studio 200x コマンドプロンプト」を開く (pathとかを自動的に通してくれる。) 2. ファイルの置いてあるディレクトリに移動してコンパイルする たとえばファイルが「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 200x コマンドプロンプト」を開く (pathとかを自動的に通してくれる。) &ref(vccmd.png) 2. ファイルの置いてあるディレクトリに移動してコンパイルする たとえばファイルが「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がグローバルなのにもかかわらず、ちゃっかりレジスタに乗ったりする。

表示オプション

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