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