标 题: Jack架设WIN32汇编程序的开发环境
作 者: Jack Yang
时 间: 2007-02-25 15:18
链 接:
http://blog.csdn.net/magus_yang/archive/2007/02/25/1514026.aspx
1.
下载并安装Ultraedit
http://www.ultraedit.com/
我安装的版本是12.20b+1官方中文版,安装路径不重要。
2.
下载并安装MASM
http://www.masm32.com/
我安装的是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
每打开一个新的命令行控制台,就要执行一次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
需要注意的地方:
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文件;
Win32汇编程序的开发调试过程:
编译源程序->切换到MS-DOS窗口->键入nmake编译->运行生成的可执行文件->切换到文本编辑器修改源程序........如此循环往复调试程序。
参考资料:
罗云彬的《Windows环境下32位汇编语言程序设计》(第二版)第二章