这个程序可以当做以后我们编写Win32汇编程序的模板,只要在这个基础上进行修改就可以实现我们需要的程序了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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, 0, 0
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
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, 0, 0
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