Advertisement
TimSenin

Untitled

Dec 3rd, 2022
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .global partition
  2. //  в %ebx адрес начала массива
  3. //  в %esi кол-во элементов
  4. //  в %edi знаковое значение pivot
  5. //  в %edx возвращаем mid (arr[i] <= pivot для любого i < mid и arr[i] >= pivot для любого i >= mid)
  6.  
  7. // можем использовать %eax, %ecx, %edx
  8.  
  9. partition:
  10.     push %edi
  11.     push %esi
  12.     mov $0, %eax  // в %eax i = 0
  13.     movl %esi, %edx  // в %edx j
  14.     dec %edx  // j = len(arr) - 1
  15. loop:
  16.     cmp %edx, %eax
  17.     jg fin
  18.     cmp %di, (%ebx, %eax, 2)
  19.     jl elif
  20.     cmp (%ebx, %edx, 2), %di  // arr[j] == %ebx(, %esi, 2)
  21.     jle else
  22.     push %esi
  23.     movw (%ebx, %eax, 2), %cx
  24.     movw (%ebx, %edx, 2), %si
  25.     movw %si, (%ebx, %eax, 2)
  26.     movw %cx, (%ebx, %edx, 2)  // свопнули
  27.     pop %esi
  28.     inc %eax
  29.     dec %edx
  30.     jmp loop
  31.  
  32. elif:
  33.     inc %eax
  34.     jmp loop
  35.  
  36. else:
  37.     dec %edx
  38.     jmp loop
  39. fin:
  40.     movl %eax, %edx
  41.     pop %esi
  42.     pop %edi
  43.     ret
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement