陈贱伟 发表于 2013-9-23 10:17:57

win32汇编 窗口程序没反应

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc

includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
;--------------------------------------------------------------------------------
.data
ClassName db 'WinClass',0
AppName db '第一个程序',0
.data?
hInstance HINSTANCE ?
;--------------------------------------------------------------------------------
.code
start:
call WinMain
invoke ExitProcess,NULL
;--------------------------------------------------------------------------------
WinMain proc
LOCAL wc:WNDCLASSEX ;窗口结构体
LOCAL msg:MSG ;消息结构体
LOCAL hwnd:HWND ;窗口句柄
;获取本程序 模块句柄
invoke GetModuleHandle,NULL
mov hInstance,eax
;填表
mov wc.cbSize,offset WNDCLASSEX
mov wc.style ,2 or 1
mov wc.lpfnWndProc,offset WinMainProc
mov wc.hInstance,offset hInstance
mov wc.hbrBackground,5
mov wc.lpszClassName,offset ClassName

;获取本程序图标句柄
invoke LoadIcon,NULL,NULL
mov wc.hIcon,eax
mov wc.hIconSm,eax
;获取本程序光标句柄
invoke LoadCursor,NULL,NULL
mov wc.hCursor,eax


;注册窗口
invoke RegisterClassEx,addr wc
;创建窗口
invoke CreateWindowEx,NULL,addr ClassName ,addr AppName,WS_OVERLAPPEDWINDOW,0,0,500,500,NULL,NULL,hInstance,NULL
mov hwnd,eax
;显示
invoke ShowWindow,hwnd,1
;刷新
invoke UpdateWindow,hwnd
;消息机制
.while 1
invoke GetMessage,addr msg,NULL,0,0

.if(!eax)
.break
.endif

invoke TranslateMessage,addr msg ;翻译
invoke DispatchMessage,addr msg ;发送
.endw
ret
WinMain endp

;--------------------------------------------------------------------------------
WinMainProc Proc hwnd:HWND,msg:UINT,wparam:WPARAM,lparam:LPARAM
.if msg==WM_DESTROY
invoke PostQuitMessage,NULL ;终止进程
.elseif msg==WM_CREATE
.else
;这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理
invoke DefWindowProc,hwnd,msg,wparam,lparam
.endif

ret
WinMainProc endp

;--------------------------------------------------------------------------------


end start
编译器没有报错
点击运行 没有显示窗口

Ghost_Scholar 发表于 2013-9-23 11:07:51

.data?
hInstance HINSTANCE ?我想知道 汇编里面有这个HINSTANCE宏吗
CreateWindowEx,NULL,创建函数第一个参数可以不写吗
WinMainProc Proc hwnd:   Win子程序的参数还要定义类型吗 而且不用保存ebx esi edi 这几个寄存器?
算了你的跟正常程序相差太多了 自己慢慢研究吧

玉宁417 发表于 2013-9-25 10:20:10

新人,来看学习的

wwwrookie 发表于 2013-9-25 10:35:59

新人,来看学习的

林黛玉的葬礼 发表于 2013-9-25 20:41:50

看了一下,好像还不错

亲亻尔嘴 发表于 2013-9-26 09:23:27

路过,进来学习一下

如梦幻泡影 发表于 2013-9-26 21:28:45

:lol:WIN32汇编写起来太蛋疼了,感觉还不如用C

linyoubiao 发表于 2013-9-27 00:28:53

希望以后看到更多你的好分享

夏七夕 发表于 2013-9-27 08:23:02

新人,多多学习一下的{:1_1:}

Fly_ 发表于 2013-9-29 03:39:46

机器中枪了

青玄 发表于 2013-9-30 21:26:13

可能是注册窗口出问题了吧

baby520 发表于 2013-10-1 18:50:00

来学习一下。。。。

trek600 发表于 2013-10-3 00:24:29

懂了 呵呵呵
页: [1]
查看完整版本: win32汇编 窗口程序没反应