常用的32位汇编编译器有微软的MASM、Borland的TASM和NASM;不过他们各有自己的不足,一般使用基于MASM的MASM32 SDK做为开发环境。
不过要注意MASM32只能安装在32位操作系统上,想在64操作系统使用需要先在32位操作系统安装然后再拷贝过去(MASM32安装后文件夹就像一个绿色软件不用担心拷过去后运行不起来)
编译器 | 开发者 | 优点 | 缺点 |
MASM | 微软 | 微软自家软件和系统兼容性好;支持invoke/.if等伪指令将汇编变得和C++差不多 | 就一个编译器,没有资源编译器和链接器,也没有头文件 |
TASM | Borland | 支持伪指令,有资源编译器和链接器 | 没有Windows数据结构和预定义的头文件,现在官方似乎不维护了 |
NASM | 开源 | 同时支持Windows和Linux | 不支持伪指令,没有Windows数据结构和预定义的头文件 |
1.下载
下载链接:http://www.masm32.com/download.htm
2.安装
当前我下载的是v11r版本,将下载的zip包解压后得到的是一个齿轮图标的install.exe文件,双击运行开始安装。
3.配置环境变量
打开:控制面板--系统和安全--系统--高级系统设置--高级--环境变量
创建以下环境变量(如果已存在则在其末尾追加,Masm32Dir根据自己安装路径修改):
Masm32Dir=D:\masm32
include=%Masm32Dir%\Include;
lib=%Masm32Dir%\lib;
path=%Masm32Dir%\Bin;%Masm32Dir%;
4.安装VC++6.0【可选】
4.1到其%VC_HOME%\VC98\Bin目录下把nmake.exe复制到%Masm32Dir%\Bin目录下
使用nmake则nmake会根据makefile执行ml和link完成程序编译(makefile放于与源代码同级目录下,在makefile目录下执行nmake),如果不使用nmake则需要手动ml和link
写makefile和每次修改都要执行ml和link哪个方便看自己权衡了;建议要反复调试的程序直接写个makefile,简单的直接ml/link。
4.2使用VC++6.0编缉.rc文件
在调试对话框的大小和样式时,所见即所得比每次进行修改后都重新编译运行显然是方便得多的。所以我们可以借用VC++来编缉.rc文件(直接拖进去即可)。
不过VC++编缉.rc文件保存时会自动添加一些VC++的头文件如果继续保存为.rc文件,为了保证使用rc命令编译成.res时能找到所有文件,需要把VC++的%VC_HOME%\VC98\Include目录追加到第3步中的include环境变量中,把%VC_HOME%\VC98\Lib目录追加到第3步中的lib环境变量中;当然也可以在编缉后直接保存成编远程好的.res文件。
。
5.编译程序
手动编译:
rc Test.rc
ml /c /coff Test.asm
Link /subsystem:windows Test.obj Test.res
使用nmake编译时对应的makefile:
EXE = Test.exe #指定输出文件
OBJS = Test.obj #需要的目标文件
RES = Test.res #需要的资源文件
LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项
$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
参考: