Write an ALP to simulate COPY command using PSP.
Write an ALP to simulate COPY command using PSP.
DISP MACRO MSG
LEA DX,MSG
MOV AH,09H
INT 21H
ENDM
.MODEL SMALL
.DATA
MSG1 DB 10,13,"INVALID FILENAME (NO 1) $"
MSG2 DB 10,13,"INVALID FILENAME (NO 2) $"
MSG3 DB 10,13,"ERROR IN OPENING FILE (NO 1) $"
MSG4 DB 10,13,"ERROR IN WRITING (IE: FILE (NO 2)) $"
MSG5 DB 10,13,"FILE ALREADY EXIST SO WRITING CONTENTS AT END OF FILE $"
MSG6 DB 10,13,"FILE 2 IS NOT PRESENT SO CREATING IT N WRITING DATA IN IT$"
MSG7 DB 10,13," TASK COMPLETED SUCCESSFULLY$"
ARR1 DB 25H DUP(0)
ARR2 DB 25H DUP(0)
ARR3 DB 100H DUP(0)
CNT DW ?
FH1 DW ?
FH2 DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,62H ;STARTING ADDRESS OF PSP
INT 21H
MOV ES,BX
MOV DI,0082H ;STARTING OFFSET OF PSP
LEA SI,ARR1
MOV BH,' '
MOV CX,0000H
CALL CHKVALID ;CHK NAME IS VALID OR NOT
CMP CH,08H
JBE N1
DISP MSG1
JMP EXIT
N1: CMP CL,03H
JE N2
DISP MSG1
JMP EXIT
N2: MOV CX,0000H
MOV BH,0DH
LEA SI,ARR2
INC DI
CALL CHKVALID
CMP CH,08H
JBE N3
DISP MSG2
JMP EXIT
N3: CMP CL,03H
JE N4
DISP MSG2
JMP EXIT
;********OPEN FILE 1*************
N4: MOV AH,3DH
MOV AL,02H
LEA DX,ARR1
INT 21H
MOV FH1,AX
JNC N5
DISP MSG3
JMP EXIT
;******CALC SIZE OF FILE 1 N KEEP IT IN CNT*****
N5: MOV AH,42H
MOV AL,02H
MOV BX,FH1
MOV CX,0000H
MOV DX,0000H
INT 21H
MOV CNT,AX
;******SET FP ON STARTING OF FILE*********
MOV AH,42H
MOV AL,00H
MOV BX,FH1
MOV CX,0000H
MOV DX,0000H
INT 21H
;****READ CONTENTS OF FILE 1 N KEEP IT IN ARR3****
MOV AH,3FH
MOV BX,FH1
MOV CX,CNT
LEA DX,ARR3
INT 21H
JC EXIT
;******CHK 2ND FILE ALREADY PRESENT OR NOT******
MOV AH,3DH
MOV AL,02H
LEA DX,ARR2
INT 21H
MOV FH2,AX
JC N6
DISP MSG5
;** SET FP AT END OF FILE**
MOV AH,42H
MOV AL,02H
MOV BX,FH2
MOV CX,0000H
MOV DX,0000H
INT 21H
JMP N7
;*****CREATE FILE2 IF NOT PRESENT*********
N6: MOV AH,3CH
LEA DX,ARR2
MOV CX,0000H
INT 21H
JC EXIT
MOV FH2,AX
DISP MSG6
;****WRITING CONTENTS IN FILE 2******
N7: MOV AH,40H
MOV BX,FH2
MOV CX,CNT
LEA DX,ARR3
INT 21H
JC EXIT
DISP MSG7
EXIT: MOV AH,4CH
INT 21H
;********PROCEDURE CHECK VALID****************
CHKVALID PROC NEAR
C0: MOV AH,ES:[DI]
CMP AH,'.'
JNE C1
JMP C2
C1: MOV [SI],AH
INC CH
INC SI
INC DI
JMP C0
C2: MOV [SI],AH
INC SI
INC DI
C3: MOV AH,ES:[DI]
CMP AH,BH
JE R
MOV [SI],AH
INC CL
INC SI
INC DI
JMP C3
R: RET
ENDP
END
OUTPUT
C:\TASM>TASM P2
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International
Assembling file: P2.ASM
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 472k
C:\TASM>TLINK P2
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\TASM>P2 P.TXT A.TXT
FILE ALREADY EXIST SO WRITING CONTENTS AT END OF FILE
TASK COMPLETED SUCCESSFULLY
C:\TASM>
0 comments:
Post a Comment