📄 simple.asm
字号:
.386p
.MODEL flat,stdcall
INCLUDE SIMPLE.INC
WinMain PROTO stdcall, :HINSTANCE,:HINSTANCE,:LPSTR,:DWORD
.STACK 4096
.DATA
WindowClass BYTE 'SIMPLE',0
WindowTitle BYTE 'SIMPLE',0
hInst1 HINSTANCE 0
lpCmdLine1 LPSTR 0
.CODE
_start:
INVOKE GetModuleHandleA,NULL
mov hInst1,eax
INVOKE GetCommandLineA
mov lpCmdLine1,eax
INVOKE WinMain,hInst1,NULL,lpCmdLine1,SW_SHOWDEFAULT
INVOKE ExitProcess,eax
WinMain PROC hInst:HINSTANCE,hPrevInst:HINSTANCE,lpCmdLine:LPSTR,nShowCmd:DWORD
LOCAL wcex:WNDCLASSEXA
LOCAL hWnd:HWND
LOCAL msg:MSG
.IF !hPrevInst
mov wcex.cbSize,SIZEOF WNDCLASSEXA
mov wcex.style,CS_HREDRAW or CS_VREDRAW
mov wcex.cbClsExtra,0
mov wcex.cbWndExtra,0
mov wcex.lpfnWndProc,OFFSET WndProc
mov eax,hInst
mov wcex.hInstance,eax
INVOKE LoadIconA,hInst,IDI_APPLICATION
mov wcex.hIcon,eax
INVOKE LoadCursorA,0,IDC_ARROW
mov wcex.hCursor,eax
mov wcex.hbrBackground,COLOR_WINDOW+1
mov wcex.lpszMenuName,NULL
mov wcex.lpszClassName,OFFSET WindowClass
INVOKE LoadIconA,hInst,IDI_APPLICATION
mov wcex.hIconSm,eax
INVOKE RegisterClassExA,ADDR wcex
.IF !eax
mov eax,FALSE
ret
.ENDIF
.ENDIF
INVOKE CreateWindowExA,0,ADDR WindowClass,ADDR WindowTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInst,NULL
mov hWnd,eax
.IF !eax
mov eax,FALSE
ret
.ENDIF
INVOKE ShowWindow,hWnd,nShowCmd
INVOKE UpdateWindow,hWnd
.WHILE TRUE
INVOKE GetMessageA,ADDR msg,0,0,0
.BREAK .IF !eax
INVOKE TranslateMessage,ADDR msg
INVOKE DispatchMessageA,ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain ENDP
WndProc PROC hWnd:HWND,message:UINT,wParam:DWORD,lParam:DWORD
LOCAL hDC:HDC
LOCAL ps:PAINTSTRUCT
.IF message==WM_PAINT
INVOKE BeginPaint,hWnd,ADDR ps
mov hDC,eax
INVOKE EndPaint,hWnd,ADDR ps
mov eax,0
ret
.ELSEIF message==WM_DESTROY
INVOKE PostQuitMessage,0
mov eax,0
ret
.ELSE
INVOKE DefWindowProcA,hWnd,message,wParam,lParam
ret
.ENDIF
mov eax,0ffffffffh
ret
WndProc ENDP
PUBLIC _start
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -