atquick_sort.s |
| .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 |