home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 13 / CDA13.ISO / cdactual / demobin / share / program / Asm / ASM.ZIP / COSORT.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-06-15  |  1.1 KB  |  50 lines

  1.     TITLE    COSORT    - Diskette Contents List - Sort    Entry Stack
  2.     SUBTTL    Version    1.0 - June 1983
  3.     PAGE    81,132
  4. ;
  5. CODE    SEGMENT    PARA PUBLIC 'CODE'
  6.     ASSUME    CS:CODE,DS:CODE
  7. ;
  8.     EXTRN    PNTR:WORD,SRCE:BYTE
  9.     PUBLIC    STKCNT
  10. STKCNT    DW    0            ;Count of entries in stack
  11. ;
  12.     PUBLIC    SORT
  13. SORT    PROC    NEAR
  14.     MOV    STKCNT,CX        ;Save entry count
  15.     DEC    CX
  16.     MOV    SI,OFFSET PNTR        ;Point to first    stack entry pntr
  17. OUTER:    MOV    DI,SI
  18.     ADD    DI,2            ;Set to    "next" pntr
  19.     MOV    DX,CX
  20. INNER:    CALL    COMPAR            ;Compare stack entries
  21.     JBE    LEAVE            ;Ascending sequence, so    no change
  22.     MOV    AX,WORD    PTR [SI]
  23.     XCHG    AX,WORD    PTR [DI]
  24.     MOV    WORD PTR [SI],AX    ;Exchange pointers
  25. LEAVE:    ADD    DI,2
  26.     DEC    DL
  27.     JNZ    INNER            ;Bubble    through    inner loop
  28.     ADD    SI,2
  29.     LOOP    OUTER            ;Bubble    through    outer loop
  30.     RET
  31. SORT    ENDP
  32. ;
  33. COMPAR    PROC    NEAR            ;This compare always forces short
  34.     PUSH    SI            ;strings low, since strings are
  35.     PUSH    DI            ;terminated with nuls.
  36.     PUSH    CX
  37.     MOV    CX,12            ;Max compare
  38.     MOV    SI,WORD    PTR [SI]    ;Point to entry
  39.     MOV    DI,WORD    PTR [DI]    ;Point to other    entry
  40.     REP    CMPSB            ;Compare strings
  41.     POP    CX
  42.     POP    DI
  43.     POP    SI
  44.     RET
  45. COMPAR    ENDP
  46. ;
  47. CODE    ENDS
  48. ;
  49.     END
  50.