452 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			452 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
.486
 | 
						|
.model flat
 | 
						|
extrn __fltused:near
 | 
						|
extrn __ftol:near
 | 
						|
public _main
 | 
						|
_TEXT segment
 | 
						|
_main:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
sub esp,24
 | 
						|
mov dword ptr (-24)[ebp],0
 | 
						|
mov dword ptr (_next),0
 | 
						|
jmp L3
 | 
						|
L2:
 | 
						|
lea edi,(-24)[ebp]
 | 
						|
push edi
 | 
						|
lea edi,(-20)[ebp]
 | 
						|
push edi
 | 
						|
call _lookup
 | 
						|
add esp,8
 | 
						|
inc dword ptr [eax]
 | 
						|
L3:
 | 
						|
lea edi,(-20)[ebp]
 | 
						|
push edi
 | 
						|
call _getword
 | 
						|
add esp,4
 | 
						|
cmp eax,0
 | 
						|
jne L2
 | 
						|
mov edi,dword ptr (-24)[ebp]
 | 
						|
push edi
 | 
						|
call _tprint
 | 
						|
add esp,4
 | 
						|
mov eax,0
 | 
						|
L1:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _err
 | 
						|
_err:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
lea edi,(L6)
 | 
						|
push edi
 | 
						|
call _printf
 | 
						|
add esp,8
 | 
						|
push 1
 | 
						|
call _exit
 | 
						|
add esp,4
 | 
						|
mov eax,0
 | 
						|
L5:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _getword
 | 
						|
_getword:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
sub esp,8
 | 
						|
L8:
 | 
						|
L9:
 | 
						|
call _getchar
 | 
						|
add esp,0
 | 
						|
mov dword ptr (-4)[ebp],eax
 | 
						|
cmp eax,-1
 | 
						|
je L11
 | 
						|
mov edi,dword ptr (-4)[ebp]
 | 
						|
push edi
 | 
						|
call _isletter
 | 
						|
add esp,4
 | 
						|
cmp eax,0
 | 
						|
je L8
 | 
						|
L11:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
mov dword ptr (-8)[ebp],edi
 | 
						|
jmp L15
 | 
						|
L12:
 | 
						|
mov edi,dword ptr (-8)[ebp]
 | 
						|
lea esi,(1)[edi]
 | 
						|
mov dword ptr (-8)[ebp],esi
 | 
						|
mov esi,dword ptr (-4)[ebp]
 | 
						|
mov ebx,esi
 | 
						|
mov byte ptr [edi],bl
 | 
						|
L13:
 | 
						|
call _getchar
 | 
						|
add esp,0
 | 
						|
mov dword ptr (-4)[ebp],eax
 | 
						|
L15:
 | 
						|
mov edi,dword ptr (-4)[ebp]
 | 
						|
push edi
 | 
						|
call _isletter
 | 
						|
add esp,4
 | 
						|
mov dword ptr (-4)[ebp],eax
 | 
						|
cmp eax,0
 | 
						|
jne L12
 | 
						|
mov edi,dword ptr (-8)[ebp]
 | 
						|
mov byte ptr [edi],0
 | 
						|
mov edi,dword ptr (-8)[ebp]
 | 
						|
mov esi,dword ptr (20)[ebp]
 | 
						|
cmp edi,esi
 | 
						|
jbe L16
 | 
						|
mov eax,1
 | 
						|
jmp L7
 | 
						|
L16:
 | 
						|
mov eax,0
 | 
						|
L7:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _isletter
 | 
						|
_isletter:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
cmp edi,65
 | 
						|
jl L19
 | 
						|
cmp edi,90
 | 
						|
jg L19
 | 
						|
add dword ptr (20)[ebp],32
 | 
						|
L19:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
cmp edi,97
 | 
						|
jl L21
 | 
						|
cmp edi,122
 | 
						|
jg L21
 | 
						|
mov eax,dword ptr (20)[ebp]
 | 
						|
jmp L18
 | 
						|
L21:
 | 
						|
mov eax,0
 | 
						|
L18:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _lookup
 | 
						|
_lookup:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
sub esp,4
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
mov edi,dword ptr [edi]
 | 
						|
cmp edi,0
 | 
						|
je L24
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
mov edi,dword ptr [edi]
 | 
						|
mov edi,dword ptr (12)[edi]
 | 
						|
push edi
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
call _strcmp
 | 
						|
add esp,8
 | 
						|
mov dword ptr (-4)[ebp],eax
 | 
						|
cmp dword ptr (-4)[ebp],0
 | 
						|
jge L26
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
mov edi,dword ptr [edi]
 | 
						|
lea edi,(4)[edi]
 | 
						|
push edi
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
call _lookup
 | 
						|
add esp,8
 | 
						|
mov edi,eax
 | 
						|
jmp L23
 | 
						|
L26:
 | 
						|
cmp dword ptr (-4)[ebp],0
 | 
						|
jle L28
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
mov edi,dword ptr [edi]
 | 
						|
lea edi,(8)[edi]
 | 
						|
push edi
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
call _lookup
 | 
						|
add esp,8
 | 
						|
mov edi,eax
 | 
						|
jmp L23
 | 
						|
L28:
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
mov eax,dword ptr [edi]
 | 
						|
jmp L23
 | 
						|
L24:
 | 
						|
cmp dword ptr (_next),2000
 | 
						|
jl L30
 | 
						|
lea edi,(L32)
 | 
						|
push edi
 | 
						|
call _err
 | 
						|
add esp,4
 | 
						|
L30:
 | 
						|
mov edi,dword ptr (_next)
 | 
						|
sal edi,4
 | 
						|
mov dword ptr (_words)[edi],0
 | 
						|
mov edi,dword ptr (_next)
 | 
						|
sal edi,4
 | 
						|
mov dword ptr (_words+8)[edi],0
 | 
						|
mov dword ptr (_words+4)[edi],0
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
call _strlen
 | 
						|
add esp,4
 | 
						|
lea edi,(1)[eax]
 | 
						|
push edi
 | 
						|
call _malloc
 | 
						|
add esp,4
 | 
						|
mov esi,dword ptr (_next)
 | 
						|
sal esi,4
 | 
						|
mov dword ptr (_words+12)[esi],eax
 | 
						|
mov edi,dword ptr (_next)
 | 
						|
sal edi,4
 | 
						|
mov edi,dword ptr (_words+12)[edi]
 | 
						|
cmp edi,0
 | 
						|
jne L36
 | 
						|
lea edi,(L39)
 | 
						|
push edi
 | 
						|
call _err
 | 
						|
add esp,4
 | 
						|
L36:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
push edi
 | 
						|
mov edi,dword ptr (_next)
 | 
						|
sal edi,4
 | 
						|
mov edi,dword ptr (_words+12)[edi]
 | 
						|
push edi
 | 
						|
call _strcpy
 | 
						|
add esp,8
 | 
						|
mov edi,dword ptr (_next)
 | 
						|
lea esi,(1)[edi]
 | 
						|
mov dword ptr (_next),esi
 | 
						|
sal edi,4
 | 
						|
lea edi,(_words)[edi]
 | 
						|
mov esi,dword ptr (24)[ebp]
 | 
						|
mov dword ptr [esi],edi
 | 
						|
mov eax,edi
 | 
						|
L23:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _tprint
 | 
						|
_tprint:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
cmp edi,0
 | 
						|
je L42
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
mov edi,dword ptr (4)[edi]
 | 
						|
push edi
 | 
						|
call _tprint
 | 
						|
add esp,4
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
mov esi,dword ptr (12)[edi]
 | 
						|
push esi
 | 
						|
mov edi,dword ptr [edi]
 | 
						|
push edi
 | 
						|
lea edi,(L44)
 | 
						|
push edi
 | 
						|
call _printf
 | 
						|
add esp,12
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
mov edi,dword ptr (8)[edi]
 | 
						|
push edi
 | 
						|
call _tprint
 | 
						|
add esp,4
 | 
						|
L42:
 | 
						|
mov eax,0
 | 
						|
L41:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
public _strcmp
 | 
						|
_strcmp:
 | 
						|
push ebx
 | 
						|
push esi
 | 
						|
push edi
 | 
						|
push ebp
 | 
						|
mov ebp,esp
 | 
						|
jmp L47
 | 
						|
L46:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
lea esi,(1)[edi]
 | 
						|
mov dword ptr (20)[ebp],esi
 | 
						|
movsx edi,byte ptr [edi]
 | 
						|
cmp edi,0
 | 
						|
jne L49
 | 
						|
mov eax,0
 | 
						|
jmp L45
 | 
						|
L49:
 | 
						|
inc dword ptr (24)[ebp]
 | 
						|
L47:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
movsx edi,byte ptr [edi]
 | 
						|
mov esi,dword ptr (24)[ebp]
 | 
						|
movsx esi,byte ptr [esi]
 | 
						|
cmp edi,esi
 | 
						|
je L46
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
movsx edi,byte ptr [edi]
 | 
						|
cmp edi,0
 | 
						|
jne L51
 | 
						|
mov eax,-1
 | 
						|
jmp L45
 | 
						|
L51:
 | 
						|
mov edi,dword ptr (24)[ebp]
 | 
						|
movsx edi,byte ptr [edi]
 | 
						|
cmp edi,0
 | 
						|
jne L53
 | 
						|
mov eax,1
 | 
						|
jmp L45
 | 
						|
L53:
 | 
						|
mov edi,dword ptr (20)[ebp]
 | 
						|
movsx edi,byte ptr [edi]
 | 
						|
mov esi,dword ptr (24)[ebp]
 | 
						|
movsx esi,byte ptr [esi]
 | 
						|
mov eax,edi
 | 
						|
sub eax,esi
 | 
						|
L45:
 | 
						|
mov esp,ebp
 | 
						|
pop ebp
 | 
						|
pop edi
 | 
						|
pop esi
 | 
						|
pop ebx
 | 
						|
ret
 | 
						|
_TEXT ends
 | 
						|
extrn _strcpy:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
extrn _strlen:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
extrn _malloc:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
extrn _getchar:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
extrn _exit:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
extrn _printf:near
 | 
						|
_TEXT segment
 | 
						|
_TEXT ends
 | 
						|
_DATA segment
 | 
						|
public _next
 | 
						|
align 4
 | 
						|
_next label byte
 | 
						|
db 4 dup (0)
 | 
						|
public _words
 | 
						|
align 4
 | 
						|
_words label byte
 | 
						|
db 32000 dup (0)
 | 
						|
_DATA ends
 | 
						|
_TEXT segment
 | 
						|
align 1
 | 
						|
L44 label byte
 | 
						|
db 37
 | 
						|
db 100
 | 
						|
db 9
 | 
						|
db 37
 | 
						|
db 115
 | 
						|
db 10
 | 
						|
db 0
 | 
						|
align 1
 | 
						|
L39 label byte
 | 
						|
db 111
 | 
						|
db 117
 | 
						|
db 116
 | 
						|
db 32
 | 
						|
db 111
 | 
						|
db 102
 | 
						|
db 32
 | 
						|
db 119
 | 
						|
db 111
 | 
						|
db 114
 | 
						|
db 100
 | 
						|
db 32
 | 
						|
db 115
 | 
						|
db 116
 | 
						|
db 111
 | 
						|
db 114
 | 
						|
db 97
 | 
						|
db 103
 | 
						|
db 101
 | 
						|
db 0
 | 
						|
align 1
 | 
						|
L32 label byte
 | 
						|
db 111
 | 
						|
db 117
 | 
						|
db 116
 | 
						|
db 32
 | 
						|
db 111
 | 
						|
db 102
 | 
						|
db 32
 | 
						|
db 110
 | 
						|
db 111
 | 
						|
db 100
 | 
						|
db 101
 | 
						|
db 32
 | 
						|
db 115
 | 
						|
db 116
 | 
						|
db 111
 | 
						|
db 114
 | 
						|
db 97
 | 
						|
db 103
 | 
						|
db 101
 | 
						|
db 0
 | 
						|
align 1
 | 
						|
L6 label byte
 | 
						|
db 63
 | 
						|
db 32
 | 
						|
db 37
 | 
						|
db 115
 | 
						|
db 10
 | 
						|
db 0
 | 
						|
_TEXT ends
 | 
						|
end
 |