Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- section .text
- global main
- extern printf
- extern putchar ; импорт C функций
- extern exit
- main:
- rdseed eax
- rdrand eax
- mov [A], eax ; генерируем случайное число
- rdrand eax
- mov ebx, 1
- shl ebx, 31 ; на всякий случай сделаем случайное число положительным, обнулив первый бит
- xor eax, ebx
- mov ebx, 4 ; генерируем случайный сдвиг (случайный int по модулю 4)
- mov edx, 0
- div ebx
- mov [n], edx
- mov eax, [A]
- mov ebx, [n]
- push ebx
- push eax ; выводим число в формате Hex и сдвиг
- push str1
- call printf
- mov eax, [A]
- call print_binary_number ; выводим число в двоичном виде
- mov ecx, 31
- push ebx
- push edx
- xor ebx, ebx
- xor edx, edx
- lp1:
- push ecx
- push ebx
- mov edx, [A]
- mov ebx, 1
- shl ebx, cl
- and edx, ebx
- and ecx, 1
- jnz oddl
- mov ebx, [even]
- or ebx, edx ; в зависимости от честности счетчика меняем либо odd, либо even
- mov [even], ebx
- jmp next
- oddl:
- mov ebx, [odd]
- or ebx, edx
- mov [odd], ebx
- next:
- pop ebx
- pop ecx
- dec ecx
- cmp ecx, 0
- jge lp1
- pop edx
- pop ebx
- mov eax, [even]
- mov ecx, [n]
- ror eax, cl
- mov [even], eax ; сдвигаем odd и even
- mov eax, [odd]
- rol eax, cl
- mov [odd], eax
- mov eax, [even]
- mov ebx, [odd]
- or eax, ebx
- mov [A], eax ; склеиваем финальное число и выводим в консоль
- push eax
- push str2
- call printf
- mov eax, [A]
- call print_binary_number
- push 0
- call exit
- ret
- print_binary_number: ; бинарный вывод числа
- push ecx
- push ebx
- push edx
- mov ecx, 0
- print_loop:
- mov ebx, 48
- mov edx, eax
- and edx, 0x80000000
- jz print_char
- inc ebx
- print_char:
- push ecx
- push eax
- push ebx
- call putchar
- add esp, 4
- pop eax
- shl eax, 1
- pop ecx
- inc ecx
- cmp ecx, 31
- jng print_loop
- push newline
- call printf
- add esp, 4
- pop edx
- pop ebx
- pop ecx
- ret
- section .data
- A dd 0xDEADBEEF
- str1 db '%X moved by %d', 10, 0
- str2 db '%X', 10, 0
- newline db 10,0
- even dd 0
- odd dd 0
- n dw 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement