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