Advertisement
TimSenin

Untitled

Dec 3rd, 2022
518
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. partition:
  9.     push %edi
  10.     push %esi
  11.     mov $0, %eax  // в %eax i = 0
  12.     movl %esi, %edx  // в %edx j
  13.     dec %edx  // j = len(arr) - 1
  14.     loop:
  15.     cmp %edx, %eax
  16.     jg fin
  17.     cmp %di, (%ebx, %eax, 2)
  18.     jl elif
  19.     cmp (%ebx, %edx, 2), %di  // arr[j] == %ebx(, %esi, 2)
  20.     jle else
  21.     push %esi
  22.     movw (%ebx, %eax, 2), %cx
  23.     movw (%ebx, %edx, 2), %si
  24.     movw %si, (%ebx, %eax, 2)
  25.     movw %cx, (%ebx, %edx, 2)  // свопнули
  26.     pop %esi
  27.     inc %eax
  28.     dec %edx
  29.     jmp loop
  30.  
  31. elif:
  32.     inc %eax
  33.     jmp loop
  34.  
  35. else:
  36.     dec %edx
  37.     jmp loop
  38. fin:
  39.     movl %eax, %edx
  40.     pop %esi
  41.     pop %edi
  42.     ret
  43.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement