· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Win32 Assembly

Win32 Assembly ±âº»¿¹Á¦

  • ÀÛ¼ºÀÚ
    Á¶ÀçÇõ(Mminzkn@minzkn.com)

  • °íÄ£°úÁ¤
    2005³â 5¿ù 15ÀÏ : óÀ½¾¸

¼³¸í

±×³É Çѹø ¾î¼Àºí¸®·Î Â¥º»°Ì´Ï´Ù. °ÅÀÇ Template ¼öÁØÀ̹ǷΠ´Ù¸¥ ¿¹Á¦µé°ú ´Ù¸¦¹Ù ¾ø½À´Ï´Ù.

´Ü, masm v8.0 ¿¡¼­ Å×½ºÆ®ÇßÀ¸´Ï ±×¿ÜÀÇ ¹öÁ¯Àº Àå´ã ¸øÇÕ´Ï´Ù.

±×¸®°í C:\masm32 ¿¡ ¼³Ä¡µÇ¾ú´Ù°í °¡Á¤ÇÏ°í ¸¸µç°ÍÀ̱⿡ ´Ù¸¥°÷¿¡ ¼³Ä¡Çϼ̴ٸé include, includelib ±¸¹®À» Àû´çÈ÷ ¼öÁ¤ÇϽñ⠹ٶø´Ï´Ù.

»ç¿ë¹æ¹ý

ÄÄÆÄÀÏÀº ¿ä·¸°Ô ÇϽðí
ml /c /coff mz.asm 
¸µÅ©´Â ¿ä·¸°Ô ÇÕ´Ï´Ù.
link /SUBSYSTEM:WINDOWS mz.obj 


ÄÚµå

COMMENT # 
  Copyright (C) JAEHYUK CHO
  All rights reserved.
  Code by JaeHyuk Cho <mailto:minzkn@minzkn.com>
# 

; Process type -------------------------------- 
.386                ; 386 CPU »ç¿ë ¿¹°í 
.MODEL FLAT,STDCALL ; Ç¥ÁØ ±ÔÄ¢ 
OPTION CASEMAP:NONE ; ¹Ýµå½Ã ÇÊ¿äÇÔ 

; Window project default ---------------------- 
INCLUDE C:\masm32\include\windows.inc 
INCLUDE C:\masm32\include\user32.inc 
INCLUDE C:\masm32\include\kernel32.inc 

;INCLUDE E:\masm32\include\windows.inc 
;INCLUDE E:\masm32\include\user32.inc 
;INCLUDE E:\masm32\include\kernel32.inc 

; Link library -------------------------------- 
INCLUDELIB C:\masm32\lib\user32.lib 
INCLUDELIB C:\masm32\lib\kernel32.lib 
;INCLUDELIB E:\masm32\lib\user32.lib 
;INCLUDELIB E:\masm32\lib\kernel32.lib 


; Proto region -------------------------------- 
WinMain    PROTO :DWORD, :DWORD, :DWORD, :DWORD 
WndProc    PROTO :DWORD, :DWORD, :DWORD, :DWORD 

; Data select --------------------------------- 
.DATA 
g_instance DD 0 
g_command_line DD 0 
g_class_name DB "minzknWin32Engine", 0 
g_title_name DB "´ç½ÅÀº ´©±¸¿ä?", 0 
g_confirm_exit DB "Á¾·áÇÏ·Á°í¿ä?", 0 
g_confirm_exit_title DB "È®ÀÎÁ» ÇÏ°Ú½À´Ï´Ù.", 0 
g_hello DB "¾î¶ó? À©µµ¿ì ³ª¿Ã¶ó±¸ ±×·¡.", 0 

; Code zone ----------------------------------- 
.CODE 
START: ; Win32 startup code 
           INVOKE GetModuleHandle, NULL 
           MOV g_instance, EAX 
           INVOKE GetCommandLine 
           MOV g_command_line, EAX 
           INVOKE WinMain, g_instance, NULL, g_command_line, SW_SHOWDEFAULT 
           INVOKE ExitProcess, eax 
           JMP $ 

WinMain    PROC s_instance:DWORD,      ; ³ª´Â ´©±¸´Ù ! 
                s_prev_instance:DWORD, ; ȣȯ¶§¹®¿¡ 
                s_command_line:DWORD,  ; ÀÌ°ÍÀ» µ¡ºÙ¿©¼­... 
                s_command_show:DWORD   ; ¾î¶»°Ô º¸¿©Áö¶ó±¸? 
           LOCAL s_window_class_ex : WNDCLASSEX ; À©µµ¿ì ÇÐ±Þ È®Àå 
           LOCAL s_message : MSG                ; ¸Þ¼¼ÁöÀü´Þ ¸Å°³Ã¼ 
           LOCAL s_window : DWORD               ; ÁÖ À©µµ¿ì 
          
           mov s_window_class_ex.cbSize, sizeof(WNDCLASSEX) 
           mov s_window_class_ex.style, CS_HREDRAW OR CS_VREDRAW 
           mov s_window_class_ex.lpfnWndProc, offset WndProc 
           mov s_window_class_ex.cbClsExtra, NULL 
           mov s_window_class_ex.cbWndExtra, NULL 
           mov eax, s_instance 
           mov s_window_class_ex.hInstance, eax 
           mov s_window_class_ex.hbrBackground, COLOR_BTNFACE + 1 
           mov s_window_class_ex.lpszMenuName, NULL 
           mov s_window_class_ex.lpszClassName, offset g_class_name 
           mov s_window_class_ex.hIcon, NULL 
           mov s_window_class_ex.hCursor, NULL 
           mov s_window_class_ex.hIconSm, 0 
           INVOKE RegisterClassEx, ADDR s_window_class_ex 

           ; Window µî·Ï 
           INVOKE CreateWindowEx, 
                  0, 
                  ADDR g_class_name, 
                  ADDR g_title_name, 
                  WS_OVERLAPPED OR WS_CAPTION OR WS_SYSMENU OR WS_MAXIMIZEBOX OR WS_MINIMIZEBOX OR WS_BORDER OR WS_THICKFRAME, 
                  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
                  NULL, NULL, s_instance, NULL 
           mov s_window, eax 
          
           ; ºÁ¶ó 
           INVOKE ShowWindow, s_window, SW_SHOWNORMAL 
           ; Çѹø´õ ºÁ¾ßµÇ.. 
           INVOKE UpdateWindow, s_window 

WinLoop: 
           INVOKE GetMessage, ADDR s_message, NULL, 0, 0 ; ¹¹°¡ µµÂøÇßÀ»±î? 
           or eax, eax 
           jz WinExitLoop 
           INVOKE TranslateMessage, ADDR s_message ; Å°º¸µå ´Ï°¡ ó¸®ÇØ 
           INVOKE DispatchMessage, ADDR s_message ; WndProc ¿¡°Ô ³ªÀÇ Á×À½À» ¾Ë·Á¶ó~ 
           jmp WinLoop 
WinExitLoop: 

           ; ³»°¡ ¹«½¼ »óÅÂÀÎÁö »óºÎ¿¡ º¸°íÇÏÀÚ~ 
           mov eax, s_message.wParam 
           ret 
WinMain    ENDP 

; WinProc callback function ------------------- 
WndProc    PROC s_window:DWORD, 
                s_message:DWORD, 
                s_wparam:DWORD, 
                s_lparam:DWORD 
.if s_message == WM_CREATE 
           ; À©µµ¿ì »ý¼ºÇߴµ¥ ¹¹ÇÒ±î? 
           INVOKE MessageBox, s_window, ADDR g_hello, ADDR g_hello, MB_OK OR MB_ICONQUESTION 
           xor eax, eax 
           ret 
.elseif s_message == WM_CLOSE 
           ; À©µµ¿ì Á¾·áÇϱâ Á÷ÀüÀε¥... 
           INVOKE MessageBox, s_window, ADDR g_confirm_exit, ADDR g_confirm_exit_title, MB_YESNO OR MB_ICONQUESTION 
           CMP EAX, IDYES 
           JNE ExitCancel 
           INVOKE DestroyWindow, s_window ; ³ª Á¾·áÇÒ·Á°í Çϴµ¥... 
ExitCancel: 
           xor eax, eax 
           ret 
.elseif s_message == WM_DESTROY 
           INVOKE PostQuitMessage, NULL ; ÁøÂ¥ Á¾·áÇҰžß... 
           xor eax, eax 
           ret 
.endif    
           INVOKE DefWindowProc, s_window, s_message, s_wparam, s_lparam 
           ret 
WndProc    ENDP 

           END START 

; End of source

ID
Password
Join
Deprive a mirror of its silver and even the Czar won't see his face.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-01-26 11:05:12
Processing time 0.0035 sec