;----------------------------------------------------------------------------------------
; ASSIGNMENT NO : 2
; TITLE : WRITE ALP TO SIMULATE COPY COMMAND USING PSP.
;----------------------------------------------------------------------------------------
PRINT MACRO MSG
MOV AH,09H
LEA DX,MSG
INT 21H
ENDM
DATA SEGMENT
SPACE DB " $"
NEWL DB 10,13, "$"
FNAME1 DB 100 DUP(?)
FNAME2 DB 100 DUP(?)
FP1 DW ?
FP2 DW ?
BUFFER DB 1024 DUP(\'$\')
CNT DW ?
SUCCESS DB 10,13, "FILE OPERATION SUCCESSFUL$"
FAIL DB 10,13, "FILE OPERATION FAILED$"
CONTENTS DB 10,13, "CONTENTS OF THE FILE ARE$"
DATA ENDS
ASSUME CS:CODE ,DS:DATA
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AH,62H ;LOAD BASE ADDRESS OF PSP
INT 21H
MOV ES,BX ;BX HAS BASE ADDRESS LOADED IN ES
MOV SI,80H ;OFFSET OF FILE NAME
MOV CH,ES:[SI] ;LENGTH OF FILE NAME
DEC CH
MOV SI,82H ;OFFSET OF FILE CONTENTS
LEA DI,FNAME1
L1: ;LOOP TO MOVE FILE NAME IN FNAME
MOV BL,ES:[SI]
MOV [DI],BL
INC SI
INC DI
DEC CH
CMP BL," "
JNE L1
LEA DI,FNAME2
L2: ;LOOP TO MOVE FILE NAME IN FNAME
MOV BL,ES:[SI]
MOV [DI],BL
INC SI
INC DI
DEC CH
JNZ L2
LEA DX,FNAME1
MOV AH,3DH ;INTERRUPT FOR OPENING FILE
MOV AL,00H ;READ MODE
INT 21H
MOV FP1,AX ;AFTER OPENING AX HAS UNIQUE FILE HANDLE
JNC L3 ;IF SUCCESSFUL CARRY FLAG IS RESET
PRINT FAIL
JMP END1
L3:
PRINT NEWL
PRINT SUCCESS
MOV BX,FP1
MOV AH,3FH ;FOR READING CONTENTS
;COUNT OF ELEMENTS TO BE READ
LEA DX,BUFFER ;DX HAS ADDRESS OF DESTINATION
INT 21H
MOV CNT,AX ;CNT CONTAINS THE COUNT OF BYTES TO BE COPIED
JNC L4
PRINT NEWL
PRINT FAIL
JMP END1
L4:
PRINT NEWL
; PRINT SUCCESS
PRINT NEWL
PRINT CONTENTS
PRINT NEWL
LEA SI,BUFFER
MOV CX,CNT
A1: ;LOOP TP DISPLAY CONTENTS OF BUFFER
MOV AH,02H
MOV DL,[SI]
INT 21H
INC SI
DEC CX
JNZ A1
MOV AH,3EH ;INTERRUPT FOR CLOSING THE FILE
MOV BX,FP1
INT 21H
MOV AH,3CH ;INTERRUPT FOR CREATING A NEW FILE
MOV DX,SEG FNAME2
MOV DS,DX ;DS MUST HAVE BASE ADDRESS OF FILE NAME 2
LEA DX,FNAME2 ;DX MUST HAVE THE OFFSET ADDRESS OF FILE NAME 2
MOV CX,00H ;CX MUST HAVE FILE ATTRIBUTE
;00 :-NORMAL MODE
;01 :-READ MODE
INT 21H
MOV FP2,AX
JNC L5
PRINT NEWL
PRINT FAIL
JMP END1
L5:
PRINT NEWL
; PRINT SUCCESS
MOV AH,40H ;INTERRUPT FOR COPYING CONTENTS
MOV BX,FP2 ;HANDLE OF THE FILE SHOULD BE IN BX
MOV DX,SEG BUFFER
MOV DS,DX
LEA DX,BUFFER
MOV CX,CNT ;CX CONTAINS COUNT OF BYTES TO BE MOVED
INT 21H
JNC L6
PRINT FAIL
JMP END1
L6:
PRINT NEWL
PRINT SUCCESS
END1:
MOV AH,4CH
INT 21H
CODE ENDS
END START
;----------------------------------------------------------------------------------------
; END OF THE PROGRAM
;----------------------------------------------------------------------------------------