使用ツール:Visual Studio Community 2019
使用言語 :C言語
アセンブリコードの生成
今回は、簡単なC言語コードを用いて、アセンブリコード(*.asm)を出力する方法を確認していきます。
「なぜ、C言語なんだ?」と思われるかも知れませんが、Cコンパイラはアセンブラーリスティング ファイル出力が可能なためです。
コンパイル環境
今回、コンパイル環境として、Visual StudioのIDE(統合開発環境)は用いず、テキストエディタと『Developer Command Prompt for VS2019』を利用します。
『Developer Command Prompt for VS2019』は、Windowsメニューの「Visual Studio 2019」の中から起動します。
起動すると、コマンドプロンプト(DOS窓)が表示されます。
普通に起動したコマンドプロンプトと何が違うかと言うと、コンパイラなどへのパス設定が完了している環境になります。
サンプルコードの作成
今回は下記の様な簡単なコードを作成しました。
#include <stdio.h> void main() { int a = 1; // 変数aに1を代入 int b = 2; // 変数bに2を代入 int c = a + b; // 変数cにa+bの計算結果を代入 }
変数への代入と、足し算だけという簡単なコードです。
これを、「C:\Test\LLP_002」というフォルダを作成して、「llp_001.c」というファイル名で保存します。(フォルダ名、ファイル名は何でも構いませんが、以降のフォルダ名・ファイル名は置き換えながら読んでください)
サンプルコードのコンパイル
コマンドプロンプト(『Developer Command Prompt for VS2019』)のカレントディレクトリをサンプルコードを格納したフォルダへ変更します。
その後、「cl.exe llp_001.c」を実行してコンパイルを行います。
コードに問題が無ければエラーなくコマンドが終了し、フォルダには.objファイル、.exeファイルが生成されます。(オプションで指定なければ、アセンブリコードは生成されません)
今回のサンプルコードは実行しても何も出力しません。
アセンブリコードの出力
アセンブリコードを出力するには、「/FA」オプションを追加してコンパイルを実行します。
コンパイル時の出力メッセージ内容は「/FA」オプションを付けてもほぼ変わりませんが、フォルダには.asmファイルが生成されています。
アセンブリコード(lip_001.asm)はテキストエディタで開く事ができ、内容を確認すると下記の様にアセンブリコードが出力されている事が分かります。
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.29.30146.0 TITLE C:\Test\LLP_002\llp_001.obj .686P .XMM include listing.inc .model flat INCLUDELIB LIBCMT INCLUDELIB OLDNAMES PUBLIC _main ; Function compile flags: /Odtp _TEXT SEGMENT _c$ = -12 ; size = 4 _b$ = -8 ; size = 4 _a$ = -4 ; size = 4 _main PROC ; File C:\Test\LLP_002\llp_001.c ; Line 4 push ebp mov ebp, esp sub esp, 12 ; 0000000cH ; Line 5 mov DWORD PTR _a$[ebp], 1 ; Line 6 mov DWORD PTR _b$[ebp], 2 ; Line 8 mov eax, DWORD PTR _a$[ebp] add eax, DWORD PTR _b$[ebp] mov DWORD PTR _c$[ebp], eax ; Line 9 xor eax, eax mov esp, ebp pop ebp ret 0 _main ENDP _TEXT ENDS END
次回の予定
次回は、今回出力したアセンブリコードの内容について、確認していきたいと思います。
前の記事 | 次の記事 |
---|---|
No.01:前置き | No.03:アセンブリコードの確認 |