1,安装masm32,并设置环境变量:

None.gif@echo off
None.gif
set Masm32Dir=E:\masm32  
None.gif
set include=%Masm32Dir%\Include;%include%;D:\dyk\vc6\Include;D:\dyk\vc6\MFC\Include
None.gif
set lib=%Masm32Dir%\lib;%lib%
None.gif
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
None.gif
echo on
None.gif

   再将VC6.0下的nmake.exe拷贝到Masm32bin目录下.

2,编写代码:

None.gif.386
None.gif.model flat,stdcall
None.gifoption 
casemap:none
None.gif
None.gif
;引入头文件
None.gif
include windows.inc
None.gifinclude user32.
inc
None.gifincludelib user32.lib
None.gifinclude kernel32.
inc
None.gifincludelib kernel32.lib
None.gif
None.gif
;数据段
None.gif

None.gif.data
None.gifszCaption  db 
'Info',0   ;标题
None.gif
szText db 'Hello,World!',0  ;信息内容
None.gif

None.gif
;代码段
None.gif

None.gif.code
None.gif
start:
None.gif            invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK  
;打印"Hello,World"
None.gif
            invoke ExitProcess,NULL   ;结束当前进程
None.gif
end start
None.gif


3,进入代码目录,用nmake编译程序,出现下面的错误:
2008030602.jpg


这是因为还没有MAKEFILE,所以无法进行编译,拷贝一个 MAKEFILE修改如下:

None.gifEXE = Hello.exe        #指定输出文件
None.gifOBJS 
= Hello.obj        #需要的目标文件
None.gif
None.gifLINK_FLAG 
= /subsystem:windows    #连接选项
None.gifML_FLAG 
= //coff        #编译选项
None.gif
None.gif
$(EXE)$(OBJS) $(RES)
None.gif    Link 
$(LINK_FLAG) $(OBJS) $(RES)
None.gif
None.gif
.asm.obj:
None.gif    ml 
$(ML_FLAG) $<
None.gif
.rc.res:
None.gif    rc 
$<
None.gif
None.gifclean:
None.gif    
del *.obj
None.gif    
del *.res
None.gif

因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:
2008030601.jpg

目录下生成如下图:
2008030604.jpg

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


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

      代码重新封装下:

None.gif.386
None.gif.model flat,stdcall
None.gifoption 
casemap:none
None.gif
None.gif
;引入头文件
None.gif
include windows.inc
None.gifinclude user32.
inc
None.gifincludelib user32.lib
None.gifinclude kernel32.
inc
None.gifincludelib kernel32.lib
None.gif
None.gif
;数据段
None.gif

None.gif.data
None.gifszCaption  db 
'Info',0
None.gifszText db 
'Hello,World!',0
None.gif
None.gif.data?
None.gifszBuffer db 
1024 dup (?)  ;1K的缓冲区
None.gif

None.gif
;代码段
None.gif
.code
None.gif
None.gif
;打印子程序,标题和文本通过eax,ebx分别传进来
None.gif
PrintInfo proc
None.gif                            invoke MessageBox,NULL,eax,ebx,MB_OK  
;打印"Hello,World"    
None.gif
                            ret
None.gifPrintInfo endp
None.gif
None.gif
start:
None.gif            
mov eax,offset szText ;eax中存放“文本”的地址
None.gif
            mov ebx,offset szCaption ;ebx中存放“标题”的地址
None.gif
            call PrintInfo
None.gif            invoke ExitProcess,NULL   
;结束当前进程
None.gif
end start