extern io_get_dec
extern io_print_dec
extern io_print_char
section .bss
n resd 1
arr resd 5000
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:
cmp esi, [n] ;последнее число
jne .plus_last_max
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 .plus_min
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]
cmp eax, [edi - 4]
jge .next
cmp esi, 1
je .plus_max
mov eax, [edi]
cmp eax, [edi - 4]
jge .next
.plus_max:
inc dword [max_cnt]
jmp .next
.next:
add edi, 4
inc esi
jmp .read_loop
.plus_last_max:
mov eax, [edi]
cmp eax, [edi - 4] ;сравниваем edi
jle .print1
inc dword [max_cnt]
.print1:
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] ;?
jne .print_last_min
mov eax, [edi]
cmp eax, [edi - 4]
jge .next_print_max
cmp esi, 1
je .print_max
mov eax, [edi - 8]
cmp eax, [edi - 4]
jge .next_print_max
.print_max:
mov eax, esi
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
.print_last_max:
mov eax, [edi]
cmp eax, [edi - 4] ;сравниваем edi
jle .plus_last_min
mov eax, [edi]
call io_print_dec
.plus_last_min:
mov eax, 10
call io_print_dec
mov eax, [edi]
cmp eax, [edi - 4] ;сравниваем edi
jge .print2
inc dword [min_cnt]
.print2:
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] ;?
jne .end
mov eax, [edi - 4]
cmp eax, [edi]
jge .next_print_min
cmp esi, 1
je .print_min
mov eax, [edi - 4]
cmp eax, [edi - 8]
jge .next_print_min
.print_min:
mov eax, esi
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
.print_last_min:
mov eax, [edi]
cmp eax, [edi - 4] ;сравниваем edi
jge .end
mov eax, [edi]
call io_print_dec
.end:
xor eax, eax
ret