随心的Win32汇编作业本
第一个程序程序代码:
;告诉编译器要使用80386的指令集 .386 ;告诉编译器程序的模式,win32模式下只能使用flat模式,stdcall告诉编译器参数的传递模式 ;参数的传递方式有三种,stdcall, c, pascal ;stdcall: 从右到左压入堆栈, .model flat, stdcall option casemap :none ; case sensitive 是否对大小写敏感 ;调用API函数所必须的头文件 include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib ;.data 或 .data? ;指明了接下来是数据段,.data 定义了预定义的变量, ;.data?定义了未初始化的变量, ;两者的不同之处是 .data? 定义的变量并不占用 .exe 文件的大小, ;而是在程序执行时动态分配, ;所以开始是不指定初始值的数据可以放在 .data? 段中, ;如一个1K大小的缓冲区,放在 .data?中,程序将不会增加一个字节。 .data szCaption db 'Win32汇编例子',0 szText db '我要学习Win32汇编!!',0 ;.code ;指明了接下来是代码段,我们的所有代码都放在这里。 ;最后的一句 start 语句指定了程序开始执行的语句。 ;程序中的 ExitProcess 是一个标准的 Win32 API, ;对应 Dos汇编中的 int 20h 或 mov ah,4ch/int 21h,也就是程序退出。 ;而 MessageBox 也是一个标准的 API,功能是在屏幕上显示一个消息框, ;还有要注意的是 invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK 语句中, ; MB_OK 和 NULL 已经预定义在 Windows.inc 中。 .code start: invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK invoke ExitProcess,NULL end start
[[it] 本帖最后由 随心 于 2008-9-19 03:55 编辑 [/it]]