qxtianlong 发表于 2005-10-4 18:49:56

[原创]教你用汇编写windows

.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib            
include kernel32.inc
includelib kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.DATA                     
ClassName db "SimpleWinClass",0      
AppName db "第一个windows程序",0      

.DATA?               
hInstance HINSTANCE ?      
CommandLine LPSTR ?
.CODE               
start:
invoke GetModuleHandle, NULL            
                                                                     
mov hInstance,eax
invoke GetCommandLine                     
                                                                     
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT      
invoke ExitProcess, eax                        

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX                                          
    LOCAL msg:MSG
    LOCAL hwnd:HWND

    mov   wc.cbSize,SIZEOF WNDCLASSEX                  
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    pushhInstance
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_WINDOW+1
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc                     
    invoke CreateWindowEx,NULL,\
                ADDR ClassName,\
                ADDR AppName,\
                WS_OVERLAPPEDWINDOW,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                NULL,\
                NULL,\
                hInst,\
                NULL
    mov   hwnd,eax
    invoke ShowWindow, hwnd,CmdShow            
    invoke UpdateWindow, hwnd                              

    .WHILE TRUE                                                         
                invoke GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
   .ENDW
    mov   eax,msg.wParam                                          
    ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg==WM_DESTROY                           
      invoke PostQuitMessage,NULL         
    .ELSE
      invoke DefWindowProc,hWnd,uMsg,wParam,lParam   
      ret
    .ENDIF
    xor eax,eax
    ret
WndProc endp

end start

哈哈,现在你已经有了一个用汇编写的窗口了,看看汇编没有那么难吧
页: [1]
查看完整版本: [原创]教你用汇编写windows