Подготовка среды

This commit is contained in:
Стас Михайлов WindowsVM
2021-01-02 12:22:04 +03:00
parent 23e9a11601
commit 03060ad1b2
2 changed files with 109 additions and 29 deletions
+76 -29
View File
@@ -1,34 +1,81 @@
global _main
extern _GetStdHandle@4
extern _WriteFile@20
extern _ExitProcess@4
.386
section .text
_main:
; DWORD bytes;
mov ebp, esp
sub esp, 4
.MODEL FLAT,STDCALL
; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
push -11
call _GetStdHandle@4
mov ebx, eax
OPTION CASEMAP:NONE
; WriteFile( hstdOut, message, length(message), &bytes, 0);
push 0
lea eax, [ebp-4]
push eax
push (message_end - message)
push message
push ebx
call _WriteFile@20
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
; ExitProcess(0)
push 0
call _ExitProcess@4
Include SDI.inc
; never here
hlt
message:
db 'Hello, World', 10
message_end:
.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 hInst
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,0
Invoke LoadCursor, NULL, IDC_ARROW
MOV wc.hCursor,EAX
Invoke RegisterClassEx, addr wc
Invoke LoadMenu, hInst, Offset MenuName
MOV hMenu,EAX
Invoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR ClassName, ADDR szAppName,\
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,\
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu,\
hInst, NULL
MOV hwnd,EAX
Invoke ShowWindow, hwnd, SW_SHOWNORMAL
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
.ElseIf uMsg==WM_COMMAND
MOV EAX,wParam
.If AX==IDM_FILE_NEW
Invoke MessageBox, NULL, ADDR szFileNew, Offset szAppName, MB_OK
.ElseIf AX==IDM_FILE_OPEN
Invoke MessageBox, NULL, ADDR szFileOpen, Offset szAppName, MB_OK
.ElseIf AX==IDM_HELP_ABOUT
Invoke MessageBox, NULL,ADDR szHelpAbout, Offset szAppName, MB_OK
.Else
Invoke DestroyWindow, hWnd
.EndIf
.Else
Invoke DefWindowProc, hWnd, uMsg, wParam, lParam
RET
.EndIf
XOR EAX,EAX
RET
WndProc EndP
End Start