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
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
再将VC6.0下的nmake.exe拷贝到Masm32的bin目录下.
2,编写代码:
.
386
.model flat,stdcall
option
casemap:
none
![None.gif](/Images/OutliningIndicators/None.gif)
;
引入头文件
include windows.
inc
include user32.
inc
includelib user32.lib
include kernel32.
inc
includelib kernel32.lib
![None.gif](/Images/OutliningIndicators/None.gif)
;
数据段
.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编译程序,出现下面的错误:
![2008030602.jpg](https://i-blog.csdnimg.cn/blog_migrate/93d5b45e40ad118be4fd67c887adfa6e.jpeg)
这是因为还没有MAKEFILE,所以无法进行编译,拷贝一个 MAKEFILE修改如下:
EXE
=
Hello
.
exe
#
指定输出文件
OBJS
=
Hello
.
obj
#
需要的目标文件
![None.gif](/Images/OutliningIndicators/None.gif)
LINK_FLAG
=
/
subsystem
:windows
#
连接选项
ML_FLAG
=
/
c
/
coff
#
编译选项
![None.gif](/Images/OutliningIndicators/None.gif)
$(
EXE
)
:
$(
OBJS
)
$(
RES
)
Link
$(
LINK_FLAG
)
$(
OBJS
)
$(
RES
)
![None.gif](/Images/OutliningIndicators/None.gif)
.
asm
.
obj:
ml
$(
ML_FLAG
)
$<
.
rc
.
res:
rc
$<
![None.gif](/Images/OutliningIndicators/None.gif)
clean:
del
*
.
obj
del
*
.
res
因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:
![2008030601.jpg](https://i-blog.csdnimg.cn/blog_migrate/423b323cbcbf01b8601b85c58ba26f55.jpeg)
目录下生成如下图:
![2008030604.jpg](https://i-blog.csdnimg.cn/blog_migrate/81dcc206049b7627acea646febcac4d4.jpeg)
运行Hello.exe,即完成第一个”Hello,World”了,
![2008030603.jpg](https://i-blog.csdnimg.cn/blog_migrate/be21ca0a626fb8cec98bd00b2ec4932a.jpeg)
对于这个代码有一个问题我还不大清楚,.inc文件和.lib文件的区别是什么?我个人理解.inc是变量和函数的声明,而.lib是静态链接库,包含着函数的具体实现,再有一个感觉就是
MAKEFILE
的书写也是一门学问。。
代码重新封装下:
.
386
.model flat,stdcall
option
casemap:
none
![None.gif](/Images/OutliningIndicators/None.gif)
;
引入头文件
include windows.
inc
include user32.
inc
includelib user32.lib
include kernel32.
inc
includelib kernel32.lib
![None.gif](/Images/OutliningIndicators/None.gif)
;
数据段
.data
szCaption db
'
Info
'
,
0
szText db
'
Hello,World!
'
,
0
![None.gif](/Images/OutliningIndicators/None.gif)
.data?
szBuffer db
1024
dup (?)
;
1K的缓冲区
;
代码段
.code
![None.gif](/Images/OutliningIndicators/None.gif)
;
打印子程序,标题和文本通过eax,ebx分别传进来
PrintInfo proc
invoke MessageBox,NULL,eax,ebx,MB_OK
;
打印"Hello,World"
ret
PrintInfo endp
![None.gif](/Images/OutliningIndicators/None.gif)
start:
mov
eax,offset szText
;
eax中存放“文本”的地址
mov
ebx,offset szCaption
;
ebx中存放“标题”的地址
call
PrintInfo
invoke ExitProcess,NULL
;
结束当前进程
end start