代码改变世界

学第一个汇编程序hello world的说明笔记

2011-06-11 13:35  李龙江  阅读(557)  评论(0编辑  收藏  举报
.486 ; 定义工作模式常见的有.386,.486,.586等只是CPU指令集的不同如
.model flat, stdcall ; 定义内存模式
;flat为win32程序使用的模式,代码和数据段使用同一个4GB段,还有其他模式用不到就不学了
;stdcall为子程序调用模式因为windows api调用使用的是stdcall格式,所以win32汇编没得选择
option casemap :none ;指定这个打开大小写敏感设置

;--------------------------------------

include windows.
inc
include masm32.
inc
include user32.
inc ;MessageBox在这个头文件里
include kernel32.inc ;ExitProcess在这个头文件里
;
----------------------------------------函数代码在dll中,库文件只保留函数的定位信息和参数数目
includelib masm32.lib
includelib user32.lib
includelib kernel32.lib
;--------------------------------------以上是包含的头文件和库


;.data数据段存放的都是已初始化的变量,并分配实际存储大小
;
未初始化放在.data?段内.data?段内的的变量只保留大小信息,不实际分配
.data
szCaption db
"A MessageBox !",0 ;定义消息框标题
szText db "Hello,World !",0 ;定义消息框显示内容

;.code段为写程序指令的区域
.code
start: ;start标号
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
;MFC定义MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType)
;hWnd:窗口句柄,lpText消息内容,lpCaption消息标题,uType消息类型,注意汇编程序只有一种类型就是dword
;32位汇编里,地址是平坦的,地址空间为4.3G,offset取的是线性地址,是保护模式下的虚拟地址
;带参数的伪指令必须用invoke不带参数的可以用cell
;MessageBox具体使用可参考msdn
invoke ExitProcess,NULL ;退出进程

end start
;从start标号开始运行