window XP环境下配置VC6.0的Win32汇编语言开发环境
在Win32汇编语言开发环境时,虽然用的是masm32软件开发包,使用nmake编译就可以,但是不能调试,为了能方便调试Win32汇编语言,采用VC6.0开发工具就比较方便,即可以兼容旧的操作系统dll,资源占用又比较小,因此本篇介绍在VC6.0的Win32开发环境的配置。
1.下载并安装masm32软件开发包,这里安装在C盘的根目录下。
masm32 sdk下载地址:http://www.masm32.com/download.htm
2.打开VC6.0,新建一个win32应用程序 ,输入工程名及保存位置
点击【确定】按钮,选择空项目,然后点【完成】
在工作区,选择FileView选项,右击Source File选项,添加asm源文件
这里输入asm文件名,一定要以.asm为后缀名
然后输入win32的汇编源代码,然后把相关的资源文件添加到工程中。
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.constszCaption db '恭喜',0
szText db '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.code
start:invoke MessageBox,NULL,offset szText,offset szCaption,MB_OKinvoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end start
3.设置编译环境:
点击菜单【工具】=》【选择】=》【目录】选项,在【显示目录为】选项切换到【Executable files】选项添加masm32的bin目录
切换到【Include files】选项,添加头文件目录
切换到【Library files】选项,添加lib库文件目录
这个时候编译,运行,提示没有可执行程序,说明没有生成exe
选中hello.asm汇编源文件,右键,选择【Settings】选项
选中【Custom Build】选项,在命令项行添加
ml /c /coff /Zi /Fo$(TargetDir)\$(InputName).obj $(InputPath)
命令,在输出项中添加 $(TargetDir)\$(InputName).obj
然后点确定,再次编译,
链接,生成可执行程序
运行:
说明汇编环境配置成功,这样我们就可以调试了,首先在代码里添加3行汇编代码
mov eax, 6
mov ebx, 7
add eax, ebx
在mov eax,6所在行添加断点,调试
执行下一步
再执行下一行
执行add eax, ebx
到此,win32的VC6.0开发环境就配置后了,
------------------------------------------------------------------------------
上面的只是编译调试单个asm源文件,如果有多个源文件呢,是一样的效果吗,这里我们按上面的方法新建工程,添加两个源文件:
这里的两个asm源文件,Main.asm是包含_ProcessPeFile.asm的,也都设置了ml汇编的编译命令
那是什么原因呢,经过多次修改编译,还是会报各种错误,最后,只设置Main.asm的ml编译命令才成功,
清理工程,再次编译
链接
运行:
为什么两个asm源文件都设置汇编的编译命令不行呢,原因是被包含的源文件并不是一个独立生成obj文件,里面并没有
.386
.model flat, stdcall
option casemap :none
它也不需要生成obj文件,类似于C语言的头文件,编译的时候被嵌入到Main.asm文件中,因此不需要设置汇编编译命令。如果是一个独立生成obj文件的,那么是需要添加ml编译命令