[bits 32]
global _start
extern _Arc@36
extern _Pie@36
extern _sprintf
extern _Chord@36
extern _LineTo@12
extern _Polygon@12
extern _Ellipse@20
extern _EndPaint@8
extern _MoveToEx@16
extern _FillRect@12
extern _SetPixel@16
extern _TextOutA@20
extern _SetTimer@16
extern _KillTimer@8
extern _SetBkMode@8
extern _DrawTextA@20
extern _Rectangle@20
extern _CreatePen@12
extern _BeginPaint@8
extern _CreateFontA@56
extern _ExitProcess@4
extern _GetMessageA@16
extern _MessageBoxA@16
extern _SetTextColor@8
extern _DeleteObject@4
extern _SelectObject@8
extern _SetScrollPos@16
extern _DestroyWindow@4
extern _RegisterClassA@4
extern _DefWindowProcA@16
extern _SetScrollRange@20
extern _SetWindowTextA@8
extern _SetWindowLongA@12
extern _CallWindowProcA@20
extern _GetCommandLineA@0
extern _CreateWindowExA@48
extern _PostQuitMessage@4
extern _CreateSolidBrush@4
extern _GetModuleHandleA@4
extern _DispatchMessageA@4
%define ARG1 8h
%define ARG2 0ch
%define ARG3 10h
%define ARG4 14h
%define Arc _Arc@36
%define Pie _Pie@36
%define sprintf _sprintf
%define Chord _Chord@36
%define LineTo _LineTo@12
%define TextOut _TextOutA@20
%define Polygon _Polygon@12
%define Ellipse _Ellipse@20
%define EndPaint _EndPaint@8
%define MoveToEx _MoveToEx@16
%define FillRect _FillRect@12
%define SetPixel _SetPixel@16
%define SetTimer _SetTimer@16
%define KillTimer _KillTimer@8
%define DrawText _DrawTextA@20
%define SetBkMode _SetBkMode@8
%define Rectangle _Rectangle@20
%define CreatePen _CreatePen@12
%define BeginPaint _BeginPaint@8
%define GetMessage _GetMessageA@16
%define MessageBox _MessageBoxA@16
%define CreateFont _CreateFontA@56
%define ExitProcess _ExitProcess@4
%define SetTextColor _SetTextColor@8
%define DeleteObject _DeleteObject@4
%define SelectObject _SelectObject@8
%define SetScrollPos _SetScrollPos@16
%define DestroyWindow _DestroyWindow@4
%define RegisterClass _RegisterClassA@4
%define DefWindowProc _DefWindowProcA@16
%define SetScrollRange _SetScrollRange@20
%define SetWindowText _SetWindowTextA@8
%define SetWindowLong _SetWindowLongA@12
%define CallWindowProc _CallWindowProcA@20
%define GetCommandLine _GetCommandLineA@0
%define CreateWindowEx _CreateWindowExA@48
%define PostQuitMessage _PostQuitMessage@4
%define CreateSolidBrush _CreateSolidBrush@4
%define GetModuleHandle _GetModuleHandleA@4
%define DispatchMessage _DispatchMessageA@4
DT_VCENTER equ 4h
DT_CENTER equ 1h
DT_SINGLELINE equ 20h
TRANSPARENT equ 1
FF_DONTCARE equ 0
FW_BOLD equ 700
OUT_OUTLINE_PRECIS equ 8
CLIP_DEFAULT_PRECIS equ 0
CLEARTYPE_QUALITY equ 5
DEFAULT_PITCH equ 0
PS_SOLID equ 0
GWL_WNDPROC equ -4
SB_LINEUP equ 0
SB_LINELEFT equ 0
SB_LINEDOWN equ 1
SB_LINERIGHT equ 1
SB_PAGEUP equ 2
SB_PAGELEFT equ 2
SB_PAGEDOWN equ 3
SB_PAGERIGHT equ 3
SB_VERT equ 1
SW_SHOWNORMAL equ 1h
WC_DIALOG equ 8002h
WM_PAINT equ 0fh
WM_VSCROLL equ 115h
WM_TIMER equ 113h
WM_MOUSEMOVE equ 200h
WM_SYSKEYDOWN equ 104h
WM_KEYDOWN equ 100h
WM_DESTROY equ 2h
WM_CLOSE equ 10h
WS_VSCROLL equ 200000h
WS_OVERLAPPED equ 0h
WS_CAPTION equ 0c00000h
WS_SYSMENU equ 80000h
WS_THICKFRAME equ 40000h
WS_MINIMIZEBOX equ 20000h
WS_MAXIMIZEBOX equ 10000h
WS_VISIBLE equ 10000000h
WS_EX_LEFT equ 00000000h
WS_OVERLAPPEDWINDOW equ WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX
false equ 0
%macro CreateMyPen 2
push %2
push %1
push PS_SOLID
call CreatePen
%endmacro
%macro DrawMyLine 6
push %2
push %1
call SelectObject
push 0
push %4
push %3
push %1
call MoveToEx
push %6
push %5
push %1
call LineTo
%endmacro
struc RECT
.left: resd 1
.top: resd 1
.right: resd 1
.bottom: resd 1
.SIZE:
endstruc
struc PAINTSTRUCT
.hdc: resd 1
.fErase: resd 1
.rcPaint: resb RECT.SIZE
.fRestore: resd 1
.fIncUpdate: resd 1
.rgbReserved: resb 32
.SIZE:
endstruc
struc POINT
.x: resd 1
.y: resd 1
.SIZE:
endstruc
struc MSG
.hwnd: resd 1
.message: resd 1
.wParam: resd 1
.lParam: resd 1
.time: resd 1
.pt: resb POINT.SIZE
.SIZE:
endstruc
struc WNDCLASS
.style: resd 1
.lpfnWndProc: resd 1
.cbClsExtra: resd 1
.cbWndExtra: resd 1
.hInstance: resd 1
.hIcon: resd 1
.hCursor: resd 1
.hbrBackground: resd 1
.lpszMenuName: resd 1
.lpszClassName: resd 1
.SIZE:
endstruc
section .drectve info
_entry db "/entry:start "
_gdi32 db "/defaultlib:c:\\masm32\\lib\\gdi32.lib "
_user32 db "/defaultlib:c:\\masm32\\lib\\user32.lib "
_msvcrt db "/defaultlib:c:\\masm32\\lib\\msvcrt.lib "
_kernel32 db "/defaultlib:c:\\masm32\\lib\\kernel32.lib "
segment .data
szAppName db "main",0
szFont db "Arial",0
szMsg db "Test",0
MsgLen equ ($ - szMsg) - 1
pBuf times 255 db 0
FMT_KBD db "Key: %d",0
FMT_MOUSE db "%d-%d",0
FMT_TIMER db "%d",0
SLUP db "LINE++",0
SLDN db "LINE--",0
SPUP db "PAGE++",0
SPDN db "PAGE--",0
hWin dd 0
hInstance dd 0
pDefWndProc dd 0
pCommand dd 0
hDC dd 0
hPen dd 0
hBrush dd 0
hFont dd 0
dwCnt dd 0
x dd 0
y dd 0
pt times (POINT.SIZE * 3) db 0
msg istruc MSG
at .hwnd, dd 0
at .message, dd 0
at .wParam, dd 0
at .lParam, dd 0
at .time, dd 0
at .pt, dd 0, 0
iend
ps istruc PAINTSTRUCT
at .hdc, dd 0
at .fErase, dd 0
at .rcPaint, dd 0, 0, 0, 0
at .fRestore, dd 0
at .fIncUpdate, dd 0
at .rgbReserved, db 0
iend
wndClass istruc WNDCLASS
at .style, dd 0
at .lpfnWndProc, dd 0
at .cbClsExtra, dd 0
at .cbWndExtra, dd 0
at .hInstance, dd 0
at .hIcon, dd 0
at .hCursor, dd 0
at .hbrBackground, dd 0
at .lpszMenuName, dd 0
at .lpszClassName, dd 0
iend
struc用來定義Struct
istruc則是宣告資料(Instance)的意思,at用來指定初始化的資料內容,如果沒有想要做資料初始化,可以省略at