Online Compiler Nasm

extern io_get_udec, io_print_udec, io_newline section .bss N resd 1 K resd 1 m resd 1000000 m_copy resd 1000000 i resd 1 k_bits resd 1 j resd 1 section .text global main main: call io_get_udec mov dword[N], eax mov dword[i], 0 mov dword[j], 0 .start_push: mov ecx, dword[i] cmp ecx, dword[N] je .end_push call io_get_udec mov dword[m + 4*ecx], eax mov dword[m_copy + 4*ecx], eax inc dword[i] jmp .start_push .end_push: call io_get_udec mov dword[K], eax ; сдвигаем каждое число в m на K вправо mov dword[i], 0 .start_sdv: mov ecx, dword[i] cmp ecx, dword[N] je .end_sdv mov edx, ecx mov cl, byte[K] shr dword[m + 4*edx], cl inc dword[i] jmp .start_sdv .end_sdv: mov dword[i], 0 .start_total_sdv: mov ecx, dword[i] cmp ecx, dword[N] je .start_print ; копируем K последних бит из m_copy[i] mov eax, dword[m_copy + 4*ecx] mov ebx, 32 sub ebx, dword[K] mov cl, bl shl eax, cl mov dword[k_bits], eax ; сцепляем с итоговым числом (i+1)%N mov edx, dword[i] add edx, 1 cmp edx, dword[N] jne .not_last xor edx, edx .not_last: ; вставляем перенос mov eax, dword[m + 4*edx] or eax, dword[k_bits] mov dword[m + 4*edx], eax inc dword[i] jmp .start_total_sdv .start_print: mov eax, dword[j] cmp eax, dword[N] je .end_print mov ecx, dword[j] mov eax, dword[m + 4*ecx] call io_print_udec call io_newline inc dword[j] jmp .start_print .end_print: xor eax, eax ret
1) Этот код считывает массив беззнаковых чисел, затем циклически сдвигает все его элементы вправо на K бит, используя вспомогательный массив для хранения исходных значений. Результат выводится построчно.

2) Подсказки:
- Обрати внимание, что для хранения K используется байтовая переменная (`byte[K]`), но при вычислении `32 - K` используется двойное слово (`dword[K]`). Убедись, что значение K не превышает 32, иначе сдвиг может работать некорректно.
- В блоке `.not_last` происходит сцепление битов: K младших битов из предыдущего элемента (после сдвига влево) добавляются к старшим битам следующего элемента. Проверь логику вычисления индекса `(i+1)%N` для корректного циклического переноса.