INCLUDE IO.ASM DATA SEGMENT X DW 8 DUP (NIL) Y DB 8 DUP (?) DATA ENDS STACK SEGMENT STACK DB 128 DUP (?) STACK ENDS NODE STRUC E1 DB ? E2 DB ? E3 DB ? E4 DB ? E5 DB ? E6 DB ? E7 DB ? E8 DB ? KOL DB ? NEXT DW ? NODE ENDS HEAP_SIZE EQU 100 NIL EQU 0 HEAP SEGMENT HEAP_PTR DW ? DB 11*HEAP_SIZE DUP (?) HEAP ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK, ES:HEAP ;----------------------------------- INIT_HEAP PROC FAR PUSH SI PUSH BX PUSH CX MOV CX,HEAP MOV ES,CX MOV CX, HEAP_SIZE MOV BX,NIL MOV SI,11*HEAP_SIZE-2 INPO:MOV ES:[SI].NEXT,BX MOV BX,SI SUB SI,11 LOOP INPO MOV ES:HEAP_PTR,BX POP CX POP BX POP SI RET INIT_HEAP ENDP DISPOSE PROC FAR PUSH ES:HEAP_PTR POP ES:[DI].NEXT MOV ES:HEAP_PTR,DI RET DISPOSE ENDP NEW PROC FAR MOV DI,ES:HEAP_PTR CMP DI,NIL JE EMPTY_HEAP PUSH ES:[DI].NEXT POP ES:HEAP_PTR RET EMPTY_HEAP: LDS DX,CS:AERR OUTSTR FINISH AERR DD ERR ERR DB 'KU!','$' NEW ENDP ;----------------------------------- VSOV PROC PUSH BP MOV BP,SP PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI MOV BX,[BP+4] MOV SI,[BP+6] DEC BX ADD BX,BX ;NEWLINE ;OUTINT BX ;PUSH BX XOR BP,BP MOV CX,BX MOV AX,X[BX] MOV BX,AX AGAI:;OUTCH 'G' CMP BX,NIL JE NASHLI INC BP MOV BX,ES:[BX].NEXT ;OUTCH 'P' JMP AGAI NASHLI: CALL NEW MOV BX,0 MOV AH,[SI][BX] MOV ES:[DI].E1,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E2,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E3,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E4,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E5,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E6,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E7,AH INC BX MOV AH,[SI][BX] MOV ES:[DI].E8,AH MOV ES:[DI].KOL,1 MOV ES:[DI].NEXT,NIL CMP BP,0 JNE LV ; OUTCH 'B' ;POP BX MOV BX,CX MOV X[BX],DI JMP FINO LV: MOV BX,CX MOV BX,X[BX] CU: CMP ES:[BX].NEXT,NIL JE NAI MOV BX,ES:[BX].NEXT JMP CU NAI: MOV ES:[BX].NEXT,DI FINO: POP SI POP DI POP DX POP CX POP BX POP AX POP BP RET 4 VSOV ENDP VVOD PROC PUSH BP PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI SNOVA: XOR BX,BX MOV CX,8 MC:MOV Y[BX],' ' INC BX LOOP MC XOR BX,BX VVV: INCH AH CMP AH,',' JE ZAP CMP AH,'.' JE ZAP CMP BX,8 JE VVV MOV Y[BX],AH INC BX JMP VVV ZAP: CMP BX,0 JE VVV ;OUTINT BX MOV CX,BX MOV BP,0 PROFF: CMP Y[BP],'A' JB PBRED CMP Y[BP],'Z' JA PBRED LOOP PROFF ;V BX- KOLVO MOV DX,BX DEC BX ADD BX,BX CMP X[BX],NIL JNE NEPUSTOI MOV DI,OFFSET Y PUSH DI PUSH DX CALL VSOV JMP VPIH NEPUSTOI: MOV BX,X[BX] MOV SI,0 SRAVNENI: MOV CH,Y CMP CH,ES:[BX].E1 JA BOL JB MEN MOV BP,1 MOV CH,Y[BP] CMP CH,ES:[BX].E2 JA BOL JB MEN MOV BP,2 MOV CH,Y[BP] CMP CH,ES:[BX].E3 JA BOL JB MEN MOV BP,3 MOV CH,Y[BP] CMP CH,ES:[BX].E4 JA BOL JB MEN MOV BP,4 MOV CH,Y[BP] CMP CH,ES:[BX].E5 JA BOL JB MEN MOV BP,5 MOV CH,Y[BP] CMP CH,ES:[BX].E6 JA BOL JB MEN MOV BP,6 MOV CH,Y[BP] CMP CH,ES:[BX].E7 JA BOL JB MEN MOV BP,7 MOV CH,Y[BP] CMP CH,ES:[BX].E8 JA BOL JB MEN RAVNO: INC ES:[BX].KOL JMP VPIH BOL: MOV SI,BX;DODEL NEXT=0 CMP ES:[BX].NEXT,NIL JE KONKON MOV BX,ES:[BX].NEXT JMP SRAVNENI KONKON: MOV DI,OFFSET Y PUSH DI PUSH DX CALL VSOV JMP VPIH MEN: CMP SI,NIL JNE KOPE MOV BX,DX DEC BX ADD BX,BX MOV SI,X[BX] MOV X[BX],NIL MOV DI,OFFSET Y PUSH DI PUSH DX CALL VSOV MOV BX,X[BX] MOV ES:[BX].NEXT,SI JMP VPIH KOPE: MOV ES:[SI].NEXT,NIL MOV DI,OFFSET Y PUSH DI PUSH DX CALL VSOV MOV SI,ES:[SI].NEXT MOV ES:[SI].NEXT,BX JMP VPIH PBRED: LDS DX,CS:AERRR OUTSTR FINISH AERRR DD ERRR ERRR DB 'NEPRAVILNYI VVOD!','$' VPIH: CMP AH,'.' JNE SNOVA POP SI POP DI POP DX POP CX POP BX POP AX POP BP RET VVOD ENDP MEGAVYVOD PROC PUSH BP MOV BP,SP PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI MOV BX,[BP+4] DEC BX ADD BX,BX MOV BX,X[BX] CMP BX,NIL JE VSEROVNO VV: OUTCH ES:[BX].E1 OUTCH ES:[BX].E2 OUTCH ES:[BX].E3 OUTCH ES:[BX].E4 OUTCH ES:[BX].E5 OUTCH ES:[BX].E6 OUTCH ES:[BX].E7 OUTCH ES:[BX].E8 MOV AL,ES:[BX].KOL CBW OUTINT AX NEWLINE CMP ES:[BX].NEXT,NIL JE VSEROVNO MOV BX,ES:[BX].NEXT JMP VV VSEROVNO: POP SI POP DI POP DX POP CX POP BX POP AX POP BP RET 2 MEGAVYVOD ENDP START: MOV AX, DATA MOV DS, AX CALL INIT_HEAP OUTCH 'S' NEWLINE CALL VVOD MOV BX,2 MOV BX,X[BX] MOV BX,1 PUSH BX CALL MEGAVYVOD MOV BX,2 PUSH BX CALL MEGAVYVOD MOV BX,3 PUSH BX CALL MEGAVYVOD MOV BX,4 PUSH BX CALL MEGAVYVOD MOV BX,5 PUSH BX CALL MEGAVYVOD MOV BX,6 PUSH BX CALL MEGAVYVOD MOV BX,7 PUSH BX CALL MEGAVYVOD MOV BX,8 PUSH BX CALL MEGAVYVOD FINISH CODE ENDS END START