1,安装masm32,并设置环境变量:
@echo
off
set Masm32Dir=E:\masm32
set include=%Masm32Dir%\Include;%include%;D:\dyk\vc6\Include;D:\dyk\vc6\MFC\Include
set lib=%Masm32Dir%\lib;%lib%
set
path=%Masm32Dir%\Bin;%Masm32Dir%;%
PATH%
echo
on
再将VC6.0下的nmake.exe拷贝到Masm32的bin目录下.
2,编写代码:

.
386

.model flat,stdcall

option
casemap:none
;
引入头文件

include windows.
inc

include user32.
inc

includelib user32.lib

include kernel32.
inc

includelib kernel32.lib
;
数据段

.data

szCaption db
'
Info
',
0
;
标题

szText db
'
Hello,World!
',
0
;
信息内容
;
代码段

.code
start:

invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
;
打印"Hello,World"

invoke ExitProcess,NULL
;
结束当前进程

end start
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

.model flat,stdcall

option
casemap:none
;
引入头文件

include windows.
inc

include user32.
inc

includelib user32.lib

include kernel32.
inc

includelib kernel32.lib
;
数据段

.data

szCaption db
'
Info
',
0

szText db
'
Hello,World!
',
0

.data?

szBuffer db
1024 dup (?)
;
1K的缓冲区
;
代码段

.code
;
打印子程序,标题和文本通过eax,ebx分别传进来

PrintInfo proc

invoke MessageBox,NULL,eax,ebx,MB_OK
;
打印"Hello,World"
ret

PrintInfo endp
start:
mov eax,offset szText
;
eax中存放“文本”的地址
mov ebx,offset szCaption
;
ebx中存放“标题”的地址
call PrintInfo

invoke ExitProcess,NULL
;
结束当前进程

end start
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/03/06/1094155.html,如需转载请自行联系原作者