STACK EQU 1FH
BOTTOM EQU 00H
TOP DATA 3EH
TREE EQU 20H
OUT EQU 21H
TST:
MOV SP,#5FH
MOV DPTR,#DATS
MOV P2,#TREE
MOV R0,#0
MOV R2,#32
CPY:
CLR A
MOVC A,@A+DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R2,CPY
MOV DPH,#OUT
MOV DPL,#0
MOV R2,#0
CLR A
CLEAR:
MOVX @DPTR,A
INC DPTR
DJNZ R2,CLEAR
MOV P2,#TREE
MOV R0,#0
MOV DPH,#OUT
MOV DPL,#0
MOVX A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
JZ STOP
LCALL SETNULL
LCALL MID
DATS:
DB 0BH,41H,42H,43H
DB 44H,45H,46H,00H
DB 47H,48H,49H,00H
DB 4AH,4BH,00H,00H
DB 0,0,0,0
DB 0,0,0,0
DB 0,0,0,0
DB 0,0,0,0
MID:
MOVX A,@R0
JZ MIDEND
MOV A,R0
JB ACC.7,MID1
LCALL DPUSH
CLR C
RLC A
MOV R0,A
LCALL MID
LCALL DPOP
MOV R0,A
MID1:
MOVX A,@R0
MOVX @DPTR,A
INC DPTR
MOV A,R0
JB ACC.7,MIDEND
SETB C
RLC A
MOV R0,A
LCALL MID
MIDEND:
RET
SETNULL:
MOV A,#BOTTOM
MOV TOP,A
RET
DPUSH:
INC TOP
PUSH DPH
PUSH DPL
MOV DPH,#STACK
MOV DPL,TOP
MOVX @DPTR,A
POP DPL
POP DPH
RET
DPOP:
PUSH DPH
PUSH DPL
MOV DPH,#STACK
MOV DPL,TOP
MOVX A,@DPTR
DEC TOP
POP DPL
POP DPH
RET