home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.sberbank.sumy.ua
/
2014.11.ftp.sberbank.sumy.ua.tar
/
ftp.sberbank.sumy.ua
/
incoming
/
1
/
SinCosRound.asm
< prev
next >
Wrap
Assembly Source File
|
2014-02-08
|
4KB
|
194 lines
.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
return MACRO arg
mov eax, arg
ret
ENDM
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
DrawEllipseSinCos PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
.data
szClassName db "Evgeney_Victorovich_Kupin_27_April_1982",0
szDisplayName db "RoundFPU",0
CommandLine dd 0
hWnd dd 0
hInstance dd 0
hIcon dd ?
hinstLib dd ?
.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 :DWORD, hPrevInst :DWORD, CmdLine :DWORD, CmdShow :DWORD
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW \
or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground, COLOR_WINDOW
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
push hIcon
pop wc.hIcon
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
push hIcon
pop wc.hIconSm
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx,WS_EX_LEFT,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW or WS_SYSMENU,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,
hInst,NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_MAXIMIZE
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
return msg.wParam
WinMain endp
WndProc proc hWin :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD
.if uMsg == WM_MOUSEMOVE
invoke GetTickCount
mov edx, eax
and edx, 0ffffffh
mov ecx, lParam
mov eax,ecx
and ecx, 0ffffh
shr eax, 16
invoke DrawEllipseSinCos, hWin, ecx,eax, 180,140, edx
return 0
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
return 0
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
WndProc endp
DrawEllipseSinCos proc hWin:DWORD,ofX:DWORD,ofY:DWORD,rX:DWORD,rY:DWORD,rgbCl:DWORD
LOCAL FlagCr:WORD
LOCAl hDC:DWORD
LOCAL pX:DWORD
LOCAL pY:DWORD
LOCAL Angle:DWORD
finit
fstcw FlagCr
or FlagCr, 0011000000000b
fldcw FlagCr
fild Angle
fstp Angle
invoke GetDC,hWin
mov hDC,eax
DrawEllipseSinCos_loop:
mov pX, 3
fild pX
fsin
fstp pX
fld pX
fld Angle
fadd st(0),st(1)
fist pX
cmp pX, 540
ja DrawEllipseSinCos_loop_exit
fstp Angle
fstp pX
fld Angle
fcos
fild rX
fmul st(1),st(0)
fistp pX
fistp pX
mov eax, ofX
add pX, eax
fld Angle
fsin
fild rY
fmul st(1),st(0)
fistp pY
fistp pY
mov eax,ofY
add pY,eax
invoke SetPixel, hDC, pX,pY, rgbCl
jmp DrawEllipseSinCos_loop
DrawEllipseSinCos_loop_exit:
invoke ReleaseDC, hWin, hDC
ret
DrawEllipseSinCos endp
end start