Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "io.inc"
- section .bss
- x resd 1000
- y resd 1
- fr resd 1
- fw resd 1
- len resd 1
- section .rodata
- f_scanf db "%d", 0
- f_printf db "%d ", 0
- f_r db "r", 0
- f_input db "input.txt", 0
- f_w db "w", 0
- f_output db "output.txt", 0
- section .text
- CEXTERN fopen
- CEXTERN fscanf
- CEXTERN fprintf
- CEXTERN qsort
- CEXTERN fclose
- global CMAIN
- compare:
- push ebp
- mov ebp, esp
- push ebx
- mov eax, dword[ebp+8]
- mov eax, dword[eax]
- mov ebx, dword[ebp+12]
- mov ebx, dword[ebx]
- cmp eax, ebx
- jg .L1
- jl .L2
- xor eax, eax
- jmp .L3
- .L1:
- mov eax, 1
- jmp .L3
- .L2:
- mov eax, -1
- .L3:
- pop ebx
- pop ebp
- ret
- CMAIN:
- mov ebp, esp
- and esp, -16
- sub esp, 8
- push f_r
- push f_input
- call fopen
- mov dword[fr], eax
- add esp, 8
- push f_w
- push f_output
- call fopen
- mov dword[fw], eax
- xor ebx, ebx
- mov dword[esp+4], x
- mov ebx, dword[esp+4]
- mov dword[y], ebx
- xor ebx, ebx
- .L4:
- add esp, 12
- mov eax, dword[y]
- push eax
- push f_scanf
- push dword[fr]
- call fscanf
- cmp eax, 1
- jne .END
- mov eax, dword[y]
- add eax, 4
- mov dword[y], eax
- add dword[esp+4], 4
- inc ebx
- jmp .L4
- .END:
- mov dword[len], ebx
- mov ebx, 4
- push compare
- push ebx
- push dword[len]
- push x
- call qsort
- mov ebx, 0
- .L5:
- add esp, 12
- mov eax, dword[x+ebx*4]
- push eax
- push f_printf
- push dword[fw]
- call fprintf
- inc ebx
- cmp ebx, dword[len]
- jl .L5
- .END2:
- mov esp, ebp
- xor eax, eax
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement