「アセンブリコードの出力」の編集履歴(バックアップ)一覧はこちら
アセンブリコードの出力 - (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がグローバルなのにもかかわらず、ちゃっかりレジスタに乗ったりする。