Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; nasm -g -f elf32 laba.asm -o laba.o
- ; gcc laba.o -g -o laba -m32 -fno-pie -no-pie -lc
- ;
- section .text
- global main
- extern printf
- extern putchar
- extern exit
- main:
- mov eax, 0
- rdseed eax
- rdrand eax
- mov [a], eax
- call bitprint
- mov eax, [a]
- push eax
- push str1
- call printf
- sub esp, 8
- mov ecx, 3
- slp1:
- push ecx
- mov ebx, ecx
- push ebx
- mov ecx, 0
- slp2:
- push ebx
- mov ebx, a
- add ebx, ecx
- push eax
- xor eax, eax
- mov al, byte [ebx]
- mov byte [v1], al
- call cnt0
- mov ebx, eax
- mov edx, a
- add edx, ecx
- inc edx
- xor eax, eax
- mov al, byte [edx]
- mov byte [v2], al
- call cnt0
- mov edx, eax
- cmp ebx, edx
- jl swap
- jmp ns
- swap:
- mov ebx, a
- add ebx, ecx
- mov al, [v2]
- mov byte [ebx], al
- inc ebx
- mov al, [v1]
- mov byte [ebx], al
- ns:
- pop eax
- pop ebx
- inc ecx
- cmp ecx, ebx
- jne slp2
- pop ebx
- pop ecx
- dec ecx
- jnz slp1
- mov eax, [a]
- call bitprint
- mov eax, [a]
- push eax
- push str1
- call printf
- sub esp, 8
- push 0
- call exit
- xor eax, eax
- ret
- cnt0:
- push edx
- push ecx
- push ebx
- mov ecx, 7
- mov ebx, 8
- lp1:
- mov edx, eax
- shr edx, cl
- and edx, 1
- sub ebx, edx
- dec ecx
- cmp ecx, -1
- jne lp1
- mov eax, ebx
- pop ebx
- pop ecx
- pop edx
- ret
- bitprint:
- push ecx
- push ebx
- push edx
- mov ecx, 0
- ploop:
- mov ebx, zer_s
- mov edx, eax
- and edx, 0x80000000
- jz print_char
- mov ebx, one_s
- print_char:
- push ecx
- push eax
- push ebx
- mov eax, 4
- mov edx, 1
- mov ecx, ebx
- mov ebx, 1
- int 0x80
- pop ebx
- pop eax
- shl eax, 1
- pop ecx
- inc ecx
- cmp ecx, 31
- jng ploop
- push 10
- call putchar
- add esp, 4
- pop edx
- pop ebx
- pop ecx
- ret
- section .data
- a dd 0xDEADBEEF
- str1 db '%X', 10, 0
- zer_s db '0', 0
- one_s db '1', 0
- v1 db 0
- v2 db 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement