1460 OPT opt 1460 .error 1460 CB .exit RETF 1461 .sort 1461 8C D8 mov ax,ds 1463 8C C3 mov bx,es 1465 8E C0 mov es,ax 1467 8E DB mov ds,bx 1469 26 80 7E 01 04 cmp byte ptr es:[bp+1],4 146E 75 F0 jnz error 1470 26 8B 5E 02 mov bx,es:[bp+2] 1474 80 7F FD 01 cmp byte ptr [bx-3],1 1478 75 E6 jnz error 147A 8B 47 FE mov ax,[bx-2] 147D ; 147D 8B D6 mov dx,si 147F D1 E0 shl ax,1 1481 D1 E0 shl ax,1 1483 2E A3 16 15 mov cs:[end],ax 1487 ; 1487 BF FF FF mov di,&FFFF 148A D1 EF .rotate shr di,1 148C 3B C7 cmp ax,di 148E 72 FA jc rotate 1490 ; 1490 .loop 1490 D1 EF shr di,1 1492 81 E7 FC FF and di,&FFFC 1496 74 C8 jz exit 1498 33 F6 xor si,si 149A 2E 89 36 18 15 mov cs:[item],si 149F .cmpare 149F ; 149F ;si,di = offsets to elements to compare 149F ; dx = &FFFF if big model 149F ;ds|bx = base of array to be sorted 149F ; 149F 8A 41 03 mov al,[bx+di+3] 14A2 32 40 03 xor al,[bx+si+3] 14A5 8A 41 03 mov al,[bx+di+3] 14A8 D0 D0 rcl al,1 14AA 78 0C js different 14AC 8B 41 02 mov ax,[bx+di+2] 14AF 3B 40 02 cmp ax,[bx+si+2] 14B2 75 04 jnz different 14B4 8B 01 mov ax,[bx+di] 14B6 3B 00 cmp ax,[bx+si] 14B8 .different 14B8 73 3F jnc OK 14BA .swap 14BA ; 14BA ;si,di = offsets to elements to swap 14BA ;es|bp = address of parameter block 14BA ; dx = &FFFF if big model 14BA ; ds = es if small model 14BA ; 14BA 1E push ds 14BB 53 push bx 14BC 55 push bp 14BD 26 8A 4E 00 mov cl,es:[bp] 14C1 32 ED xor ch,ch 14C3 45 inc bp 14C4 83 FA FF cmp dx,&FFFF 14C7 45 .swap1 inc bp 14C8 26 8B 5E 00 mov bx,es:[bp] 14CC 72 07 jc small1 14CE 83 C5 02 add bp,2 14D1 26 8E 5E 00 mov ds,es:[bp] 14D5 8B 00 .small1 mov ax,[bx+si] 14D7 87 01 xchg ax,[bx+di] 14D9 89 00 mov [bx+si],ax 14DB 8B 40 02 mov ax,[bx+si+2] 14DE 87 41 02 xchg ax,[bx+di+2] 14E1 89 40 02 mov [bx+si+2],ax 14E4 45 inc bp 14E5 45 inc bp 14E6 E2 DF loop swap1 14E8 5D pop bp 14E9 5B pop bx 14EA 1F pop ds 14EB ; 14EB 8B C7 mov ax,di 14ED 2B C6 sub ax,si 14EF 3B F0 cmp si,ax 14F1 72 06 jc OK 14F3 8B FE mov di,si 14F5 2B F0 sub si,ax 14F7 .cmpare1 14F7 EB A6 jmps cmpare 14F9 ; 14F9 .OK 14F9 2B FE sub di,si 14FB 2E 8B 36 18 15 mov si,cs:[item] 1500 83 C6 04 add si,4 1503 2E 89 36 18 15 mov cs:[item],si 1508 03 FE add di,si 150A 2E 3B 3E 16 15 cmp di,cs:[end] 150F 72 E6 jc cmpare1 1511 2B FE sub di,si 1513 E9 7A FF jmp loop 1516 ; 1516 00 00 .end DW 0 1518 00 00 .item DW 0