extern io_get_dec, io_print_dec, io_print_char, io_newline
section .bss
min resd 500000
max resd 500000
section .data
N dd 0
s_count dd 0
b_count dd 0
prev dd 0
cur dd 0
next dd 0
section .text
global main
main:
call io_get_dec
mov [N], eax
cmp eax, 3
jl zero_result
; читаем первые два элемента
call io_get_dec
mov [prev], eax
call io_get_dec
mov [cur], eax
mov edi, 1 ; i = 1
mov ebx, [N]
sub ebx, 1 ; N-1
loop_check:
cmp edi, ebx
jge finish_scan
call io_get_dec
mov [next], eax
mov eax, [cur]
mov edx, [prev]
mov esi, [next]
; проверка минимума
cmp eax, edx
jnl check_max
cmp eax, esi
jnl check_max
mov ecx, [s_count]
mov [min + ecx*4], edi
inc dword [s_count]
check_max:
cmp eax, edx
jng update_vals
cmp eax, esi
jng update_vals
mov ecx, [b_count]
mov [max + ecx*4], edi
inc dword [b_count]
update_vals:
mov eax, [cur]
mov [prev], eax
mov eax, [next]
mov [cur], eax
inc edi
jmp loop_check
finish_scan:
mov eax, [s_count]
call io_print_dec
call io_newline
xor edi, edi
print_min:
cmp edi, [s_count]
jge print_max_count
mov eax, [min + edi*4]
call io_print_dec
mov al, ' '
call io_print_char
inc edi
jmp print_min
print_max_count:
call io_newline
mov eax, [b_count]
call io_print_dec
call io_newline
xor edi, edi
print_max:
cmp edi, [b_count]
jge end_prog
mov eax, [max + edi*4]
call io_print_dec
mov al, ' '
call io_print_char
inc edi
jmp print_max
end_prog:
call io_newline
ret
zero_result:
mov eax, 0
call io_print_dec
call io_newline
mov eax, 0
call io_print_dec
call io_newline
ret