Idiv bx
mov word ptr [bp-6],dx
;
; if ((j-i)>5)
;
mov ax,word ptr [bp-2]
sub ax,di
cmp ax,5
jg @@2
jmp @2@422
@@2:
;
; if (((x[mid]<pivot) && (x[mid]>x[i])) || ((x[mid]>pivot) && (x[mid]<x[i])))
;
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jae short @2@198
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
mov bx,di
mov cl,2
shl bx,cl
fcomp dword ptr [bx+si]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
ja short @2@254
@2@198:
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jbe short @2@282
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
mov bx,di
mov cl,2
shl bx,cl
fcomp dword ptr [bx+si]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jae short @2@282
@2@254:
;
; swap(x[mid],x[j]);
;
mov ax,word ptr [bp-2]
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
mov ax,word ptr [bp-6]
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
call near ptr @swap$qrft1
pop cx
pop cx
jmp @2@422
@2@282:
;
; else
; if (((x[i]<x[mid]) && (x[i]>pivot)) || ((x[i]>x[mid]) && (x[i]<pivot)))
;
mov bx,di
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fcomp dword ptr [bx+si]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jae short @2@338
mov bx,di
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
ja short @2@394
@2@338:
mov bx,di
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
mov bx,word ptr [bp-6]
mov cl,2
shl bx,cl
fcomp dword ptr [bx+si]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jbe short @2@422
mov bx,di
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jae short @2@422
@2@394:
;
; swap(x[i],x[j]);
;
mov ax,word ptr [bp-2]
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
mov ax,di
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
call near ptr @swap$qrft1
pop cx
pop cx
@2@422:
;
; pivot = x[j];
;
mov bx,word ptr [bp-2]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fstp dword ptr [bp-10]
fwait
jmp short @2@702
@2@450:
jmp short @2@506
@2@478:
;
; while (i<j)
; {
; while (x[i]<pivot)
; { i = i+1; }
;
mov ax,di
inc ax
mov di,ax
@2@506:
mov bx,di
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
jb short @2@478
jmp short @2@562
@2@562:
;
; j = j-1;
; while ((i<j) && (pivot<x[j]))
; { j = j-1; }
;
mov ax,word ptr [bp-2]
dec ax
mov word ptr [bp-2],ax
cmp di,word ptr [bp-2]
jge short @2@646
mov bx,word ptr [bp-2]
mov cl,2
shl bx,cl
fld dword ptr [bx+si]
fcomp dword ptr [bp-10]
fstsw word ptr [bp-12]
fwait
mov ax,word ptr [bp-12]
sahf
ja short @2@562
@2@646:
;
; if (i<j)
;
cmp di,word ptr [bp-2]
jge short @2@702
;
; { swap(x[i],x[j]); }
;
mov ax,word ptr [bp-2]
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
mov ax,di
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
call near ptr @swap$qrft1
pop cx
pop cx
@2@702:
cmp di,word ptr [bp-2]
jl short @2@450
;
; } // while
; j = right[sp]; // pivot to i
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-92]
add bx,ax
mov ax,word ptr [bx]
mov word ptr [bp-2],ax
;
; swap(x[i],x[j]);
;
mov ax,word ptr [bp-2]
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
mov ax,di
mov cl,2
shl ax,cl
mov dx,si
add dx,ax
push dx
call near ptr @swap$qrft1
pop cx
pop cx
;
; if (i-left[sp]>=right[sp]-i)
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-52]
add bx,ax
mov ax,di
sub ax,word ptr [bx]
mov bx,word ptr [bp-4]
shl bx,1
lea dx,word ptr [bp-92]
add bx,dx
mov dx,word ptr [bx]
sub dx,di
cmp ax,dx
jl short @2@786
;
; { // put shorter part first
; left[sp+1] = left[sp];
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-52]
add bx,ax
mov ax,word ptr [bx]
mov bx,word ptr [bp-4]
shl bx,1
lea dx,word ptr [bp-50]
add bx,dx
mov word ptr [bx],ax
;
; right[sp+1] = i-1;
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-90]
add bx,ax
mov ax,di
dec ax
mov word ptr [bx],ax
;
; left[sp] = i+1;
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-52]
add bx,ax
mov ax,di
inc ax
jmp short @2@814
@2@786:
;
; }
; else
; {
; left[sp+1] = i+1;
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-50]
add bx,ax
mov ax,di
inc ax
mov word ptr [bx],ax
;
; right[sp+1] = right[sp];
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-92]
add bx,ax
mov ax,word ptr [bx]
mov bx,word ptr [bp-4]
shl bx,1
lea dx,word ptr [bp-90]
add bx,dx
mov word ptr [bx],ax
;
; right[sp] = i-1;
;
mov bx,word ptr [bp-4]
shl bx,1
lea ax,word ptr [bp-92]
add bx,ax
mov ax,di
dec ax
@2@814:
mov word ptr [bx],ax
;
; }
; sp = sp+1; // push stack
;
?debug L 71
mov ax,word ptr [bp-4]
inc ax
@2@870:
mov word ptr [bp-4],ax
@2@898:
cmp word ptr [bp-4],0
jle @@3
jmp @2@58
@@3:
;
; } // if
; } // while
;
;
; }
;
pop di
pop si
mov sp,bp
pop bp
ret
;
; int main()
;
assume cs:_TEXT
_main proc near
push bp
mov bp,sp
sub sp,36
?debug B
;
; {
; float array[] = {0, 1, 3, 2, 12, 5, 9, 7, 14};
;
lea ax,word ptr [bp-36]
push ss
push ax
mov ax,offset DGROUP:d@w+0
push ds
push ax
mov cx,36
call near ptr N_SCOPY@
;
;
; quicksort(array, 8);
;
mov ax,8
push ax
lea ax,word ptr [bp-36]
push ax
call near ptr @quicksort$qpfi
pop cx
pop cx
;
;
; return 0;
;