Win32汇编

.386
.model flat,stdcall
option casemap:none

include     windows.inc
include     gdi32.inc
includelib  gdi32.lib
include     user32.inc
includelib  user32.lib
include     kernel32.inc
includelib  kernel32.lib

        .data?
hInstance   dd ?
hWinMain    dd ?
        .const
szclassname db 'myclass',0
szcaption   db 'my first window',0
sztext      db 'Win32 Assembly,Simply but Powerful!',0

        .code
_procwinmain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
             local @stPs:PAINTSTRUCT
             local @stRect:RECT
             local @hDc
             mov eax,uMsg
             .if eax==WM_PAINT
                    invoke BeginPaint,hWnd,addr @stPs
                    mov @hDc,eax
                    invoke GetClientRect,hWnd,addr @stRect
                    invoke DrawText,@hDc,addr sztext,-1,addr @stRect,DT_CENTER                    
                    invoke EndPaint,hWnd,addr @stPs
              .elseif eax==WM_CLOSE
                    invoke DestroyWindow,hWinMain
                    invoke PostQuitMessage,NULL
              .else
                    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
                    ret
              .endif

                xor eax,eax
                ret
_procwinmain 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.cbSize,sizeof WNDCLASSEX
         mov    @stWndClass.style,CS_HREDRAW or CS_VREDRAW
         mov    @stWndClass.lpfnWndProc,offset _procwinmain
         mov    @stWndClass.hbrBackground,COLOR_WINDOW+1
         mov    @stWndClass.lpszClassName,offset szclassname
         invoke RegisterClassEx,addr @stWndClass

         invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szclassname,offset szcaption,\
                               WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\
                               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

win32汇编

posted @ 2020-04-10 21:50  Butcher512  阅读(157)  评论(0)    收藏  举报