157D OPT opt 157D .error 157D CB .exit RETF 157E .sort 157E 8C D8 mov ax,ds 1580 8C C3 mov bx,es 1582 8E C0 mov es,ax 1584 8E DB mov ds,bx 1586 26 80 7E 01 81 cmp byte ptr es:[bp+1],&81 158B 75 F0 jnz error 158D 26 8B 5E 02 mov bx,es:[bp+2] 1591 80 7F FD 01 cmp byte ptr [bx-3],1 1595 75 E6 jnz error 1597 8B 47 FE mov ax,[bx-2] 159A ; 159A 8B D6 mov dx,si 159C D1 E0 shl ax,1 159E D1 E0 shl ax,1 15A0 2E A3 4F 16 mov cs:[end],ax 15A4 ; 15A4 BF FF FF mov di,&FFFF 15A7 D1 EF .rotate shr di,1 15A9 3B C7 cmp ax,di 15AB 72 FA jc rotate 15AD ; 15AD .loop 15AD D1 EF shr di,1 15AF 81 E7 FC FF and di,&FFFC 15B3 74 C8 jz exit 15B5 33 F6 xor si,si 15B7 2E 89 36 51 16 mov cs:[item],si 15BC .cmpare 15BC ; 15BC ;si,di = offsets to elements to compare 15BC ; dx = &FFFF if big model 15BC ;ds|bx = base of array to be sorted 15BC ; 15BC 1E push ds 15BD 8A 09 mov cl,[bx+di] 15BF 3A 08 cmp cl,[bx+si] 15C1 72 02 jc short 15C3 8A 08 mov cl,[bx+si] 15C5 32 ED .short xor ch,ch 15C7 E3 24 jcxz null 15C9 56 push si 15CA 57 push di 15CB 8B 70 02 mov si,[bx+si+2] 15CE 8B 79 02 mov di,[bx+di+2] 15D1 8C C0 mov ax,es 15D3 FC cld 15D4 83 FA FF cmp dx,&FFFF 15D7 75 08 jnz small 15D9 8E DE mov ds,si 15DB 33 F6 xor si,si 15DD 8E C7 mov es,di 15DF 33 FF xor di,di 15E1 F3 A6 .small repz cmpsb 15E3 8E C0 mov es,ax 15E5 5F pop di 15E6 5E pop si 15E7 72 48 jc OK 15E9 75 08 jnz swap 15EB 1F pop ds 15EC 1E push ds 15ED 8A 01 .null mov al,[bx+di] 15EF 3A 00 cmp al,[bx+si] 15F1 73 3E jnc OK 15F3 .swap 15F3 ; 15F3 ;si,di = offsets to elements to swap 15F3 ;es|bp = address of parameter block 15F3 ; dx = &FFFF if big model 15F3 ; ds = es if small model 15F3 ; 15F3 53 push bx 15F4 55 push bp 15F5 26 8A 4E 00 mov cl,es:[bp] 15F9 32 ED xor ch,ch 15FB 45 inc bp 15FC 83 FA FF cmp dx,&FFFF 15FF 45 .swap1 inc bp 1600 26 8B 5E 00 mov bx,es:[bp] 1604 72 07 jc small1 1606 83 C5 02 add bp,2 1609 26 8E 5E 00 mov ds,es:[bp] 160D 8B 00 .small1 mov ax,[bx+si] 160F 87 01 xchg ax,[bx+di] 1611 89 00 mov [bx+si],ax 1613 8B 40 02 mov ax,[bx+si+2] 1616 87 41 02 xchg ax,[bx+di+2] 1619 89 40 02 mov [bx+si+2],ax 161C 45 inc bp 161D 45 inc bp 161E E2 DF loop swap1 1620 5D pop bp 1621 5B pop bx 1622 ; 1622 8B C7 mov ax,di 1624 2B C6 sub ax,si 1626 3B F0 cmp si,ax 1628 72 07 jc OK 162A 8B FE mov di,si 162C 2B F0 sub si,ax 162E .cmpare1 162E 1F pop ds 162F EB 8B jmps cmpare 1631 ; 1631 .OK 1631 2B FE sub di,si 1633 2E 8B 36 51 16 mov si,cs:[item] 1638 83 C6 04 add si,4 163B 2E 89 36 51 16 mov cs:[item],si 1640 03 FE add di,si 1642 2E 3B 3E 4F 16 cmp di,cs:[end] 1647 72 E5 jc cmpare1 1649 2B FE sub di,si 164B 1F pop ds 164C E9 5E FF jmp loop 164F ; 164F 00 00 .end DW 0 1651 00 00 .item DW 0