atquick_sort.s
contents ::
  quick.c
  quick_sort.s
  atquick_sort.s
  quick_sort.c
  atquick_sort.c


.text
.globl atquicksort
atquicksort:
         pushl         %ebp
         movl         %esp, %ebp
         pushl         %ebx
         subl         $16, %esp

st:
         movl         16(%ebp), %eax
         cmpl         12(%ebp), %eax
         jg         body
         jmp         done

body:         
         movl         12(%ebp), %ecx
         movl         %ecx, -8(%ebp)
         movl         %eax, -12(%ebp)
         addl         %eax, %ecx
         movl         %ecx, %eax
         sarl         $31, %eax
         shrl         $31, %eax
         leal         (%eax,%ecx), %eax
         sarl         $1, %eax
         imull         $4, %eax, %edx
         movl         8(%ebp), %eax
         movl         (%eax,%edx), %eax
         movl         %eax, -16(%ebp)

com:
         movl         -12(%ebp), %eax
         cmpl         -8(%ebp), %eax
         jl         rec

j:
         movl         -8(%ebp), %eax
         imull         $4, %eax, %edx
         movl         8(%ebp), %eax
         movl         (%eax,%edx), %eax
         cmpl         -16(%ebp), %eax
         jge         not
         leal         -8(%ebp), %eax
         incl         (%eax)
         jmp         j

not:
         nop

i:
         imull         $4, -12(%ebp), %edx
         movl         8(%ebp), %eax
         movl         (%eax,%edx), %eax
         cmpl         -16(%ebp), %eax
         jle         .L13
         leal         -12(%ebp), %eax
         decl         (%eax)
         jmp         i

.L13:
         movl         -8(%ebp), %eax
         cmpl         -12(%ebp), %eax
         jg         rec

swap:         imull         $4, %eax, %edx
         movl         8(%ebp), %eax
         movl         (%eax,%edx), %ecx
         movl         %ecx, -20(%ebp)
         imull         $4, -8(%ebp), %ebx
         imull         $4, -12(%ebp), %edx
         movl         (%eax,%edx), %ecx
         movl         %ecx, (%eax,%ebx)
         movl         -20(%ebp), %ebx
         movl         %ebx, (%eax,%edx)
         leal         -8(%ebp), %eax
         incl         (%eax)
         leal         -12(%ebp), %eax
         decl         (%eax)
         jmp         com

rec:
         subl         $4, %esp
         pushl         -12(%ebp)
         pushl         12(%ebp)
         pushl         8(%ebp)
         call         atquicksort
         addl         $16, %esp
         movl         -8(%ebp), %eax
         movl         %eax, 12(%ebp)
         jmp         st

done:         
         movl         -4(%ebp), %ebx
         leave
         ret


James Little