home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / objxref / xrsort.asm < prev    next >
Encoding:
Assembly Source File  |  1986-04-26  |  2.0 KB  |  109 lines

  1.  PAGE    81,128
  2.  TITLE    XRSORT    - Sort the EXTRN list on name
  3.  SUBTTL    V1.0 - May 1986    - Cross    Reference Facility
  4. ;
  5. ;=============================================================================|
  6. ;         Copyright 1986 - Dan Daetwyler - Springdale, AR 72764          |
  7. ;=============================================================================|
  8.     .SALL
  9. ;
  10. DATA    SEGMENT    BYTE PUBLIC 'DATA'
  11. ;
  12.     EXTRN    MPUBN:BYTE,MPEND:BYTE,MPCNT:WORD
  13. ;
  14. WORK    DB    20 DUP (?)
  15. ;
  16. SMSG    DB    10,'Yes, we are STILL sorting$'
  17. ;
  18. DATA    ENDS
  19. ;
  20. CODE    SEGMENT    BYTE PUBLIC 'CODE'
  21.     ASSUME    CS:CODE,DS:DATA,ES:DATA
  22. ;
  23. ;==============================================================================
  24. ; Entry    Point    XRSORT                                  |
  25. ;==============================================================================
  26. ;                                          |
  27. ; This procedure does a    simple "bubble"    sort on    the name field of the          |
  28. ; external names stack.                                  |
  29. ;                                          |
  30. ; Entry    conventions:    MPCNT contains the number of entries in    table.          |
  31. ;                                          |
  32. ; Returns:        None.                              |
  33. ;                                          |
  34. ;==============================================================================
  35. ;
  36.     EXTRN
  37. ;
  38.     PUBLIC    XRSORT
  39. ;
  40. XRSORT    PROC    NEAR
  41.     MOV    SI,OFFSET MPUBN
  42.     MOV    BX,MPCNT        ;Load count of entries
  43. OUTER:    MOV    CX,BX
  44.     MOV    DI,SI
  45.     JMP    SHORT STEP
  46. LP:    CALL    COMP            ;Compare entries
  47.     JBE    STEP
  48.     CALL    SWAP            ;Exchange entries
  49. STEP:    ADD    DI,16            ;Fixed length entry
  50.     LOOP    LP
  51.     ADD    SI,16
  52.     DEC    BX
  53.     JNZ    PCHK
  54.     RET
  55. PCHK:    MOV    DX,BX
  56.     AND    DX,0FH
  57.     CMP    DL,8
  58.     JNE    OUTER
  59.     MOV    DX,OFFSET SMSG
  60.     MOV    AH,9
  61.     INT    21H
  62.     JMP    OUTER
  63. XRSORT    ENDP
  64. ;
  65. COMP    PROC    NEAR
  66.     PUSH    DI
  67.     PUSH    SI
  68.     PUSH    CX
  69.     MOV    CX,12
  70.     INC    SI
  71.     INC    DI
  72.     REPE    CMPSB
  73.     POP    CX
  74.     POP    SI
  75.     POP    DI
  76.     RET
  77. COMP    ENDP
  78. ;
  79. SWAP    PROC    NEAR
  80.     PUSH    CX
  81.     PUSH    DI
  82.     PUSH    SI
  83.     MOV    DI,OFFSET WORK
  84.     MOV    CX,16
  85.     REP    MOVSB
  86.     POP    SI
  87.     POP    DI
  88.     PUSH    DI
  89.     PUSH    SI
  90.     XCHG    SI,DI
  91.     MOV    CX,16
  92.     REP    MOVSB
  93.     POP    SI
  94.     POP    DI
  95.     PUSH    DI
  96.     PUSH    SI
  97.     MOV    CX,16
  98.     MOV    SI,OFFSET WORK
  99.     REP    MOVSB
  100.     POP    SI
  101.     POP    DI
  102.     POP    CX
  103.     RET
  104. SWAP    ENDP
  105. ;
  106. CODE    ENDS
  107. ;
  108.     END
  109.