来源:远方网络 | 2005-3-7 22:23:21 | (有3941人读过)
作者:波波蛋儿 文章性质:根据有关资料整理
来源:www.ossh.org
这是一个编译通过的程序,运行后显示一个MessageBox。 ;***************************** ;Hello.asm * ;功能:显示一个MessageBox框 * ;*****************************
NULL = 0 ;常量定义 MB_OK = 0 ; .386p .model flat ;平坦内存模式 extrn MessageBoxA:proc ;外部过程声明 extrn ExitProcess:proc ;
.data Caption db 'Hello World!',0 Text db '欢迎来到Win32汇编的世界',0
.code main: push MB_OK ;MessageBoxA的参数入栈 push offset Caption ; push offset Text ; push NULL ; call MessageBoxA push 0 ;ExtiProcess的参数入栈 call ExitProcess
end main
以下是它的MAKE文件
NAME = Hello OBJS = $(NAME).obj
IMPORT=$(MAKEDIR)\..\lib\import32.lib
$(NAME).EXE: $(OBJS) $(DEF) tlink32 /Tpe /aa /c $(OBJS),$(NAME),, $(IMPORT),
.asm.obj: tasm32 /ml $&.asm
这是一个最简单的WIN32汇编程序了,但是就是这最简单的程序其实还是有很多的地方需要解释。曾经,有一个程序员看了这个程序问我,“extrn MessageBoxA:proc ;外部过程声明”这是个外部过程,而没有见INCLUDE之类的包含语句,说这个MessageBoxA从那里来呀。我告诉他所有的包含在这里:IMPORT=$(MAKEDIR)\..\lib\import32.lib,这里包含了所有这个程序需要的外部过程。
拿这个例子给大家看,主要的目的不是说汇编很简单,相反用汇编写WINDOWS程序很麻烦(不是复杂),一个原因就是用于生成EXE文件的方法很多,那些在高级语言里屏蔽掉的特性全都被放出来了,你需要知道更多的东西。而且,为了达到同一个目的,可以使用很多中的方法。
其实,那个看这个程序的人,说的也没错,使用的不是TASM的话,有可能会在源程序里出现INCLUDE语句。开发工具变了,所以相应的语句也就变了。汇编语言有一个特性大家应该都知道,就是对硬件的依赖性非常大。还有一个特性就不是人人都知道了,就是对编译器和连接器也有很大的依赖性,在TASM下正确的程序,大部分都不一定适合其他环境。
参考资料:《Windows环境下汇编语言设计》
|