.386 .model flat,stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib .data ;数据段 titleS db 'helloworld',0 messageS db 'hello,welcome to win32',0 .code ;代码段 start: invoke MessageBox,NULL,offset messageS,offset titleS,MB_OK invoke ExitProcess,NULL end startMessageBox API:
int MessageBox(
HWND hWnd, ;是否有父窗体
LPCTSTR lpText, ;对话框中显示的字符串起始地址,字符串必须以0结束
LPCTSTR lpCaption, ;对话框标题字符串起始地址,字符串必须以0结束
UINT uType ;表示对话框按钮的形式
);
uType:对话框的形式可以是以下种类
符号 数值 含义
MB_OK 0h 只显示确定按钮
MB_OKCANCEL 1h 显示确定与取消
MB_ABORTRETRYIGNORE 2h 显示终止,重试,掠过三个按钮
MB_YESNOCANCEL 3h 显示是,否,取消三个按钮
MB_YESNO 4h 显示是否,两个按钮
返回值:MessageBox的返回值保存在EAX寄存器中
符号 数值 含义
IDOK 1h 按下确定按钮
IDCANCEL 2h 按下取消按钮
IDABORT 3h 按下终止按钮
IDRETRY 4h 按下重试按钮
IDIGNORE 5h 按下忽略按钮
IDYES 6h 按下是
IDNO 7h 按下否
uType对话框中的图标:MB_OK or MB_ICONINFORMATION(显示一个确定对话框和一个消息图标)
MB_ICONWARNING 惊叹号图标
MB_ICONINGORMATION 消息图标
MB_ICONASTERISK 危险图标
MB_ICONQUESTION 问号图标
MB_ICONSTOP 停止图标
invoke伪指令:调用API函数指令,相当于CALL调用
ML.EXE编译invoke时依次将参数入栈 .model定义了stdcall参数从右向左依次入栈
最后的参数最先入栈 PUSH MB_OK
PUSH offset titleS
PUSH offset messageS
PUSH NULL
并调用CALL指令 CALL MessageBox
MessageBox函数定义在user32.inc库文件中
ExitProcess API:结束程序.data 定义数据段, .code 定义代码段
没有结束伪指令,因为一个段的开始即是前一个段的结束程序的入口由end语句指明,end start 程序从start标号处执行