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 cmp eax, 0 je .end_print 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 cmp eax, 0 je .start_print ; сдвигаем каждое число в 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 ; сцепляем с итоговым числом m[(i+1)%N] mov edx, dword[i] add edx, 1 cmp edx, dword[N] jne .not_last xor edx, edx .not_last: ; вставляем перенос в m[(i+1)%N] 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) Подсказки:
- Обрати внимание, что при переносе битов используется операция `shl` для извлечения K старших битов из исходного числа, но для этого сначала нужно правильно определить сдвиг, учитывая, что всего битов 32.
- Убедись, что индекс для переноса битов `(i+1)%N` корректно обрабатывает случай последнего элемента (когда `i+1 == N`), чтобы закольцевать массив.