WIN32汇编的第一个窗口程序求教!该怎么解决

WIN32汇编的第一个窗口程序求教!!
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
.data?
hinstance dd ?
hwinmain dd ?
.const
szclassname db 'myclass',0
szcaptionmain db 'my first windows!',0
sztext db 'hello',0
.code
_p proc uses ebx edi esi,hwnd,umsg,wparam,lparam
local @ps:PAINTSTRUCT
local @strect:RECT
local @hdc
mov eax,umsg
.if eax == WM_PAINT
invoke BeginPaint,hwnd,addr @ps
mov @hdc,eax
invoke GetClientRect,hwnd,addr @strect
invoke DrawText,@hdc,addr sztext,-1,addr @strect,DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke EndPaint,hwnd,addr @ps
.elseif eax==WM_CLOSE
invoke DestroyWindow,hwinmain
invoke PostQuitMessage,NULL
.else
invoke _p,hwnd,umsg,wparam,lparam
ret
.endif
xor eax,eax
ret
_p endp
_winmain proc
local @stwndclass:WNDCLASSEX
local @stmsg:MSG
invoke GetModuleHandle,NULL
mov hinstance,eax
invoke RtlZeroMemory,addr @stwndclass,sizeof @stwndclass
;注册窗口
invoke LoadCursor,0,IDC_ARROW
mov @stwndclass.hCursor,eax
push hinstance
pop @stwndclass.hInstance
mov @stwndclass.style,CS_HREDRAW or CS_VREDRAW
mov @stwndclass.cbSize,sizeof WNDCLASSEX
mov @stwndclass.lpfnWndProc,offset _p
mov @stwndclass.hbrBackground,COLOR_WINDOW+1
mov @stwndclass.lpszClassName,offset szclassname
invoke RegisterClassEx,addr @stwndclass  
;显示窗口
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szclassname,\
offset szcaptionmain,WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hinstance,NULL
mov hwinmain,eax
invoke ShowWindow,hwinmain,SW_SHOWNORMAL
invoke UpdateWindow,hwinmain
;消息循环
.while TRUE
invoke GetMessage,addr @stmsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stmsg
invoke DispatchMessage,addr @stmsg
.endw
ret
_winmain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _winmain
invoke ExitProcess,NULL
end start
编译都通过了!!但是不能生成窗口。。
哪儿错了啊??

------解决方案--------------------
sorry,突然发现我没有权限移动帖子,祝楼主好运
------解决方案--------------------
这一段

Assembly code

.elseif eax==WM_CLOSE
invoke DestroyWindow,hwinmain
invoke PostQuitMessage,NULL
.else
invoke _p,hwnd,umsg,wparam,lparam