.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標號處執行