主题:WIN32汇编程序的编译方法,环境配置,make的简单应用
作者:gnuser
url: http://bestbbs.5d6d.com
学习一门语言最开始最好弄懂一个简单例子,
而往往很多资料忽视了这一点,让初学者还没入门就卡死在门外.
网上的资料也不太标准,以至于象我这种初学者摸索好久才有所得.
现在开始写笔记吧,废话不多说了,时间宝贵.
工具:masm,link,make
这些工具都很好找,网上资料就能让你顺心.(实在找不到,我给)
安装好masm后
配置环境:
建立一个批处理文件:var.bat
编辑以下内容:
CODE:
@echo off
set include=c:/masm32/Include
set lib=c:/masm32/lib
set path=c:/masm32/bin;%path%
set include=c:/masm32/Include;C:/Program Files/Microsoft Visual Studio/VC98/Include;C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include
echo on
set include=c:/masm32/Include
set lib=c:/masm32/lib
set path=c:/masm32/bin;%path%
set include=c:/masm32/Include;C:/Program Files/Microsoft Visual Studio/VC98/Include;C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include
echo on
看清楚路径是否正确.
然后进入ms-dos运行之,输入ml
如出现一些说明信息,OK!
make不是自带的哦,你找到后放到masm32/bin目录下就行了.
现在就可以编译程序了..大门就此打开.不难吧!!
第一个程序,来个最简单的:
CODE:
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include user32.inc
include kernel32.inc
includelib kernel32.lib
includelib user32.lib
.data
szCaption db 'Win32汇编例子',0
szText db 'Win32汇编,Simple and powerful!',0
.code
start :
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include user32.inc
include kernel32.inc
includelib kernel32.lib
includelib user32.lib
.data
szCaption db 'Win32汇编例子',0
szText db 'Win32汇编,Simple and powerful!',0
.code
start :
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
我不多解释程序的含义了,就算没学过WIN32汇编的,他也应该能大概看懂,细节自己找资料,
这里我只讲怎么编译.
保存为first.asm文件.
进入刚才的ms-dos界面,运行var.bat后
CODE:
Ml /c /coff first.asm
Link /SUBSYSTEM:WINDOWS first.obj
Link /SUBSYSTEM:WINDOWS first.obj
OK,就生成了可执行文件了哦.执行之.知道程序什么意思了吧.
make的简单应用:
用好make对于一个编写大型程序的程序员来说是必须的,他能方便的构建整个程序的编译过程,还有.......(自己看去吧)
这里我们直接应用,要具体了解资料很多的.(就是因为资料对介绍还行,对应用不敢恭维的现状我才写的此文)
编写makefile,注意没有后缀.
CODE:
NAME = first
OBJS = $(NAME).obj
RES = $(NAME).res
$(NAME).exe: $(OBJS) $(RES)
(注意这行需要TAB键开头) Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS) $(RES)
$(RES): $(NAME).rc
(这行也是,谨记!) Rc $(NAME).rc
.asm.obj:
Ml /c /coff $(NAME).asm
OBJS = $(NAME).obj
RES = $(NAME).res
$(NAME).exe: $(OBJS) $(RES)
(注意这行需要TAB键开头) Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS) $(RES)
$(RES): $(NAME).rc
(这行也是,谨记!) Rc $(NAME).rc
.asm.obj:
Ml /c /coff $(NAME).asm
这里我们没有资源文件,所以可以不要rc,res等相关语句.
修改如下:
CODE:
NAME = first
OBJS = $(NAME).obj
$(NAME).exe: $(OBJS)
Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS)
.asm.obj:
Ml /c /coff $(NAME).asm
OBJS = $(NAME).obj
$(NAME).exe: $(OBJS)
Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS)
.asm.obj:
Ml /c /coff $(NAME).asm
回到刚才的ms-dos界面,
执行make命令,
CODE:
make
如没有错误就会达到手动编译,连接的效果了,如果有错误,还会提醒你哪儿错了,方便啊!!!
不会make也没关系,不过要做高手嘛,就要多学点咯.(我只是想方便一点,其实菜鸟)
全文完,希望与大家分享学习经验,以至提高效率!!