lilium-voyager/lcc/x86/linux/tst/sort.sbk

330 lines
4.1 KiB
Text

.data
.globl in
.align 4
.type in,@object
in:
.long 10
.long 32
.long -1
.long 567
.long 3
.long 18
.long 1
.long -51
.long 789
.long 0
.size in,40
.globl main
.text
.align 16
.type main,@function
main:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
subl $4,%esp
pushl $10
pushl $in
call sort
addl $8,%esp
movl $0,-4(%ebp)
jmp .LC5
.LC2:
movl -4(%ebp),%edi
pushl in(,%edi,4)
call putd
addl $4,%esp
pushl $10
call putchar
addl $4,%esp
.LC3:
incl -4(%ebp)
.LC5:
movl -4(%ebp),%edi
cmpl $10,%edi
jb .LC2
movl $0,%eax
.LC1:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf6:
.size main,.Lf6-main
.globl putd
.align 16
.type putd,@function
putd:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
cmpl $0,20(%ebp)
jge .LC8
pushl $45
call putchar
addl $4,%esp
negl 20(%ebp)
.LC8:
movl 20(%ebp),%eax
movl $10,%ecx
cdq
idivl %ecx
cmpl $0,%eax
je .LC10
movl 20(%ebp),%eax
movl $10,%ecx
cdq
idivl %ecx
pushl %eax
call putd
addl $4,%esp
.LC10:
movl 20(%ebp),%eax
movl $10,%ecx
cdq
idivl %ecx
leal 48(%edx),%edi
pushl %edi
call putchar
addl $4,%esp
movl $0,%eax
.LC7:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf12:
.size putd,.Lf12-putd
.globl sort
.align 16
.type sort,@function
sort:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
movl 24(%ebp),%edi
subl $1,%edi
movl %edi,24(%ebp)
pushl %edi
pushl $0
movl 20(%ebp),%edi
movl %edi,xx
pushl %edi
call quick
addl $12,%esp
movl $0,%eax
.LC13:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf14:
.size sort,.Lf14-sort
.globl quick
.align 16
.type quick,@function
quick:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
subl $4,%esp
movl 28(%ebp),%edi
cmpl %edi,24(%ebp)
jl .LC16
jmp .LC15
.LC16:
pushl 28(%ebp)
pushl 24(%ebp)
pushl 20(%ebp)
call partition
addl $12,%esp
movl %eax,-4(%ebp)
movl -4(%ebp),%edi
subl $1,%edi
pushl %edi
pushl 24(%ebp)
pushl 20(%ebp)
call quick
addl $12,%esp
pushl 28(%ebp)
movl -4(%ebp),%edi
leal 1(%edi),%edi
pushl %edi
pushl 20(%ebp)
call quick
addl $12,%esp
movl $0,%eax
.LC15:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf18:
.size quick,.Lf18-quick
.globl partition
.align 16
.type partition,@function
partition:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
subl $8,%esp
incl 28(%ebp)
movl 24(%ebp),%edi
movl %edi,-8(%ebp)
movl -8(%ebp),%edi
movl 20(%ebp),%esi
movl (%esi,%edi,4),%edi
movl %edi,-4(%ebp)
jmp .LC21
.LC20:
incl 24(%ebp)
jmp .LC24
.LC23:
incl 24(%ebp)
.LC24:
movl 24(%ebp),%edi
movl 20(%ebp),%esi
movl -4(%ebp),%ebx
cmpl %ebx,(%esi,%edi,4)
jl .LC23
decl 28(%ebp)
jmp .LC27
.LC26:
decl 28(%ebp)
.LC27:
movl 28(%ebp),%edi
movl 20(%ebp),%esi
movl -4(%ebp),%ebx
cmpl %ebx,(%esi,%edi,4)
jg .LC26
movl 28(%ebp),%edi
cmpl %edi,24(%ebp)
jge .LC29
movl 20(%ebp),%edi
movl 28(%ebp),%esi
leal (%edi,%esi,4),%esi
pushl %esi
movl 24(%ebp),%esi
leal (%edi,%esi,4),%edi
pushl %edi
call exchange
addl $8,%esp
.LC29:
.LC21:
movl 28(%ebp),%edi
cmpl %edi,24(%ebp)
jl .LC20
movl 20(%ebp),%edi
movl 28(%ebp),%esi
leal (%edi,%esi,4),%esi
pushl %esi
movl -8(%ebp),%esi
leal (%edi,%esi,4),%edi
pushl %edi
call exchange
addl $8,%esp
movl 28(%ebp),%eax
.LC19:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf31:
.size partition,.Lf31-partition
.globl exchange
.align 16
.type exchange,@function
exchange:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl %esp,%ebp
subl $4,%esp
movl xx,%edi
movl $4,%esi
movl 24(%ebp),%ebx
subl %edi,%ebx
movl %ebx,%eax
movl %esi,%ecx
cdq
idivl %ecx
pushl %eax
movl 20(%ebp),%ebx
subl %edi,%ebx
movl %ebx,%eax
movl %esi,%ecx
cdq
idivl %ecx
pushl %eax
pushl $.LC33
call printf
addl $12,%esp
movl 20(%ebp),%edi
movl (,%edi),%esi
movl %esi,-4(%ebp)
movl 24(%ebp),%esi
movl (,%esi),%esi
movl %esi,(,%edi)
movl 24(%ebp),%edi
movl -4(%ebp),%esi
movl %esi,(,%edi)
movl $0,%eax
.LC32:
movl %ebp,%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.Lf34:
.size exchange,.Lf34-exchange
.bss
.globl xx
.align 4
.type xx,@object
.size xx,4
.comm xx,4
.data
.align 1
.LC33:
.byte 101
.byte 120
.byte 99
.byte 104
.byte 97
.byte 110
.byte 103
.byte 101
.byte 40
.byte 37
.byte 100
.byte 44
.byte 37
.byte 100
.byte 41
.byte 10
.byte 0
.text
.ident "LCC: 4.1"