Advertisement
_takumi

okokokokok

Feb 28th, 2022
1,996
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. %include "io.inc"
  2.  
  3. section .bss
  4.     arr resd 1000000
  5.  
  6. section .text
  7. global CMAIN
  8. CMAIN:
  9.     mov ebp, esp; for correct debugging
  10.     GET_UDEC 4, eax
  11.     xor ecx, ecx
  12. .readarr:
  13.     cmp ecx, eax
  14.     jge .readarr_end
  15.     GET_DEC 4, edx
  16.     mov dword[arr + ecx * 4], edx
  17.     inc ecx
  18.     jmp .readarr
  19. .readarr_end:
  20.     GET_DEC 1, cl
  21.     mov ebx, 1
  22. ;    shl ebx, 31
  23. ;    sar ebx, cl
  24. ;    rol ebx, cl; в ebx маска
  25.     mov edx, eax
  26.     dec edx
  27.     ;and ebx, dword[arr + 4 * edx]; сохраняем в ebx младшие биты последнего числа в массиве, так как они будут утеряны после исполнения цикла
  28. .loop1:
  29.     cmp cl, 0
  30.     jle .loop1_end
  31.     mov edx, eax
  32.     dec edx
  33.     and ebx, dword[arr + 4 * edx]
  34. .loop2:
  35.     cmp edx, 0; в цикле совершаем сдвиг для всех чисел в массиве кроме первого, чтобы избежать segfault
  36.     jle .loop2_end
  37.     mov esi, dword[arr + 4 * edx - 4]
  38.     shrd dword[arr + 4 * edx], esi, 1
  39.     dec edx
  40.     jmp .loop2
  41. .loop2_end:
  42.     shrd dword[arr], ebx, 1; первое число сдвигаем отдельно
  43.     dec cl
  44.     jmp .loop1
  45. .loop1_end:
  46.     shrd dword[arr], ebx, cl; первое число сдвигаем отдельно
  47.     xor ecx, ecx
  48. .printarr:
  49.     cmp ecx, eax
  50.     jge .printarr_end
  51.     PRINT_UDEC 4, [arr + ecx * 4]
  52.     PRINT_CHAR 32
  53.     inc ecx
  54.     jmp .printarr
  55. .printarr_end:
  56.     xor eax, eax
  57.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement