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

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
+33
View File
@@ -0,0 +1,33 @@
Include C:\masm32\include\windows.inc
Include C:\masm32\include\user32.inc
Include C:\masm32\include\kernel32.inc
;-------------------------------------------------------------------
;Needed For Debug Window Only
;Include <masm32.inc>
;nclude <debug.inc
;-------------------------------------------------------------------
;IncludeLib user32.lib
;ncludeLib kernel32.lib
;-------------------------------------------------------------------
;Needed For Debug Window Only
;IncludeLib masm32.lib
;IncludeLib debug.lib
.DATA
ClassName DB "MainWinClass",0
szAppName DB "SDI Application",0
MenuName DB "FirstMenu",0
szFileNew DB "You selected 'New'.",0
szFileOpen DB "You selected 'Open'.",0
szHelpAbout DB "You selected 'About'.",0
.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hMenu HMENU ?
.CONST
IDM_FILE_NEW EQU 1
IDM_FILE_OPEN EQU 2
IDM_HELP_ABOUT EQU 3
IDM_FILE_EXIT EQU 4
+76 -29
View File
@@ -1,34 +1,81 @@
global _main .386
extern _GetStdHandle@4
extern _WriteFile@20
extern _ExitProcess@4
section .text .MODEL FLAT,STDCALL
_main:
; DWORD bytes;
mov ebp, esp
sub esp, 4
; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE) OPTION CASEMAP:NONE
push -11
call _GetStdHandle@4
mov ebx, eax
; WriteFile( hstdOut, message, length(message), &bytes, 0); WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
push 0
lea eax, [ebp-4]
push eax
push (message_end - message)
push message
push ebx
call _WriteFile@20
; ExitProcess(0) Include SDI.inc
push 0
call _ExitProcess@4
; never here .CODE
hlt Start:
message: Invoke GetModuleHandle, NULL
db 'Hello, World', 10 MOV hInstance,EAX
message_end: 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