Advertisement
dllbridge

Buble 3

May 8th, 2024
917
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. format PE console
  2. entry start
  3.  
  4. include 'win32a.inc'
  5.  
  6. section '.data' data readable writeable
  7.     array dd 5, 2, 9, 3, 1  ; пример массива для сортировки
  8.     array_size equ ($ - array) / 4
  9.     buffer db 'Sorted array: ', 0
  10.  
  11. section '.code' code readable executable
  12.     start:
  13.         mov ecx, array_size
  14.  
  15.         outer_loop:
  16.             mov edx, 0
  17.             mov ebx, ecx
  18.             dec ebx
  19.  
  20.             inner_loop:
  21.                 mov eax, [array + edx * 4]
  22.                 cmp eax, [array + edx * 4 + 4]
  23.                 jbe not_swap
  24.  
  25.                 mov eax, [array + edx * 4]
  26.                 mov ebx, [array + edx * 4 + 4]
  27.                 mov [array + edx * 4], ebx
  28.                 mov [array + edx * 4 + 4], eax
  29.  
  30.                 not_swap:
  31.                     inc edx
  32.                     loop inner_loop
  33.  
  34.             loop outer_loop
  35.  
  36.         mov ecx, array_size
  37.         mov edx, buffer
  38.         call print_string
  39.  
  40.         print_loop:
  41.             mov eax, [array + ecx * 4 - 4]
  42.             call print_number
  43.             dec ecx
  44.             jnz print_loop
  45.  
  46.         call crlf
  47.  
  48.         call [ExitProcess]
  49.  
  50.     proc print_string
  51.         push ecx
  52.         push edx
  53.         mov ecx, -1
  54.         .repeat
  55.             inc ecx
  56.             mov al, [edx + ecx]
  57.             cmp al, 0
  58.             jz .done
  59.             invoke StdOut, al
  60.             jmp .repeat
  61.         .done:
  62.         pop edx
  63.         pop ecx
  64.         ret
  65.     endp
  66.  
  67.     proc print_number
  68.         push eax
  69.         push ebx
  70.         mov ebx, 10
  71.         mov edx, 0
  72.         div ebx
  73.         cmp eax, 0
  74.         jz .done
  75.         push edx
  76.         call print_number
  77.         pop edx
  78.     .done:
  79.         add dl, '0'
  80.         invoke StdOut, dl
  81.         pop ebx
  82.         pop eax
  83.         ret
  84.     endp
  85.  
  86.     proc crlf
  87.         invoke StdOut, 13
  88.         invoke StdOut, 10
  89.         ret
  90.     endp
  91.  
  92. section '.idata' import data readable writeable
  93.     library kernel32, 'kernel32.dll',\
  94.             user32, 'user32.dll'
  95.  
  96.     import kernel32,\
  97.             ExitProcess, 'ExitProcess'
  98.  
  99.     import user32,\
  100.             wsprintf, 'wsprintfA'
  101.  
  102. section '.text' code readable executable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement