2.6 构建编程环境
由于Win32汇编可以采用多种编译软件,它们的环境设置方法各不相同,对已经入门的读者来说,这不是问题,但初学者往往不能很好地掌握设置的方法,以至于拿到例子程序后编译不出来,不少人往往在例子一而再、再而三编译不出来后深受打击,还没有来得及看到汇编的一点影子就“告别”了这个神秘又精彩的世界。
本书的例子是基于MASM32软件包的,本节介绍MASM32使用中的一些问题。
2.6.1
IDE还是命令行
IDE(Integrated Develope Environment)即集成开发环境,Microsoft的Visual Studio中的VC和VB等开发环境就是IDE的最好例子,MASM32软件包中同样有一个简单的IDE环境Qeditor.exe,但MASM32中编译、链接用的是Ml.exe和Link.exe,所以这个IDE环境实际上只是一个简单的文本编辑器加上一个用户可以自行设置菜单的Shell,编译链接工作靠调用其他软件完成。
如果要使用这个IDE环境,最大的代价就是不得不使用这个简单的编辑器,而一个好的文本编辑器对工作效率的影响是很大的,一个完善的文本编辑器必须包括语法高亮显示、强大的查找替换、无限次Undo和Redo操作、支持特大型的源文件等功能,MASM32中简单的Qeditor.exe符合不了这些要求。
所以建议读者还是抛弃这个IDE环境,用一个功能强大的文本编辑软件来写源程序,然后在命令行环境中用nmake来维护代码,这样有一个额外的好处,就是makefile文件同时记录了文件的编译与链接参数,可以在以后方便维护。
这里介绍两个很适合用来编辑汇编源文件的文本编辑软件:
● EditPlus——这是一个为程序员编写的文本编辑软件,内置HTML,CSS,PHP,ASP,Perl,C/C++,Java,JavaScript和VBScript的语法高亮显示,也可以下载ASM语法文件,它包括了所有文本编辑软件应该具有的功能:自定义工具菜单,显示行号,语法自动完成,列选择功能(以前只在WPS中看到过),无限次Undo/Redo和语法检查等功能。读者可以从http://www.下载使用版,使用版可以通过输入注册码成为正式版本。
● UltraEdit32——这是一个文本编辑/16进制编辑软件,有EditPlus的大部分功能外加16进制编辑功能,同样有语法高亮显示等功能,笔者认为其惟一的缺陷就是没有列选择功能,这个功能在编辑中比较有用。UltraEdit32是一个共享软件,可以从http://www.下载,同样可以通过输入注册码成为正式版本。
2.6.2
本书推荐的工作环境
本书建议读者放弃MASM32简单的IDE环境,改为在命令行下用nmake工具进行代码维护,为了建立这个环境,需要做下面的工作。
第1步:安装常用软件,包括编辑软件Editplus,MSDN,16进制编辑器hexedit,可视化资源编辑器Resource Workshop,调试工具Soft-ICE和反汇编软件W32DASM等,如果空间允许的话,最好安装Visual C++,以便使用它集成的资源编辑器。
第2步:选择一个驱动器安装MASM32软件包,安装好的目录是x:\Masm32目录,对读者来说整个软件包中重要的只有3个目录:bin目录中有汇编编译器ml.exe,资源编译器rc.exe和链接器Link.exe等执行文件;include目录中有各种头文件;lib目录中有全部导入库。MASM32没有选择地把安装目录名定为masm32,如果不满意的话,完全可以把这3个关键目录拷贝到别的用户自己命名的目录中,对使用没有任何影响。
第3步:建立源文件目录,由于Win32汇编不再像DOS汇编一样一个项目只有一个asm文件,而是包括asm,rc,makefile和图标等多个文件,如果把多个项目的文件混在同一个目录中将无法分辨,所以必须为每个项目单独建立一个目录,建议把这些目录集中在一个专门放置源程序的目录中,如x:\Source目录。
第4步:由于MASM32软件包中没有nmake.exe文件,所以要单独寻找nmake.exe并拷贝到bin目录中。
第5步:为这个环境建立一个设置环境变量的批处理文件,假设文件名为Var.bat,那么这个文件内容如下:
@echo off
set include=x:\masm32\Include
set lib=x:\masm32\lib
set path=x:\masm32\bin;%path%
echo on
文件中设置了3个环境变量:
● include变量指定头文件的搜索目录。在asm和rc文件中可以根据这个变量寻找include语句指定的文件名,避免了使用头文件的全路径名,这样以后移动了MASM32的安装位置就不必修改每个源文件中的include语句。如果使用Visual C++的集成环境来建立rc文件的话,为了使rc.exe能找到头文件,还要把VC++安装目录下的Include和MFC\Include目录包含进来,中间用“;”隔开:
set include=x:\masm32\Include;VC目录\Include;VC目录\MFC\Include
VC++安装目录一般为C:\Program Files\Microsoft Visual Studio\VC98\。
● lib变量指定导入库文件的搜索目录。在asm文件中可以根据这个变量寻找includelib语句指定的导入库文件,Link.exe也根据这个变量寻找库文件的位置。
● path变量就不必多解释了。它只是使我们不必在键入命令时带长长的路径而已。
2.6.3
尝试编译第一个程序
按照上面的步骤安装完成后,下面来编译一个程序测试一下。打开一个文件浏览窗口,切换到源文件目录x:\Source,然后把本书所带光盘中的Chapter02\Test目录拷贝过来,现在有了一个需要编译的Test.asm文件在x:\Source\Test目录中。
打开一个MS-DOS窗口,并键入Var执行已建立的Var.bat,这时环境变量和路径已经设置好了,可以键入SET命令验证一下include和path等环境串是否正确,然后键入x:以及cd \Source\Test切换到要工作的目录中,并键入nmake,当屏幕上出现如下所示的正确的编译链接信息后,Test.exe就建立完成了。
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
ml /c /coff Test.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.
All rights reserved.
Assembling: Test.asm
rc Test.rc
Link /subsystem:windows Test.obj Test.res
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
执行一下Test.exe,会出现一个简单的对话框,表示一个可以执行的Win32程序正确生成了。万事大吉,这样就可以开始Win32汇编之旅了!
如果编译的过程中出现“can not open file xxx.inc”或“can not open file xxx.lib”的提示时,就要检查Var.bat文件中include或lib的路径是否正确。
下面的工作就是:编辑源程序→切换到MS-DOS窗口→键入nmake编译→运行生成的可执行文件→切换到文本编辑器修改源程序……如此循环往复调试程序。
执行Var.bat设置环境变量的操作只需在每次刚打开MS-DOS窗口的时候执行一次就可以了。调试Win32汇编程序时常见的桌面如图2.5所示。
屏幕上一般有个MS-DOS窗口来执行编译命令,有一个文本编辑器窗口修改源代码,同时使用MSDN等联机帮助文件,当然再开一个WinAmp窗口同时听一听MP3也不错!