Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted by alex ( 16 years ago )
; текст программы
.586
.MODEL FLAT, stdcall
RGBW equ 00D4D0C8h ; цвет фона в окне
include win.inc

.data
 HWND DD 0 ; дескриптор главного окна
 HINST DD 0 ; дескриптор приложения
 TITL DB "Программа",0
 CLASSNAME DB 'CLASS32',0
 Message MSG <?>
 WC WNDCLASS <?>
 hdc DD 0 ; дескриптор контекста окна
 hPen DD 0 ; дескриптор пера
 memdc DD 0 ; дескриптор совместимого контекста окна
 CPBUT DB 'Выход',0 ; надпись на кнопке
 CLSBTN DB 'BUTTON',0 ; класс окна "КНОПКА"
 Height_ DD ? ; высота окна
 Width_ DD ? ; ширина окна
 rect_ RECT <>
 ps PAINTSTRUCT <?>
 messX db 'z=y(x)',0
 mess_len equ $-messX-1
 OffsetX DD 0
 OffsetY DD ?
 ScaleX DD ?
 ScaleY DD ?
 X DD 0
 Y DD 0
 t DD 0
 A DD 0
 Y1 DD 0
 Y2 DD 0
 X1 DD 0
 X2 DD 0
 B DD 0 
 dva DD 2
 tru DD 3
 cons DD 1
 A1 DD 0
 B1 DD 0
 Z1 DD 0
 Z2 DD 0
 deg_rad DD 180

.code
START proc
 INVOKE GetModuleHandle, 0 ; получить дескриптор приложения
 MOV HINST, EAX
 MOV WC.style, CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
 ; процедура обработки сообщений
 MOV WC.lpfnWndProc, OFFSET WNDPROC
 MOV EAX, HINST
 MOV WC.hInstance, EAX
 INVOKE LoadIcon, HINST, 101
 MOV WC.hIcon, EAX
 INVOKE LoadCursor, HINST, 101
 MOV WC.hCursor, EAX
 INVOKE CreateSolidBrush, RGBW
 MOV WC.hbrBackground, EAX
 MOV WC.lpszMenuName, 101
 MOV WC.lpszClassName, OFFSET CLASSNAME
 INVOKE RegisterClass, OFFSET WC
 INVOKE CreateWindowEx, ; создать окно зарегистрированного класса
 0,
 OFFSET CLASSNAME,
 OFFSET TITL,
 WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_GROUP + WS_TABSTOP,
 100, ; X — координата левого верхнего угла
 100, ; Y — координата левого верхнего угла
 400, ; DX - ширина окна
 450, ; DY — высота окна
 0, 0, HINST,0
 CMP EAX, 0 ; проверка на ошибку
 JZ END_LOOP
 MOV HWND, EAX ; дескриптор окна
; --------------------------------------------------
 INVOKE ShowWindow, HWND, SW_SHOWNORMAL ; показать созданное окно
 INVOKE UpdateWindow, HWND ;перерисовать видимую часть окна
 ; цикл обработки сообщений
MSG_LOOP:
 INVOKE GetMessage,
 OFFSET Message, 0,0,0
 CMP EAX, 0
 JE END_LOOP
 INVOKE TranslateMessage, OFFSET Message
 INVOKE DispatchMessageA, OFFSET Message
 JMP MSG_LOOP
END_LOOP:
 ; выход из программы (закрыть процесс)
 INVOKE ExitProcess, Message.wParam
START endp
 ; Процедура обработки элементов меню
 MenuProc proc hW:DWORD, wParam:DWORD
 push eax
 mov eax, wParam
 cmp eax, 40001
 je MEXIT
 jmp MEXIT1
MEXIT:
 INVOKE PostQuitMessage, 0
MEXIT1:
 pop eax
 ret
MenuProc endp

; --------------------------------------------------
 ; процедура окна
 ; расположение параметров в стеке
 ; [EBP+014H] LPARAM
 ; [EBP+10H] WAPARAM
 ; [EBP+0CH] MES
 ; [EBP+8] HWND
 WNDPROC PROC hW:DWORD, Mes:DWORD, wParam:DWORD, lParam:DWORD
 CMP Mes, WM_DESTROY
 JE WMDESTROY
 CMP Mes, WM_CREATE
 JE WMCREATE
 CMP Mes, WM_COMMAND
 JE WMCOMMAND
 CMP Mes, WM_PAINT
 JE WMPAINT
 CMP Mes, WM_SIZE
 JE WMSIZE
 JMP DEFWNDPROC
 ; создание окна
 WMCREATE:
 WMSIZE:
 INVOKE GetDC, hW
 mov hdc, eax
 INVOKE CreateCompatibleDC, hdc
 mov memdc, eax
 INVOKE GetWindowRect, hW, offset rect_
 mov eax, rect_.bottom
 sub eax, rect_.top
 mov Height_, eax
 mov eax, rect_.right
 sub eax, rect_.left
 mov Width_, eax
 INVOKE CreateCompatibleBitmap,
 hdc, Width_, Height_
 INVOKE SelectObject, memdc, eax
 INVOKE CreateSolidBrush, RGBW
 INVOKE SelectObject, memdc, eax
 INVOKE PatBlt, memdc, 0, 0, Width_, Height_, PATCOPY
 INVOKE ReleaseDC, hW, hdc
 INVOKE CreatePen, PS_SOLID, 0,0
 mov hPen, eax
 INVOKE SelectObject, memdc, hPen
 mov eax, Height_
 sub eax, 27
 shr eax, 1
 mov OffsetY, eax
 INVOKE MoveToEx, memdc, 0, OffsetY, 0
 INVOKE LineTo, memdc, Width_, OffsetY
 INVOKE CreatePen, PS_SOLID, 2, 000000FFh
 mov hPen, eax
 INVOKE SelectObject, memdc, hPen
 INVOKE MoveToEx, memdc, 0, OffsetY, 0
 mov eax, 0
 mov t, eax
 mov eax, 8 ; GetSystemMetrics(SM_CXFRAME)*2
 mov cons, eax
 fild Width_
 fisub cons
 fidiv deg_rad
 mov eax, 2
 mov cons, eax
 fidiv cons
 fstp ScaleX
 mov eax, 27 ; GetSystemMetrics(SM_CYFRAME)*2 +
 ;GetSystemMetrics(SM_CXFRAME)*2
 mov cons, eax
 fild Height_
 fisub cons
 mov eax, 2
 mov cons, eax
 fidiv cons
 fstp ScaleY
 mov ecx, 360
 
L: push ecx
 fild t
 fmul ScaleX
 fiadd OffsetX
 fistp X
 fild t
 fldpi
 fmulp
 fidiv deg_rad
 fsin
 fchs
 fmul ScaleY
 fiadd OffsetY
 fistp Y
 inc t
 INVOKE LineTo, memdc, X, Y
 pop ecx
loop L

 INVOKE InvalidateRect, hW, offset rect_,0
 INVOKE SetBkColor, memdc, RGBW
 mov eax, mess_len
 INVOKE TextOutA,
 memdc,
 10, 20,
 offset messX,
 eax
 MOV EAX, 0
 JMP FINISH
 ; перерисовка окна
 WMPAINT:
 INVOKE BeginPaint, hW, offset ps
 mov hdc,eax
 INVOKE BitBlt, hdc,
 0, 0, Width_, Height_,
 memdc, 0, 0, SRCCOPY
 INVOKE EndPaint, hdc, offset ps
 MOV EAX, 0
 JMP FINISH
 ; обработка сообщения по умолчанию
 DEFWNDPROC:
 INVOKE DefWindowProc,
 hW,
 Mes,
 wParam,
 lParam
 JMP FINISH
 ; обработка событий меню
 WMCOMMAND:
 INVOKE MenuProc, hW, wParam
 mov eax, 0
 jmp FINISH
 WMDESTROY:
 INVOKE DeleteDC, hPen
 INVOKE DeleteDC, memdc
 INVOKE PostQuitMessage, 0
 MOV EAX, 0
FINISH:
 ret
WNDPROC ENDP
END START

 

Revise this Paste

Your Name: Code Language: