Cod sursa(job #2325503)

Utilizator geo_furduifurdui geo geo_furdui 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]