Cod sursa(job #2325503)
Utilizator | Data | 22 ianuarie 2019 18:17:11 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 0 |
Compilator | cpp-32 | Status | done |
Runda | Arhiva educationala | Marime | 3.59 kb |
bits 32
global start
extern exit,fscanf,fprintf ,fopen
import exit msvcrt.dll
import fscanf msvcrt.dll
import fprintf msvcrt.dll
import fopen msvcrt.dll
segment data use32 class=data
n dd 0
sir times 1000000 db 0
poz dd 0
h dd 2
format db '%d',0
fiu dd 0
cn dd 0
p dd 4
j dd 0
fc db '%c',0
file1 dd 0
file2 dd 0
r db 'r',0
w db 'w',0
nm db 'algsort.in',0
nn db 'algsort.out',0
segment code use32 class=code
down:
mov ebx,[esp+4]
sub ebx,1
mov eax,ebx
mul dword [p]
mov ebx,eax
go:
mov eax,ebx
mul dword [h]
mov edx,eax
add eax,4
add edx,8
cmp eax,[n]
jg return
mov [fiu],eax
cmp edx,[n]
jg compare
mov ecx,[sir+eax]
cmp ecx,[sir+edx]
jge compare
mov [fiu],edx
compare:
mov eax,[fiu]
mov ecx,[sir+eax]
cmp [sir+ebx],ecx
jge return
mov edx,[sir+ebx]
mov [sir+ebx],ecx
mov [sir+eax],edx
mov ebx,eax
jmp go
return:
ret
start:
push dword r
push dword nm
call [fopen]
add esp,4*2
mov [file1],eax
push dword w
push dword nn
call [fopen]
add esp,4*2
mov [file2],eax
push dword n
push dword format
push dword [file1]
call [fscanf]
add esp,4*3
mov eax,[n]
mov [j],eax
mul dword [p]
sub eax,4
mov [n],eax
mov ecx,[j]
mov ebx,0
read:
push ecx
push dword fiu
push dword format
push dword [file1]
call [fscanf]
add esp,4*3
mov eax,[fiu]
mov [sir+ebx],eax
add ebx,4
pop ecx
loop read
mov ecx,[j]
form_heap:
push ecx
call down
pop ecx
loop form_heap
doneheap:
mov ecx,[j]
mov edx,[n]
mov ebx,0
sub ecx,1
solve:
mov edx,[n]
push ecx
push dword 1
mov eax,[sir]
mov ebx,[sir+edx]
mov [sir],ebx
mov [sir+edx],eax
mov ebx,[n]
sub ebx,4
mov [n],ebx
call down
pop eax
pop ecx
loop solve
mov ebx,0
mov ecx,[j]
afis:
push ecx
push dword [sir+ebx]
push dword format
push dword [file2]
call [fprintf]
add esp,4*3
push dword 32
push dword fc
push dword [file2]
call [fprintf]
add esp,4*3
add ebx,4
pop ecx
loop afis
push dword 0
call [exit]