Advertisement
vadimpirog

Untitled

Nov 17th, 2021
1,765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global _start
  2. section .text
  3. _start:
  4.  
  5. mov ebx, arr ; указатель на начало массива
  6. mov ecx, n-1 ; длинна массива
  7.  
  8. ; Сортируем массив arr методом пузырька
  9. cyc1:
  10.     push ecx
  11.     mov edx, 0 ; флаг
  12.     xor esi, esi
  13.     mov edi, 1
  14.     mov ecx, n-1
  15. cyc2:
  16.     mov al, [ebx+esi] ; al = i-ый элемент массива где 0 < i < n-1
  17.     mov ah, [ebx+edi] ; ah = i+1 элемент массива
  18.     cmp al, ah
  19.     jle _end_if ; если  al > ah то меняем их местами иначе прыгаем на _end_if
  20.     mov [ebx+esi], ah
  21.     mov [ebx+edi], al
  22.     mov edx, 1  ; была перестановка, поэтому изменяем значение флага
  23. _end_if:
  24.     inc esi ; esi + 1
  25.     inc edi ; edi + 1
  26.     loop cyc2
  27.     cmp edx, 0 ; если за полный проход массива небыло не одной перестановки, то выходим из цикла - массив уже отсортирован
  28.     je end_loop
  29.     pop ecx
  30. loop cyc1
  31.  
  32.  
  33. end_loop:
  34. ; Выводим массив
  35. mov esi, arr
  36. mov ecx, n
  37. g1:
  38. push ecx
  39. mov ecx, esi ; указатель на элемент массива
  40. mov eax, 4 ; sys_write
  41. mov ebx, 1  ; stdout
  42. mov edx, 1 ; выводим 1 байт
  43. int 0x80 ; вызов ядра
  44.  
  45. inc esi ; esi + 1
  46. pop ecx
  47. dec ecx ; ecx - 1
  48. jnz g1 ; если ecx != 0 то прыгаем на g1
  49.  
  50. mov eax, 4 ; sys_write
  51. mov ebx, 1  ; stdout
  52. mov edx, 1 ; длинна
  53. mov ecx, _enter ; Выводим символ перевода строки
  54. int 0x80 ; вызов ядра
  55.  
  56. mov eax, 1 ; exit
  57. mov ebx, 0 ; 0-вой код ошибки
  58. int 0x80
  59.  
  60. section .data
  61.     arr db '1','2','9','8','6','4','3','0','7','0' ; массив
  62.     _enter db 10
  63.     n equ 10 ; длинна массива
  64.     symbol db '0'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement