Advertisement
vgsamsonov

labainfa2nasm

Dec 25th, 2021
2,196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; nasm -g -f elf32 laba.asm -o laba.o
  2. ; gcc laba.o -g -o laba -m32 -fno-pie -no-pie -lc
  3. ;
  4.  
  5. section .text
  6. global main
  7.  
  8. extern printf
  9. extern putchar
  10. extern exit
  11.  
  12. main:
  13.     mov eax, 0
  14.     rdseed eax
  15.     rdrand eax
  16.     mov [a], eax
  17.     call bitprint
  18.    
  19.     mov eax, [a]
  20.     push eax
  21.     push str1
  22.     call printf
  23.     sub esp, 8
  24.    
  25.     mov ecx, 3
  26.     slp1:
  27.         push ecx
  28.         mov ebx, ecx
  29.         push ebx
  30.         mov ecx, 0
  31.         slp2:
  32.             push ebx
  33.             mov ebx, a
  34.             add ebx, ecx
  35.             push eax
  36.             xor eax, eax
  37.             mov al, byte [ebx]
  38.             mov byte [v1], al
  39.             call cnt0
  40.             mov ebx, eax
  41.            
  42.             mov edx, a
  43.             add edx, ecx
  44.             inc edx
  45.             xor eax, eax
  46.             mov al, byte [edx]
  47.             mov byte [v2], al
  48.             call cnt0
  49.             mov edx, eax
  50.            
  51.             cmp ebx, edx
  52.             jl swap
  53.             jmp ns
  54.            
  55.             swap:
  56.                 mov ebx, a
  57.                 add ebx, ecx
  58.                 mov al, [v2]
  59.                 mov byte [ebx], al
  60.                 inc ebx
  61.                 mov al, [v1]
  62.                 mov byte [ebx], al
  63.                
  64.            
  65.             ns:
  66.            
  67.             pop eax
  68.             pop ebx
  69.            
  70.         inc ecx
  71.         cmp ecx, ebx
  72.         jne slp2
  73.        
  74.         pop ebx
  75.         pop ecx
  76.         dec ecx
  77.         jnz slp1
  78.    
  79.    
  80.    
  81.     mov eax, [a]
  82.     call bitprint
  83.    
  84.     mov eax, [a]
  85.     push eax
  86.     push str1
  87.     call printf
  88.     sub esp, 8
  89.     push 0
  90.     call exit
  91.    
  92.     xor eax, eax
  93.     ret
  94.    
  95. cnt0:
  96.     push edx
  97.     push ecx
  98.     push ebx
  99.     mov ecx, 7
  100.     mov ebx, 8
  101.     lp1:
  102.         mov edx, eax
  103.         shr edx, cl
  104.         and edx, 1
  105.         sub ebx, edx
  106.         dec ecx
  107.         cmp ecx, -1
  108.         jne lp1
  109.     mov eax, ebx
  110.     pop ebx
  111.     pop ecx
  112.     pop edx
  113.     ret
  114.    
  115.    
  116. bitprint:
  117.     push ecx
  118.     push ebx
  119.     push edx
  120.     mov ecx, 0
  121.     ploop:
  122.         mov ebx, zer_s
  123.         mov edx, eax
  124.         and edx, 0x80000000
  125.         jz print_char
  126.         mov ebx, one_s
  127.         print_char:
  128.             push ecx
  129.             push eax
  130.             push ebx
  131.            
  132.             mov eax, 4
  133.             mov edx, 1
  134.             mov ecx, ebx
  135.             mov ebx, 1
  136.             int 0x80
  137.            
  138.             pop ebx
  139.             pop eax
  140.             shl eax, 1
  141.             pop ecx
  142.         inc ecx
  143.         cmp ecx, 31
  144.         jng ploop
  145.    
  146.     push 10
  147.     call putchar
  148.     add esp, 4
  149.    
  150.     pop edx
  151.     pop ebx
  152.     pop ecx
  153.    
  154.     ret
  155. section .data
  156. a dd 0xDEADBEEF
  157. str1 db '%X', 10, 0
  158.  
  159. zer_s db '0', 0
  160. one_s db '1', 0
  161. v1 db 0
  162. v2 db 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement