1,安装masm32,并设置环境变量:
@echooff
setMasm32Dir=E:/masm32
setinclude=%Masm32Dir%/Include;%include%;D:/dyk/vc6/Include;D:/dyk/vc6/MFC/Include
setlib=%Masm32Dir%/lib;%lib%
setpath=%Masm32Dir%/Bin;%Masm32Dir%;%PATH%
echoon
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
再将VC6.0下的nmake.exe拷贝到Masm32的bin目录下.
2,编写代码:
.386
.modelflat,stdcall
optioncasemap:none

;引入头文件
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib

;数据段

.data
szCaptiondb'Info',0;标题
szTextdb'Hello,World!',0;信息内容

;代码段

.code
start:
invokeMessageBox,NULL,offsetszText,offsetszCaption,MB_OK;打印"Hello,World"
invokeExitProcess,NULL;结束当前进程
endstart
3,进入代码目录,用nmake编译程序,出现下面的错误:

这是因为还没有MAKEFILE,所以无法进行编译,拷贝一个MAKEFILE修改如下:
EXE=Hello.exe#指定输出文件
OBJS=Hello.obj#需要的目标文件

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
因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:

目录下生成如下图:

运行Hello.exe,即完成第一个”Hello,World”了,

对于这个代码有一个问题我还不大清楚,.inc文件和.lib文件的区别是什么?我个人理解.inc是变量和函数的声明,而.lib是静态链接库,包含着函数的具体实现,再有一个感觉就是
MAKEFILE的书写也是一门学问。。
代码重新封装下:
.386
.modelflat,stdcall
optioncasemap:none

;引入头文件
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib

;数据段

.data
szCaptiondb'Info',0
szTextdb'Hello,World!',0

.data?
szBufferdb1024dup(?);1K的缓冲区

;代码段
.code

;打印子程序,标题和文本通过eax,ebx分别传进来
PrintInfoproc
invokeMessageBox,NULL,eax,ebx,MB_OK;打印"Hello,World"
ret
PrintInfoendp

start:
moveax,offsetszText;eax中存放“文本”的地址
movebx,offsetszCaption;ebx中存放“标题”的地址
callPrintInfo
invokeExitProcess,NULL;结束当前进程
endstart