diff options
Diffstat (limited to 'lcc/x86/win32/tst/wf1.sbk')
-rwxr-xr-x | lcc/x86/win32/tst/wf1.sbk | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/lcc/x86/win32/tst/wf1.sbk b/lcc/x86/win32/tst/wf1.sbk new file mode 100755 index 0000000..df5688a --- /dev/null +++ b/lcc/x86/win32/tst/wf1.sbk @@ -0,0 +1,451 @@ +.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
|