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