标 题: Jack架设WIN32汇编程序的开发环境
作 者: Jack Yang
时 间: 2007-02-25 15:18
1. 下载并安装Ultraedit
http://www.ultraedit.com/
我安装的版本是12.20b+1官方中文版,安装路径不重要。
2. 下载并安装MASM
我安装的是Version 9,安装路径为:D:/masm32
3. make工具
http://211.90.241.130:22366/view.asp?file=53
压缩包中有两个make工具
nmake.exe是Microsoft (R) Program Maintenance Utility
Version 1.50
make.exe是MAKE Version 4.0 Copyright (c) 1987, 1996 Borland International
这两个make工具所支持的Makefile语法和常用的选项大同小异。
把nmake.exe和make.exe解压到Masm32安装目录的bin子目录下。
4. 编写一个用于设置环境变量的批处理文件var.bat
文件的内容如下:
@echo
off
rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir = D: Masm32
set include = %Masm32Dir% Include ; %include%
set lib = %Masm32Dir% lib ; %lib%
set path = %Masm32Dir% Bin ; %Masm32Dir% ; % PATH %
echo on
rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir = D: Masm32
set include = %Masm32Dir% Include ; %include%
set lib = %Masm32Dir% lib ; %lib%
set path = %Masm32Dir% Bin ; %Masm32Dir% ; % PATH %
echo on
每打开一个新的命令行控制台,就要执行一次var.bat文件。
省力的做法是把环境变量添加到用户变量,或系统变量中去。
可以使用下列命令查看环境变量的设置情况:
C:/>echo %include%
C:/>echo %lib%
C:/>echo %path%
5. 编写makefile
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
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
需要注意的地方:
1) nmake默认将Makefile文件的第一条规则中的目标文件作为最终文件。例子中的最终文件就是Test.exe
2) 引用EXE或OBJS这些宏时一定要加上括号,如:$(EXE)、$(OBJS) 、$(RES)
3) makefile的换行符是“/”,“/”后面不能再加上其它字符,包括注释和空格
4) 隐含规则中几个用来指定文件名的特殊预定义宏
$@ - 目标文件的全路径文件名
$*
- 目标文件的除去扩展名的全路径文件名
$?
- 所有源文件(依赖文件)的文件名
$<
- 源文件(依赖文件)的文件名
5) 显式规则的定义格式:
目标文件 : 依赖文件
命令
目标文件 : 依赖文件
命令
6) 隐含规则的定义格式:
.源扩展名.目标扩展名:
命令
.源扩展名.目标扩展名:
命令
用MASM编译和链接一个Win32汇编源程序常用的命令是:
ml /c /coff xx.asm
link /subsystem:windows xx.obj yy.lib zz.res (普通PE文件)
link /subsystem:console xx.obj yy.lib zz.res (控制台文件)
link /subsystem:windows /dll /def:aa.def xx.obj yy.lib zz.res (DLL文件)
6. 执行nmake.exe
nmake的常用选项如下:
/?
显示帮助信息
/f
指定描述文件(makefile)的文件名
/x
把屏幕输出的信息存到一个文件中
/a
强制更新所有文件
/b
文件时间相等时也要更新文件
/d
make时显示文件新旧信息
/n
显示make时要执行的命令,但并不真正执行
/p
make是显示详细的信息
宏定义
用新的定义覆盖描述文件(makefile)中的宏定义
目标
指定建立描述文件(makefile)中描述的某个文件
如:
make clean
用于清除编译过程中产生的临时文件,即执行del *.obj和del *.res两条命令;
make test.obj
只编译test.asm生成test.obj文件;
make test.res
只编译test.rc生成test.res文件;
如:
make clean
用于清除编译过程中产生的临时文件,即执行del *.obj和del *.res两条命令;
make test.obj
只编译test.asm生成test.obj文件;
make test.res
只编译test.rc生成test.res文件;
Win32汇编程序的开发调试过程:
编译源程序->切换到MS-DOS窗口->键入nmake编译->运行生成的可执行文件->切换到文本编辑器修改源程序........如此循环往复调试程序。
参考资料:
罗云彬的《Windows环境下32位汇编语言程序设计》(第二版)第二章