老钟古

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这个程序可以当做以后我们编写Win32汇编程序的模板,只要在这个基础上进行修改就可以实现我们需要的程序了。

代码
  1 ;文件名  first window.asm
  2 ;作者    StudyRush
  3 ;创建时间    2010-11-15
  4 ;修改时间    2010-11-15
  5 ;函数功能  用于创建一个窗口
  6 
  7 
  8 .386
  9 .model flat, stdcall
 10 option casemap : none
 11 
 12 
 13 ;包含一些库文件
 14 include    windows.inc
 15 include    user32.inc
 16 includelib    user32.lib
 17 include    kernel32.inc
 18 includelib    kernel32.lib
 19 include    gdi32.inc
 20 includelib    gdi32.lib
 21 
 22 
 23 
 24 WinMain  proto  :DWORD, :DWORD, :DWORD, :DWORD
 25 
 26 .data
 27 ClassName  db "SimpleWinClass"0    ;窗口类的名字
 28 AppName  db "Our First Window"0    ;窗口的名称
 29 
 30 
 31 .data?
 32 hInstance HINSTANCE ?
 33 CommandLine  LPSTR ?
 34 
 35 .code
 36 start:
 37 
 38 ;invoke对函数调用,eax寄存器一般作返回值使用
 39 invoke  GetModuleHandle, NULL
 40 mov  hInstance, eax
 41 
 42 invoke  GetCommandLine
 43 mov CommandLine, eax
 44 
 45 invoke  WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
 46 invoke  ExitProcess, eax
 47 
 48 
 49 WinMain  proc  hInst : HINSTANCE, hPrevInst : HINSTANCE, CmdLine : LPSTR, CmdShow : DWORD
 50     
 51     ;定义局部变量
 52     LOCAL  wc : WNDCLASSEX
 53     LOCAL  msg : MSG 
 54     LOCAL  hwnd : HWND
 55     
 56     ;对wc的各个数据成员进行赋值
 57     mov  wc.cbSize, SIZEOF WNDCLASSEX
 58     mov  wc.style, CS_HREDRAW or CS_VREDRAW
 59     mov  wc.lpfnWndProc, OFFSET WndProc
 60     mov  wc.cbClsExtra, NULL
 61     mov  wc.cbWndExtra, NULL
 62     push  hInstance
 63     pop  wc.hInstance
 64     mov  wc.hbrBackground, COLOR_WINDOW + 1
 65     mov  wc.lpszMenuName, NULL
 66     mov  wc.lpszClassName, OFFSET ClassName
 67     
 68     invoke  LoadIcon, NULL, IDI_APPLICATION
 69     mov  wc.hIcon, eax
 70     mov  wc.hIconSm, eax
 71     
 72     invoke  LoadCursor, NULL, IDC_ARROW
 73     mov  wc.hCursor, eax
 74     
 75     invoke  RegisterClassEx, addr wc
 76     invoke  CreateWindowEx, NULL, addr ClassName, addr AppName, \
 77                 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \
 78                 CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL
 79     mov  hwnd, eax
 80     
 81     invoke  ShowWindow, hwnd, CmdShow
 82     invoke  UpdateWindow, hwnd
 83     
 84     .while TRUE
 85         invoke  GetMessage, addr msg, NULL, 00
 86         .break .if ( !eax)
 87             invoke  TranslateMessage, addr msg
 88             invoke  DispatchMessage, addr msg
 89             
 90     .endw
 91     mov  eax, msg.wParam
 92                 
 93     ret
 94 
 95 WinMain endp
 96 
 97 WndProc  proc  hWnd : HWND, uMsg : UINT, wParam : WPARAM , lParam : LPARAM
 98     
 99     .if uMsg == WM_DESTROY
100         invoke  PostQuitMessage, NULL
101     .else
102         invoke  DefWindowProc, hWnd, uMsg, wParam, lParam
103         ret 
104     .endif
105     xor  eax, eax
106     ret
107 
108 WndProc endp
109 
110 end start
111 

 

 

 

 

posted on 2010-11-15 22:16  老钟古  阅读(271)  评论(0编辑  收藏  举报