DATS EQU 20H
N EQU 5DH
QUEUE EQU 1FH
F DATA 3CH
R DATA 3DH
TST:
MOV DPTR,#LIST
MOV P2,#DATS
MOV R0,#0
MOV R2,#N
CPY:
CLR A
MOVC A,@A+DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R2,CPY
LCALL SETNULL
MOV A,#0
LCALL DATAIN
MOV A,#N
DEC A
LCALL DATAIN
LCALL QSORT
QSORT:
MOV A,F
XRL A,R
JNZ QUICK0
QUICKE:
RET
QUICK0:
LCALL DATAOUT
MOV R2,A
MOV R0,A
LCALL DATAOUT
MOV R3,A
MOV R1,A
MOV P2,#DATS
MOVX A,@R0
MOV B,A
SETB F0
QUICK1:
MOV A,R0
XRL A,R1
JZ QUICK6
JNB F0,QUICK4
MOVX A,@R1
CLR C
SUBB A,B
JC QUICK2
DEC R1
LJMP QUICK1
QUICK2:
MOVX A,@R1
MOVX @R0,A
INC R0
CLR F0
LJMP QUICK1
QUICK4:
MOVX A,@R0
CLR C
SUBB A,B
JNC QUICK5
INC R0
LJMP QUICK1
QUICK5:
MOVX A,@R0
MOVX @R1,A
DEC R1
SETB F0
LJMP QUICK1
QUICK6:
MOV A,B
MOVX @R0,A
MOV A,R0
JZ QUICK7
DEC A
SETB C
SUBB A,R2
JC QUICK7
MOV A,R2
LCALL DATAIN
MOV A,R0
DEC A
LCALL DATAIN
QUICK7:
MOV A,R3
DEC A
SETB C
SUBB A,R1
JC QUICK8
MOV A,R1
INC A
LCALL DATAIN
MOV A,R3
LCALL DATAIN
QUICK8:
LJMP QSORT
SETNULL:
MOV A,#0FFH
MOV F,A
MOV R,A
RET
DATAIN:
INC R
MOV DPL,R
MOV DPH,#QUEUE
MOVX @DPTR,A
RET
DATAOUT:
INC F
MOV DPL,F
MOV DPH,#QUEUE
MOVX A,@DPTR
RET