quick_sort.s |
| .text .globl aquicksort aquicksort: pushl %ebp movl %esp, %ebp pushl %ebx if: movl 16(%ebp), %eax cmpl 12(%ebp), %eax jle greater movl 12(%ebp), %ecx movl %ecx, -8(%ebp) movl %eax, -12(%ebp) addl %ecx, %eax movl %eax, %edx sarl $31, %eax shrl $31, %eax leal (%eax,%edx), %eax sarl $1, %eax imull $4, %eax, %edx movl 8(%ebp), %eax movl (%eax,%edx), %eax movl %eax, -16(%ebp) compare: movl -12(%ebp), %eax cmpl -8(%ebp), %eax jl qs j: imull $4,-8(%ebp), %edx movl 8(%ebp), %eax movl (%eax,%edx), %eax cmpl -16(%ebp), %eax jge nothin leal -8(%ebp), %eax incl (%eax) jmp j nothin: nop i: imull $4,-12(%ebp), %edx movl 8(%ebp), %eax movl (%eax,%edx), %eax cmpl -16(%ebp), %eax jle .L11 leal -12(%ebp), %eax decl (%eax) jmp i .L11: movl -8(%ebp), %eax cmpl -12(%ebp), %eax jg qs .L13: 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 compare qs: subl $20, %esp pushl -12(%ebp) pushl 12(%ebp) pushl 8(%ebp) call aquicksort addl $12, %esp subl $4, %esp pushl 16(%ebp) pushl -8(%ebp) pushl 8(%ebp) call aquicksort addl $16, %esp greater: movl -4(%ebp), %ebx leave ret |
James Little |