extern io_get_dec
extern io_print_dec
extern io_print_char
section .bss
n resd 1
arr resd 500000
max_cnt resd 1
min_cnt resd 1
section .text
global main
main:
call io_get_dec
mov [n], eax
; dec dword [n] ; n = n - 1!!!
mov edi, arr
mov esi, 0
mov dword [max_cnt], 0
mov dword [min_cnt], 0
.read_loop:
push ecx
call io_get_dec
pop ecx
mov [edi], eax
;проверка предыдущего числа на экстремум/инфимум
.find_min:
cmp esi, 0
je .find_max
mov eax, [edi - 4]
cmp eax, [edi]
jge .find_max
cmp esi, 1
je .find_max
mov eax, [edi - 4]
cmp eax, [edi - 8]
jge .find_max
.plus_min:
inc dword [min_cnt]
jmp .next
.find_max:
cmp esi, 0
je .next
mov eax, [edi - 4]
cmp eax, [edi]
jle .next
cmp esi, 1
je .next
mov eax, [edi - 4]
cmp eax, [edi - 8]
jle .next
.plus_max:
inc dword [max_cnt]
.next:
add edi, 4
inc esi
cmp esi, [n]
jl .read_loop
.plus_last_min:
.print1:
mov eax, [min_cnt]
call io_print_dec
mov eax, 10
call io_print_char
mov edi, arr
mov esi, 0
.print_min_start:
cmp esi, [n] ;?
je .plus_last_max
cmp esi, 0
je .next_print_min
mov eax, [edi - 4]
cmp eax, [edi]
jge .next_print_min
cmp esi, 1
je .next_print_min
mov eax, [edi - 4]
cmp eax, [edi - 8]
jge .next_print_min
.print_min:
mov eax, esi
dec eax
call io_print_dec
mov eax, 32
call io_print_char
jmp .next_print_min
.next_print_min:
add edi, 4
inc esi
jmp .print_min_start
.print_last_min:
.plus_last_max:
mov eax, 10
call io_print_char
.print2:
mov eax, [max_cnt]
call io_print_dec
mov eax, 10
call io_print_char
mov edi, arr
mov esi, 0
.print_max_start:
cmp esi, [n] ;?
je .end
cmp esi, 0
je .next_print_max
mov eax, [edi - 4]
cmp eax, [edi]
jle .next_print_max
cmp esi, 1
je .next_print_max
mov eax, [edi - 4]
cmp eax, [edi - 8]
jle .next_print_max
.print_max:
mov eax, esi
dec eax
call io_print_dec
mov eax, 32
call io_print_char
jmp .next_print_max
.next_print_max:
add edi, 4
inc esi
jmp .print_max_start
.print_last_max:
.end:
mov eax, 10
call io_print_char
xor eax, eax
ret