aboutsummaryrefslogtreecommitdiffstats
path: root/lcc/x86/win32/tst/sort.sbk
diff options
context:
space:
mode:
Diffstat (limited to 'lcc/x86/win32/tst/sort.sbk')
-rwxr-xr-xlcc/x86/win32/tst/sort.sbk324
1 files changed, 324 insertions, 0 deletions
diff --git a/lcc/x86/win32/tst/sort.sbk b/lcc/x86/win32/tst/sort.sbk
new file mode 100755
index 0000000..cdedc1c
--- /dev/null
+++ b/lcc/x86/win32/tst/sort.sbk
@@ -0,0 +1,324 @@
+.486
+.model flat
+extrn __fltused:near
+extrn __ftol:near
+_DATA segment
+public _in
+align 4
+_in label byte
+dd 10
+dd 32
+dd -1
+dd 567
+dd 3
+dd 18
+dd 1
+dd -51
+dd 789
+dd 0
+public _main
+_DATA ends
+_TEXT segment
+_main:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+sub esp,4
+push 10
+lea edi,(_in)
+push edi
+call _sort
+add esp,8
+mov dword ptr (-4)[ebp],0
+jmp L5
+L2:
+mov edi,dword ptr (-4)[ebp]
+mov edi,dword ptr (_in)[edi*4]
+push edi
+call _putd
+add esp,4
+push 10
+call _putchar
+add esp,4
+L3:
+inc dword ptr (-4)[ebp]
+L5:
+mov edi,dword ptr (-4)[ebp]
+cmp edi,10
+jb L2
+mov eax,0
+L1:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+public _putd
+_putd:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+cmp dword ptr (20)[ebp],0
+jge L7
+push 45
+call _putchar
+add esp,4
+neg dword ptr (20)[ebp]
+L7:
+mov eax,dword ptr (20)[ebp]
+mov edi,10
+cdq
+idiv edi
+cmp eax,0
+je L9
+mov eax,dword ptr (20)[ebp]
+mov edi,10
+cdq
+idiv edi
+push eax
+call _putd
+add esp,4
+L9:
+mov eax,dword ptr (20)[ebp]
+mov edi,10
+cdq
+idiv edi
+lea edi,(48)[edx]
+push edi
+call _putchar
+add esp,4
+mov eax,0
+L6:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+public _sort
+_sort:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+mov edi,dword ptr (24)[ebp]
+sub edi,1
+mov dword ptr (24)[ebp],edi
+push edi
+push 0
+mov edi,dword ptr (20)[ebp]
+mov dword ptr (_xx),edi
+push edi
+call _quick
+add esp,12
+mov eax,0
+L11:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+public _quick
+_quick:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+sub esp,4
+mov edi,dword ptr (28)[ebp]
+cmp dword ptr (24)[ebp],edi
+jl L13
+jmp L12
+L13:
+mov edi,dword ptr (28)[ebp]
+push edi
+mov edi,dword ptr (24)[ebp]
+push edi
+mov edi,dword ptr (20)[ebp]
+push edi
+call _partition
+add esp,12
+mov dword ptr (-4)[ebp],eax
+mov edi,dword ptr (-4)[ebp]
+sub edi,1
+push edi
+mov edi,dword ptr (24)[ebp]
+push edi
+mov edi,dword ptr (20)[ebp]
+push edi
+call _quick
+add esp,12
+mov edi,dword ptr (28)[ebp]
+push edi
+mov edi,dword ptr (-4)[ebp]
+lea edi,(1)[edi]
+push edi
+mov edi,dword ptr (20)[ebp]
+push edi
+call _quick
+add esp,12
+mov eax,0
+L12:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+public _partition
+_partition:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+sub esp,8
+inc dword ptr (28)[ebp]
+mov edi,dword ptr (24)[ebp]
+mov dword ptr (-8)[ebp],edi
+mov edi,dword ptr (-8)[ebp]
+mov esi,dword ptr (20)[ebp]
+mov edi,dword ptr [esi][edi*4]
+mov dword ptr (-4)[ebp],edi
+jmp L17
+L16:
+inc dword ptr (24)[ebp]
+jmp L20
+L19:
+inc dword ptr (24)[ebp]
+L20:
+mov edi,dword ptr (24)[ebp]
+mov esi,dword ptr (20)[ebp]
+mov ebx,dword ptr (-4)[ebp]
+cmp dword ptr [esi][edi*4],ebx
+jl L19
+dec dword ptr (28)[ebp]
+jmp L23
+L22:
+dec dword ptr (28)[ebp]
+L23:
+mov edi,dword ptr (28)[ebp]
+mov esi,dword ptr (20)[ebp]
+mov ebx,dword ptr (-4)[ebp]
+cmp dword ptr [esi][edi*4],ebx
+jg L22
+mov edi,dword ptr (28)[ebp]
+cmp dword ptr (24)[ebp],edi
+jge L25
+mov edi,dword ptr (20)[ebp]
+mov esi,dword ptr (28)[ebp]
+lea esi,[edi][esi*4]
+push esi
+mov esi,dword ptr (24)[ebp]
+lea edi,[edi][esi*4]
+push edi
+call _exchange
+add esp,8
+L25:
+L17:
+mov edi,dword ptr (28)[ebp]
+cmp dword ptr (24)[ebp],edi
+jl L16
+mov edi,dword ptr (20)[ebp]
+mov esi,dword ptr (28)[ebp]
+lea esi,[edi][esi*4]
+push esi
+mov esi,dword ptr (-8)[ebp]
+lea edi,[edi][esi*4]
+push edi
+call _exchange
+add esp,8
+mov eax,dword ptr (28)[ebp]
+L15:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+public _exchange
+_exchange:
+push ebx
+push esi
+push edi
+push ebp
+mov ebp,esp
+sub esp,4
+mov edi,dword ptr (_xx)
+mov esi,4
+mov ebx,dword ptr (24)[ebp]
+sub ebx,edi
+mov eax,ebx
+cdq
+idiv esi
+push eax
+mov ebx,dword ptr (20)[ebp]
+sub ebx,edi
+mov eax,ebx
+cdq
+idiv esi
+push eax
+lea edi,(L28)
+push edi
+call _printf
+add esp,12
+mov edi,dword ptr (20)[ebp]
+mov esi,dword ptr [edi]
+mov dword ptr (-4)[ebp],esi
+mov esi,dword ptr (24)[ebp]
+mov esi,dword ptr [esi]
+mov dword ptr [edi],esi
+mov edi,dword ptr (24)[ebp]
+mov esi,dword ptr (-4)[ebp]
+mov dword ptr [edi],esi
+mov eax,0
+L27:
+mov esp,ebp
+pop ebp
+pop edi
+pop esi
+pop ebx
+ret
+_TEXT ends
+extrn _printf:near
+_TEXT segment
+_TEXT ends
+extrn _putchar:near
+_TEXT segment
+_TEXT ends
+_DATA segment
+public _xx
+align 4
+_xx label byte
+db 4 dup (0)
+_DATA ends
+_TEXT segment
+align 1
+L28 label byte
+db 101
+db 120
+db 99
+db 104
+db 97
+db 110
+db 103
+db 101
+db 40
+db 37
+db 100
+db 44
+db 37
+db 100
+db 41
+db 10
+db 0
+_TEXT ends
+end