Advertisement
dllbridge

BubleSorting FASM 2

May 8th, 2024
837
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.         enter
  52.             push ecx
  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 ecx
  63.         return
  64.     endp
  65.  
  66.     proc print_number
  67.         enter
  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.         return
  84.     endp
  85.  
  86.     proc crlf
  87.         enter
  88.             invoke StdOut, 13
  89.             invoke StdOut, 10
  90.         return
  91.     endp
  92.  
  93. section '.idata' import data readable writeable
  94.     library kernel32, 'kernel32.dll',\
  95.             user32, 'user32.dll'
  96.  
  97.     import kernel32,\
  98.             ExitProcess, 'ExitProcess'
  99.  
  100.     import user32,\
  101.             wsprintf, 'wsprintfA'
  102.  
  103. section '.text' code readable executable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement