飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2473|回复: 0

[原创]教你用汇编写windows

[复制链接]

该用户从未签到

发表于 2005-10-4 18:49:56 | 显示全部楼层 |阅读模式
.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
    push  hInstance
    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

哈哈,现在你已经有了一个用汇编写的窗口了,看看汇编没有那么难吧
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表