mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-15 06:30:49 +00:00
438 lines
5.4 KiB
Text
438 lines
5.4 KiB
Text
|
.globl main
|
||
|
.text
|
||
|
.align 16
|
||
|
.type main,@function
|
||
|
main:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
subl $24,%esp
|
||
|
movl $0,-24(%ebp)
|
||
|
movl $0,next
|
||
|
jmp .LC3
|
||
|
.LC2:
|
||
|
leal -24(%ebp),%edi
|
||
|
pushl %edi
|
||
|
leal -20(%ebp),%edi
|
||
|
pushl %edi
|
||
|
call lookup
|
||
|
addl $8,%esp
|
||
|
incl (,%eax)
|
||
|
.LC3:
|
||
|
leal -20(%ebp),%edi
|
||
|
pushl %edi
|
||
|
call getword
|
||
|
addl $4,%esp
|
||
|
cmpl $0,%eax
|
||
|
jne .LC2
|
||
|
pushl -24(%ebp)
|
||
|
call tprint
|
||
|
addl $4,%esp
|
||
|
movl $0,%eax
|
||
|
.LC1:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf5:
|
||
|
.size main,.Lf5-main
|
||
|
.globl err
|
||
|
.align 16
|
||
|
.type err,@function
|
||
|
err:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
pushl 20(%ebp)
|
||
|
pushl $.LC7
|
||
|
call printf
|
||
|
addl $8,%esp
|
||
|
pushl $1
|
||
|
call exit
|
||
|
addl $4,%esp
|
||
|
movl $0,%eax
|
||
|
.LC6:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf8:
|
||
|
.size err,.Lf8-err
|
||
|
.globl getword
|
||
|
.align 16
|
||
|
.type getword,@function
|
||
|
getword:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
subl $8,%esp
|
||
|
.LC10:
|
||
|
.LC11:
|
||
|
call getchar
|
||
|
movl %eax,%edi
|
||
|
movl %edi,-4(%ebp)
|
||
|
cmpl $-1,%edi
|
||
|
je .LC13
|
||
|
pushl -4(%ebp)
|
||
|
call isletter
|
||
|
addl $4,%esp
|
||
|
cmpl $0,%eax
|
||
|
je .LC10
|
||
|
.LC13:
|
||
|
movl 20(%ebp),%edi
|
||
|
movl %edi,-8(%ebp)
|
||
|
jmp .LC17
|
||
|
.LC14:
|
||
|
movl -8(%ebp),%edi
|
||
|
leal 1(%edi),%esi
|
||
|
movl %esi,-8(%ebp)
|
||
|
movl -4(%ebp),%esi
|
||
|
movl %esi,%ebx
|
||
|
movb %bl,(,%edi)
|
||
|
.LC15:
|
||
|
call getchar
|
||
|
movl %eax,-4(%ebp)
|
||
|
.LC17:
|
||
|
pushl -4(%ebp)
|
||
|
call isletter
|
||
|
addl $4,%esp
|
||
|
movl %eax,-4(%ebp)
|
||
|
cmpl $0,%eax
|
||
|
jne .LC14
|
||
|
movl -8(%ebp),%edi
|
||
|
movb $0,(,%edi)
|
||
|
movl -8(%ebp),%edi
|
||
|
movl 20(%ebp),%esi
|
||
|
cmpl %esi,%edi
|
||
|
jbe .LC18
|
||
|
movl $1,%eax
|
||
|
jmp .LC9
|
||
|
.LC18:
|
||
|
movl $0,%eax
|
||
|
.LC9:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf20:
|
||
|
.size getword,.Lf20-getword
|
||
|
.globl isletter
|
||
|
.align 16
|
||
|
.type isletter,@function
|
||
|
isletter:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
movl 20(%ebp),%edi
|
||
|
cmpl $65,%edi
|
||
|
jl .LC22
|
||
|
cmpl $90,%edi
|
||
|
jg .LC22
|
||
|
addl $32,20(%ebp)
|
||
|
.LC22:
|
||
|
movl 20(%ebp),%edi
|
||
|
cmpl $97,%edi
|
||
|
jl .LC24
|
||
|
cmpl $122,%edi
|
||
|
jg .LC24
|
||
|
movl 20(%ebp),%eax
|
||
|
jmp .LC21
|
||
|
.LC24:
|
||
|
movl $0,%eax
|
||
|
.LC21:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf26:
|
||
|
.size isletter,.Lf26-isletter
|
||
|
.globl lookup
|
||
|
.align 16
|
||
|
.type lookup,@function
|
||
|
lookup:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
subl $4,%esp
|
||
|
movl 24(%ebp),%edi
|
||
|
movl (,%edi),%edi
|
||
|
cmpl $0,%edi
|
||
|
je .LC28
|
||
|
movl 24(%ebp),%edi
|
||
|
movl (,%edi),%edi
|
||
|
pushl 12(%edi)
|
||
|
pushl 20(%ebp)
|
||
|
call strcmp
|
||
|
addl $8,%esp
|
||
|
movl %eax,-4(%ebp)
|
||
|
cmpl $0,-4(%ebp)
|
||
|
jge .LC30
|
||
|
movl 24(%ebp),%edi
|
||
|
movl (,%edi),%edi
|
||
|
leal 4(%edi),%edi
|
||
|
pushl %edi
|
||
|
pushl 20(%ebp)
|
||
|
call lookup
|
||
|
addl $8,%esp
|
||
|
movl %eax,%edi
|
||
|
jmp .LC27
|
||
|
.LC30:
|
||
|
cmpl $0,-4(%ebp)
|
||
|
jle .LC32
|
||
|
movl 24(%ebp),%edi
|
||
|
movl (,%edi),%edi
|
||
|
leal 8(%edi),%edi
|
||
|
pushl %edi
|
||
|
pushl 20(%ebp)
|
||
|
call lookup
|
||
|
addl $8,%esp
|
||
|
movl %eax,%edi
|
||
|
jmp .LC27
|
||
|
.LC32:
|
||
|
movl 24(%ebp),%edi
|
||
|
movl (,%edi),%eax
|
||
|
jmp .LC27
|
||
|
.LC28:
|
||
|
cmpl $2000,next
|
||
|
jl .LC34
|
||
|
pushl $.LC36
|
||
|
call err
|
||
|
addl $4,%esp
|
||
|
.LC34:
|
||
|
movl next,%edi
|
||
|
sall $4,%edi
|
||
|
movl $0,words(%edi)
|
||
|
movl next,%edi
|
||
|
sall $4,%edi
|
||
|
movl $0,words+8(%edi)
|
||
|
movl $0,words+4(%edi)
|
||
|
pushl 20(%ebp)
|
||
|
call strlen
|
||
|
addl $4,%esp
|
||
|
leal 1(%eax),%edi
|
||
|
pushl %edi
|
||
|
call malloc
|
||
|
addl $4,%esp
|
||
|
movl next,%esi
|
||
|
sall $4,%esi
|
||
|
movl %eax,words+12(%esi)
|
||
|
movl next,%edi
|
||
|
sall $4,%edi
|
||
|
movl words+12(%edi),%edi
|
||
|
cmpl $0,%edi
|
||
|
jne .LC40
|
||
|
pushl $.LC43
|
||
|
call err
|
||
|
addl $4,%esp
|
||
|
.LC40:
|
||
|
pushl 20(%ebp)
|
||
|
movl next,%edi
|
||
|
sall $4,%edi
|
||
|
pushl words+12(%edi)
|
||
|
call strcpy
|
||
|
addl $8,%esp
|
||
|
movl next,%edi
|
||
|
leal 1(%edi),%esi
|
||
|
movl %esi,next
|
||
|
sall $4,%edi
|
||
|
leal words(%edi),%edi
|
||
|
movl 24(%ebp),%esi
|
||
|
movl %edi,(,%esi)
|
||
|
movl %edi,%eax
|
||
|
.LC27:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf45:
|
||
|
.size lookup,.Lf45-lookup
|
||
|
.globl tprint
|
||
|
.align 16
|
||
|
.type tprint,@function
|
||
|
tprint:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
movl 20(%ebp),%edi
|
||
|
cmpl $0,%edi
|
||
|
je .LC47
|
||
|
movl 20(%ebp),%edi
|
||
|
pushl 4(%edi)
|
||
|
call tprint
|
||
|
addl $4,%esp
|
||
|
movl 20(%ebp),%edi
|
||
|
pushl 12(%edi)
|
||
|
pushl (,%edi)
|
||
|
pushl $.LC49
|
||
|
call printf
|
||
|
addl $12,%esp
|
||
|
movl 20(%ebp),%edi
|
||
|
pushl 8(%edi)
|
||
|
call tprint
|
||
|
addl $4,%esp
|
||
|
.LC47:
|
||
|
movl $0,%eax
|
||
|
.LC46:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf50:
|
||
|
.size tprint,.Lf50-tprint
|
||
|
.globl strcmp
|
||
|
.align 16
|
||
|
.type strcmp,@function
|
||
|
strcmp:
|
||
|
pushl %ebp
|
||
|
pushl %ebx
|
||
|
pushl %esi
|
||
|
pushl %edi
|
||
|
movl %esp,%ebp
|
||
|
jmp .LC53
|
||
|
.LC52:
|
||
|
movl 20(%ebp),%edi
|
||
|
leal 1(%edi),%esi
|
||
|
movl %esi,20(%ebp)
|
||
|
movsbl (,%edi),%edi
|
||
|
cmpl $0,%edi
|
||
|
jne .LC55
|
||
|
movl $0,%eax
|
||
|
jmp .LC51
|
||
|
.LC55:
|
||
|
incl 24(%ebp)
|
||
|
.LC53:
|
||
|
movl 20(%ebp),%edi
|
||
|
movsbl (,%edi),%edi
|
||
|
movl 24(%ebp),%esi
|
||
|
movsbl (,%esi),%esi
|
||
|
cmpl %esi,%edi
|
||
|
je .LC52
|
||
|
movl 20(%ebp),%edi
|
||
|
movsbl (,%edi),%edi
|
||
|
cmpl $0,%edi
|
||
|
jne .LC57
|
||
|
movl $-1,%eax
|
||
|
jmp .LC51
|
||
|
.LC57:
|
||
|
movl 24(%ebp),%edi
|
||
|
movsbl (,%edi),%edi
|
||
|
cmpl $0,%edi
|
||
|
jne .LC59
|
||
|
movl $1,%eax
|
||
|
jmp .LC51
|
||
|
.LC59:
|
||
|
movl 20(%ebp),%edi
|
||
|
movsbl (,%edi),%edi
|
||
|
movl 24(%ebp),%esi
|
||
|
movsbl (,%esi),%esi
|
||
|
movl %edi,%eax
|
||
|
subl %esi,%eax
|
||
|
.LC51:
|
||
|
movl %ebp,%esp
|
||
|
popl %edi
|
||
|
popl %esi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
ret
|
||
|
.Lf61:
|
||
|
.size strcmp,.Lf61-strcmp
|
||
|
.bss
|
||
|
.globl next
|
||
|
.align 4
|
||
|
.type next,@object
|
||
|
.size next,4
|
||
|
.comm next,4
|
||
|
.globl words
|
||
|
.align 4
|
||
|
.type words,@object
|
||
|
.size words,32000
|
||
|
.comm words,32000
|
||
|
.data
|
||
|
.align 1
|
||
|
.LC49:
|
||
|
.byte 37
|
||
|
.byte 100
|
||
|
.byte 9
|
||
|
.byte 37
|
||
|
.byte 115
|
||
|
.byte 10
|
||
|
.byte 0
|
||
|
.align 1
|
||
|
.LC43:
|
||
|
.byte 111
|
||
|
.byte 117
|
||
|
.byte 116
|
||
|
.byte 32
|
||
|
.byte 111
|
||
|
.byte 102
|
||
|
.byte 32
|
||
|
.byte 119
|
||
|
.byte 111
|
||
|
.byte 114
|
||
|
.byte 100
|
||
|
.byte 32
|
||
|
.byte 115
|
||
|
.byte 116
|
||
|
.byte 111
|
||
|
.byte 114
|
||
|
.byte 97
|
||
|
.byte 103
|
||
|
.byte 101
|
||
|
.byte 0
|
||
|
.align 1
|
||
|
.LC36:
|
||
|
.byte 111
|
||
|
.byte 117
|
||
|
.byte 116
|
||
|
.byte 32
|
||
|
.byte 111
|
||
|
.byte 102
|
||
|
.byte 32
|
||
|
.byte 110
|
||
|
.byte 111
|
||
|
.byte 100
|
||
|
.byte 101
|
||
|
.byte 32
|
||
|
.byte 115
|
||
|
.byte 116
|
||
|
.byte 111
|
||
|
.byte 114
|
||
|
.byte 97
|
||
|
.byte 103
|
||
|
.byte 101
|
||
|
.byte 0
|
||
|
.align 1
|
||
|
.LC7:
|
||
|
.byte 63
|
||
|
.byte 32
|
||
|
.byte 37
|
||
|
.byte 115
|
||
|
.byte 10
|
||
|
.byte 0
|
||
|
.text
|
||
|
.ident "LCC: 4.1"
|