home *** CD-ROM | disk | FTP | other *** search
- PAGE 81,128
- TITLE XRSORT - Sort the EXTRN list on name
- SUBTTL V1.0 - May 1986 - Cross Reference Facility
- ;
- ;=============================================================================|
- ; Copyright 1986 - Dan Daetwyler - Springdale, AR 72764 |
- ;=============================================================================|
- .SALL
- ;
- DATA SEGMENT BYTE PUBLIC 'DATA'
- ;
- EXTRN MPUBN:BYTE,MPEND:BYTE,MPCNT:WORD
- ;
- WORK DB 20 DUP (?)
- ;
- SMSG DB 10,'Yes, we are STILL sorting$'
- ;
- DATA ENDS
- ;
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE,DS:DATA,ES:DATA
- ;
- ;==============================================================================
- ; Entry Point XRSORT |
- ;==============================================================================
- ; |
- ; This procedure does a simple "bubble" sort on the name field of the |
- ; external names stack. |
- ; |
- ; Entry conventions: MPCNT contains the number of entries in table. |
- ; |
- ; Returns: None. |
- ; |
- ;==============================================================================
- ;
- EXTRN
- ;
- PUBLIC XRSORT
- ;
- XRSORT PROC NEAR
- MOV SI,OFFSET MPUBN
- MOV BX,MPCNT ;Load count of entries
- OUTER: MOV CX,BX
- MOV DI,SI
- JMP SHORT STEP
- LP: CALL COMP ;Compare entries
- JBE STEP
- CALL SWAP ;Exchange entries
- STEP: ADD DI,16 ;Fixed length entry
- LOOP LP
- ADD SI,16
- DEC BX
- JNZ PCHK
- RET
- PCHK: MOV DX,BX
- AND DX,0FH
- CMP DL,8
- JNE OUTER
- MOV DX,OFFSET SMSG
- MOV AH,9
- INT 21H
- JMP OUTER
- XRSORT ENDP
- ;
- COMP PROC NEAR
- PUSH DI
- PUSH SI
- PUSH CX
- MOV CX,12
- INC SI
- INC DI
- REPE CMPSB
- POP CX
- POP SI
- POP DI
- RET
- COMP ENDP
- ;
- SWAP PROC NEAR
- PUSH CX
- PUSH DI
- PUSH SI
- MOV DI,OFFSET WORK
- MOV CX,16
- REP MOVSB
- POP SI
- POP DI
- PUSH DI
- PUSH SI
- XCHG SI,DI
- MOV CX,16
- REP MOVSB
- POP SI
- POP DI
- PUSH DI
- PUSH SI
- MOV CX,16
- MOV SI,OFFSET WORK
- REP MOVSB
- POP SI
- POP DI
- POP CX
- RET
- SWAP ENDP
- ;
- CODE ENDS
- ;
- END