merge_sort_s.s |
| .text .globl amerge amerge: pushl %ebp movl %esp, %ebp pushl %esi pushl %ebx subl $48, %esp movl 12(%ebp), %eax cmpl 16(%ebp), %eax jl body jmp .L3 body: movl 16(%ebp), %edx addl %eax, %edx movl %edx, %eax sarl $31, %eax shrl $31, %eax leal (%eax,%edx), %eax sarl $1, %eax movl %eax, -16(%ebp) subl $4, %esp pushl -16(%ebp) pushl 12(%ebp) pushl 8(%ebp) call amerge addl $16, %esp subl $4, %esp pushl 16(%ebp) movl -16(%ebp), %eax incl %eax pushl %eax pushl 8(%ebp) call amerge addl $16, %esp movl 12(%ebp), %eax cmpl -16(%ebp), %eax jne .L4 imull $4,%eax, %esi movl 8(%ebp), %ebx imull $4,16(%ebp), %ecx movl (%ebx,%esi), %eax cmpl (%ebx,%ecx), %eax jle .L3 imull $4,12(%ebp), %edx movl (%ebx,%edx), %ecx movl %ecx, -20(%ebp) imull $4,12(%ebp), %eax imull $4,16(%ebp), %edx movl (%ebx,%edx), %ecx movl %ecx, (%ebx,%eax) imull $4,16(%ebp), %ecx movl -20(%ebp), %edx movl %edx, (%ebx,%ecx) jmp .L3 .L4: movl %esp, -44(%ebp) movl 12(%ebp), %edx movl 16(%ebp), %eax subl %edx, %eax movl %eax, %ecx incl %eax movl %eax, -24(%ebp) imull $4, %ecx, %eax addl $19, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp movl %esp, -48(%ebp) movl 12(%ebp), %eax movl %eax, -28(%ebp) movl -16(%ebp), %eax incl %eax movl %eax, -32(%ebp) movl $0, -20(%ebp) .L7: movl -16(%ebp), %eax incl %eax cmpl %eax,-28(%ebp) jl .L10 jmp .L8 .L10: movl -32(%ebp), %eax cmpl 16(%ebp), %eax jg .L12 imull $4,-28(%ebp), %esi movl 8(%ebp), %ebx imull $4,-32(%ebp), %ecx movl (%ebx,%esi), %eax cmpl (%ebx,%ecx), %eax jle .L12 jmp .L11 .L12: movl -20(%ebp), %eax leal 0(,%eax,4), %ecx imull $4,-28(%ebp), %edx movl 8(%ebp), %eax movl (%eax,%edx), %eax movl -48(%ebp), %edx movl %eax, (%ecx,%edx) leal -28(%ebp), %eax incl (%eax) jmp .L9 .L11: imull $4,-28(%ebp), %esi movl 8(%ebp), %ebx movl -32(%ebp), %eax imull $4,-32(%ebp), %ecx movl (%ebx,%esi), %eax cmpl (%ebx,%ecx), %eax jle .L9 movl -20(%ebp), %eax leal 0(,%eax,4), %ecx imull $4,-32(%ebp), %edx movl (%ebx,%edx), %eax movl -48(%ebp), %ebx movl %eax, (%ecx,%ebx) leal -32(%ebp), %eax incl (%eax) .L9: leal -20(%ebp), %eax incl (%eax) jmp .L7 .L8: .L15: movl -32(%ebp), %eax cmpl 16(%ebp), %eax jle .L17 jmp .L16 .L17: movl -20(%ebp), %eax leal 0(,%eax,4), %ecx imull $4,-32(%ebp), %edx movl 8(%ebp), %ebx movl (%ebx,%edx), %eax movl -48(%ebp), %edx movl %eax, (%ecx,%edx) leal -32(%ebp), %eax incl (%eax) leal -20(%ebp), %eax incl (%eax) jmp .L15 .L16: movl $0, -20(%ebp) .L18: movl -20(%ebp), %eax cmpl -24(%ebp), %eax jl .L21 jmp .L19 .L21: imull $4,12(%ebp), %ecx movl 8(%ebp), %edx movl -20(%ebp), %eax sall $2, %eax movl -48(%ebp), %ebx movl (%eax,%ebx), %eax movl %eax, (%edx,%ecx) leal -20(%ebp), %eax incl (%eax) leal 12(%ebp), %eax incl (%eax) jmp .L18 .L19: movl -44(%ebp), %esp .L3: leal -8(%ebp), %esp popl %ebx popl %esi popl %ebp ret |
James Little |