Featured image of post Windowsでアセンブリを一発コンパイル・実行するメイクファイル

Windowsでアセンブリを一発コンパイル・実行するメイクファイル

この記事では、MASM32 SDKのコンパイラとリンカを使ってアセンブリ言語をコンパイルする方法について説明します。単一ファイルの場合に適用されます。

環境の用意

この記事で紹介する方法は、以下の環境でのみテストされています。

Windows 11 22H2、MASM32 SDK version 11、GNU Make 3.81

設定手順

  1. MakeとMASM32のバイナリディレクトリを両方システム環境変数Pathに追加します。例えば、D:\GnuWin32\bin;D:\masm32\bin;のようなものです。
  2. アセンブリソースファイルがあるディレクトリにmakefileというファイルを作成し、下記のコードを追加します。
  3. makeを実行すると、プログラムが自動的にコンパイルされ、実行されます。
  4. コンパイルをやり直したい場合は、make cleanを実行してから再度makeを実行してください。

メイクファイルのソースコード

以下のメイクファイルは、MASM32のディレクトリをD:\masm32、コンパイルしたいファイル名をtest.asmと仮定し、D:\irvineにあるライブラリファイル[1]をも参照しています。必要に応じて自由に変更することができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# コンパイラとリンカの定義
CC = ml
LD = link

# コンパイラとリンカのオプションの定義
CFLAGS = /c /coff /ID:/masm32/include /ID:/Irvine
LDFLAGS = /subsystem:CONSOLE /out:test.exe /LIBPATH:D:/masm32/lib /LIBPATH:D:/Irvine

# ソースファイル、オブジェクトファイル、実行ファイルの定義
SRC = test.asm
OBJ = test.obj
EXE = test.exe

# デフォルトターゲットの定義、実行ファイルを指定
all: $(EXE)

# ソースファイルからオブジェクトファイルを生成するルールの定義
$(OBJ): $(SRC)
	$(CC) $(CFLAGS) $<

# オブジェクトファイルから実行ファイルを生成し実行するルールの定義
$(EXE): $(OBJ)
	$(LD) $(LDFLAGS) $<
	./$@

# クリーンアップターゲットの定義、オブジェクトファイルと実行ファイルを削除
clean:
	del $(OBJ) $(EXE)

メイクファイルではタブ文字でインデントする必要があります。スペースでインデントするとエラーが発生しますので、注意してください。

実行結果

例として、ターミナルにHello, World!を出力するための簡単な80386アセンブリプログラムを使用します。makeコマンドで一発コンパイルと実行すると、以下のように出力されます。

makeの実行結果

追記

  • Makefile Toolsという拡張機能をインストールすることで、VS Code内でサイドバーからアセンブリの生成と実行を直接行うことができます。
  • コマンドライン引数を渡す必要がある場合は、24行目の後ろに追加するか、ターミナルで自分で実行してください。

註釈

  1. Kip R. Irvine氏が初心者向けに自ら設計した便利なライブラリです。これらのライブラリを使用しない場合は、6行目の /ID:/irvineと7行目の /LIBPATH:D:/Irvineを削除してください。