Featured image of post Windows下一键编译运行汇编的make文件

Windows下一键编译运行汇编的make文件

本文利用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即可。

makefile文件源码

以下makefile文件假定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)

需要特别注意的是makefile文件仅允许使用Tab来缩进,空格缩进会报错

运行效果

以一个在终端打印Hello, World!的简单80386汇编程序为例。通过make直接编译运行的效果如下:

make运行的结果

其他

  • 可以安装VS Code的Makefile Tools扩展,以便直接在VS Code内打开侧边栏生成和运行汇编。
  • 如果需要带命令行参数,可以加到第二十四行后面,或自行在终端中运行。

注释

  1. 基普·R.欧文所著《汇编语言:基于x86处理器》一书中所用的库。如不引用这些库,删掉第六行中的 /ID:/irvine与第七行中的 /LIBPATH:D:/Irvine
最后更新于 2023年3月18号