entry N92055036
include 'win32a.inc'
stack 200h
section '.code' code readable executable
;Процедура циклического сдвига влево строки матрицы
;RowStart - адрес начала строки, M - кол-во столбцов
proc ShiftRow stdcall uses ecx edx edi esi, RowStart:dword, M:dword
mov ecx,[M]
dec ecx
shl ecx,1
mov edi,[RowStart]
mov eax,[edi]
mov edx,[edi+4]
mov esi,edi
add esi,8
rep movsd
stosd
mov eax,edx
stosd
ret
endp
;Процедура сдвига строк матрицы влево на 1 элемент
;Adr - адрес начала матрицы, N - кол-во строк, M - кол-во столбцов
proc ShiftMatrix stdcall, Adr:dword, N:dword, M:dword
mov ecx,[N]
mov edx,[M]
shl edx,3
mov esi,[Adr]
@@:
stdcall ShiftRow,esi,[M]
add esi,edx
loop @B
ret
endp
N92055036:
rdtsc
mov [Seed],eax
finit
stdcall Random,8
ffree st
add eax,3
mov [Rows],eax
stdcall Random,8
ffree st
add eax,3
mov [Cols],eax
mul [Rows]
mov [Size],eax
shl eax,3
invoke VirtualAlloc,NULL,eax,MEM_COMMIT,PAGE_READWRITE
mov [Matrix],eax
mov edi,eax
cinvoke printf,Text1,[Rows],[Cols]
mov ecx,[Size]
@@:
stdcall Random,0
fmul [fConst1]
fsub [fConst2]
fstp qword [edi+ecx*8-8]
loop @B
stdcall OutMatrix,[Matrix],[Rows],[Cols]
stdcall ShiftMatrix,[Matrix],[Rows],[Cols]
cinvoke printf,Text2
stdcall OutMatrix,[Matrix],[Rows],[Cols]
invoke getch
invoke VirtualFree,[Matrix],NULL,MEM_RELEASE
invoke ExitProcess,NULL
proc Random stdcall uses edx, n:dword
locals
FloatConst dq 3DFh shl 52
IntBuff dq 0
endl
mov eax,[Seed]
mov edx,08088405h
mul edx
inc eax
mov [Seed],eax
mov dword [IntBuff],eax
fild [IntBuff]
mov edx,[n]
fmul [FloatConst]
mul edx
mov eax,edx
ret
endp
proc OutRow stdcall uses ecx eax esi edx, RowStart:dword, RowLen:dword
mov ecx,[RowLen]
mov esi,[RowStart]
@@:
lodsd
mov edx,eax
push ecx
lodsd
cinvoke printf,ItemForm,edx,eax
pop ecx
loop @B
ret
endp
proc OutMatrix stdcall, Adr:dword, Rows:dword, Cols:dword
mov esi,[Adr]
mov ecx,[Rows]
mov edx,[Cols]
shl edx,3
@@:
stdcall OutRow,esi,[Cols]
add esi,edx
push edx
push ecx
cinvoke putch,13
cinvoke putch,10
pop ecx
pop edx
loop @B
ret
endp
section '.data' data readable writeable
Text1 db 'Исходная матрица (%ux%u):',13,10,0
Text2 db 10,'Преобразованная матрица: ',13,10,0
ItemForm db '%7.2lf',0
fConst1 dd 199.98
fConst2 dd 99.99
Seed rd 1
Rows rd 1
Cols rd 1
Size rd 1
Matrix rd 1
section '.idata' import data readable
library kernel32,'kernel32.dll', msvcrt,'msvcrt.dll'
include 'api/kernel32.inc'
import msvcrt, getch,'_getch', putch,'_putch', printf,'printf'
