Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .global partition
- // в %ebx адрес начала массива
- // в %esi кол-во элементов
- // в %edi знаковое значение pivot
- // в %edx возвращаем mid (arr[i] <= pivot для любого i < mid и arr[i] >= pivot для любого i >= mid)
- // можем использовать %eax, %ecx, %edx
- partition:
- push %edi
- push %esi
- mov $0, %eax // в %eax i = 0
- movl %esi, %edx // в %edx j
- dec %edx // j = len(arr) - 1
- loop:
- cmp %edx, %eax
- jg fin
- cmp %di, (%ebx, %eax, 2)
- jl elif
- cmp (%ebx, %edx, 2), %di // arr[j] == %ebx(, %esi, 2)
- jle else
- push %esi
- movw (%ebx, %eax, 2), %cx
- movw (%ebx, %edx, 2), %si
- movw %si, (%ebx, %eax, 2)
- movw %cx, (%ebx, %edx, 2) // свопнули
- pop %esi
- inc %eax
- dec %edx
- jmp loop
- elif:
- inc %eax
- jmp loop
- else:
- dec %edx
- jmp loop
- fin:
- movl %eax, %edx
- pop %esi
- pop %edi
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement