extern io_get_dec, io_newline, io_print_dec
section .bss
N resd 1
A resd 1
m resd 10000
num resd 1
N_1 resd 1 ; будет значение N-1 для цикла
i resd 1
j resd 1
section .text
global main
main:
call io_get_udec
mov [N], eax
mov [N_1], eax
sub [N_1], 1
mov ecx, 0
.start_push:
cmp ecx, [N]
je .end_push
call io_get_dec
mov dword[m + 4*ecx], eax
inc ecx
jmp .start_push
.end_push:
;for (int i=0; i<N-1; i++){
; for (int j=i+1; j<N; j++){
; if (m[j] < m[i]){
; int tmp = m[i]
; m[i] = m[j]
; m[j] = tmp
; }
; }
;}
mov [i], 0
.start1:
mov eax, [i]
mov [j], eax
add [j], 1
cmp [i], [N_1]
je .end1
.start2:
cmp [j], [N]
je .end2
mov eax, [j]
mov ebx, [i]
mov edx, dword[m + 4*ebx]
cmp dword[m + 4*eax], edx
je .continue
mov edx, dword[m + 4*ebx]
mov dword[m + 4*ebx], dword[m + 4*eax]
mov dword[m + 4*eax], edx
jmp .continue
.continue:
inc [j]
jmp .start2
.end2:
inc [i]
jmp .start1
.end1:
xor ecx, ecx
.start_print:
cmp ecx, [N]
je .end_print
mov eax, dword[m + 4*ecx]
call io_print_dec
call io_newline
inc ecx
jmp .start_print
.end_print:
xor eax, eax
ret