Online Compiler Nasm

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
1) Этот код считывает массив чисел, находит в нём локальные минимумы и максимумы (элементы, которые меньше/больше обоих соседей), подсчитывает их количество и выводит сначала количество минимумов и их индексы, затем количество максимумов и их индексы.

2) Подсказки:
- Обрати внимание, что при проверке элемента на локальный экстремум программа сравнивает его с двумя соседями. Убедись, что для первого и последнего элемента массива такие проверки пропускаются, так как у них только один сосед.
- В коде есть несколько меток (например, `.plus_last_min`, `.print_last_min`), которые не используются. Проверь, не забыл ли ты обработать последний элемент массива отдельно для корректного подсчёта.