Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "io.inc"
- section .bss
- arr resd 1000000
- section .text
- global CMAIN
- CMAIN:
- mov ebp, esp; for correct debugging
- GET_UDEC 4, eax
- xor ecx, ecx
- .readarr:
- cmp ecx, eax
- jge .readarr_end
- GET_DEC 4, edx
- mov dword[arr + ecx * 4], edx
- inc ecx
- jmp .readarr
- .readarr_end:
- GET_DEC 1, cl
- mov ebx, 1
- ; shl ebx, 31
- ; sar ebx, cl
- ; rol ebx, cl; в ebx маска
- mov edx, eax
- dec edx
- ;and ebx, dword[arr + 4 * edx]; сохраняем в ebx младшие биты последнего числа в массиве, так как они будут утеряны после исполнения цикла
- .loop1:
- cmp cl, 0
- jle .loop1_end
- mov edx, eax
- dec edx
- and ebx, dword[arr + 4 * edx]
- .loop2:
- cmp edx, 0; в цикле совершаем сдвиг для всех чисел в массиве кроме первого, чтобы избежать segfault
- jle .loop2_end
- mov esi, dword[arr + 4 * edx - 4]
- shrd dword[arr + 4 * edx], esi, 1
- dec edx
- jmp .loop2
- .loop2_end:
- shrd dword[arr], ebx, 1; первое число сдвигаем отдельно
- dec cl
- jmp .loop1
- .loop1_end:
- shrd dword[arr], ebx, cl; первое число сдвигаем отдельно
- xor ecx, ecx
- .printarr:
- cmp ecx, eax
- jge .printarr_end
- PRINT_UDEC 4, [arr + ecx * 4]
- PRINT_CHAR 32
- inc ecx
- jmp .printarr
- .printarr_end:
- xor eax, eax
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement