hello world

Win32的基础就是由DLL组成的.核心由3个DLL提供
KERNEL32.DLL:系统服务功能,包括内在管理,任务管理和动态链接等
GDI32.DLL:图形设备接口,利用VGA与DRV之类的显示设备驱动程序完成显示文本和矩形等功能
USER32.DLL:用户接口服务,建立窗口和传送消息等

Invoke:是不个MASM编译器的伪指令,而TASM没有,直接使用call指令实现同样功能

有些Windows9x系统不支持Unicode
if UNICODE
MessageBox equ <MessageBoxW>
else
MessageBox equ <MessageBoxA>
endif
然后在源程序的头部UNICODE=1或UNICODE=0,重新编译就可以产生不同的版本

静态库:是一组已经编写好的代码模块,在程序中可以自由引用,在源程序编译成目标文件,
最后要链接成可执行文件时,由link程序从库中找到相应的函数代码,一起链接到最后的可执
行文件中.

库的出现为程序员节省了大量的开发时间,缺点就是每个可执行文件中都包括了要用到了
相同函数的代码,占用了大量的磁盘空间,在执行时,这些代码同样占用了内存


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;.386是使用的指令集
;.model 内存模式[,语言模式][,其它模式]
;flat:Win32程序只有一种内存模式flat(平坦模式),代码和数据段使用4GB段
;stdcall:语言模式,子程序的调用方式,指出了调用子程序或Win32API时参数传递的次序和堆栈平衡的方法
;option casemap:none:定义了程序是否大小写敏感,因为Win32API是区分大小写的
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db 'A MessageBox !',0
szText db 'Hello, World !',0dh,0ah,'Hello again',0ah,'adsf',0
;.data,.data?和.const定义的是数据段,分别对应不同方式的数据定义,在最
;后生成的可执行文件中也分别放在不同的节区(Section)中
;1.可读写的已定义变量:在源程序中已经定义了初值,而且在程序中有可能被改
;动,必须定义在.data段中;.data段一般放在可执行文件的_DATA节区
;2.可读写的末定义变量:当作缓冲区或程序执行后才开始使用,可以定义在.data
;段中,但一段定义在.data?段中,因为不会增加.exe文件的大小,.data?段一般放在
;可执行文件的_BSS节区
;3.常量:一些要显示的字符串信息,可以放在.const段中,可读不可写.但为了方便,小
;程序一般就把常量放.data中了
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,\
NULL,\
offset szText,\
offset szCaption,\
MB_ICONWARNING
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start


makefile

NAME = Hello #指定输出文件
OBJS = $(NAME).obj #需要的目标文件

LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项

$(NAME).exe: $(OBJS)
Link $(LINK_FLAG) $(OBJS)
.asm.obj:
ml $(ML_FLAG) $<

clean:
del *.obj



[img]http://dl.iteye.com/upload/attachment/552975/93558b38-8aa0-3d9f-bc46-cf5b6d6749f3.bmp[/img]


标号:当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址,标点既可以定义在目的指令同一行的头部,也可以在目的指令前一行单独用一行定义:
标号名: 目的指令 ;方法1

@@做标号时,可以用@F和@B引用,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号

宏定义:assum esi:ptr WNDCLASS

如果要用指定类型之外的长度访问变量,必须地指出要访问的长度,这产,编译器忽略语法的长度检验.

Sizeof伪指令可以取得变量,数据类型或数据结构以字节为单位的长度,lengthof可以取得变量中数据的项数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值