Professional Documents
Culture Documents
MESSAGE MACRO MSG MOV AH, 09H LEA DX, MSG INT 21H ENDM PUTCH MACRO C MOV DL, C MOV AH, 02H INT 21H ENDM GETCH MACRO MOV AH,01H INT 21H ENDM EXITDOS MACRO MOV AH,4CH INT 21H ENDM READSECTS MACRO D, N, S, BUFF MOV AL, D ; DRIVE NUMBER MOV CX, N ; NO.OF SECTORS TO READ MOV DX, S ; START SECTOR NUMBER LEA BX, BUFF ; SEG:OFFSET OF BUFFER INT 25H ENDM .MODEL SMALL .STACK 200H .DATA M1 DB 13,10,'ENTER FILENAME!!!','$' M2 DB 13,10,'ENTER EXTENSION!!!','$' MSG1 DB 13,10,'FAT READ FAILED!!!','$' MSG2 DB 13,10,'ROOT READ FAILED!!!','$' MSG5 DB 13,10,'FILE NOT FOUND!!!','$' MSG6 DB 13,10,'FILE FOUND!!!','$' MSG7 DB 13,10,'CLUSTER NO:','$' MSG8 DB 13,10,'PROGRAM TERMINATES...','$' FAT DB 9*512 DUP(0) ROOT DB 14*512 DUP(0) FBUFF DB 512 DUP(0) FNAME DB 8 DUP(20H)
EXT DB 3 DUP(20H) TFNAME DB 8 DUP(20H) TEXT DB 3 DUP(20H) CLUSTNO DW ? SECNO DW ? OFF_SET DW ? RESULT DW ? NO1 DB ? CNT DW 224 .CODE START: MOV AX, @DATA MOV DS, AX MOV ES, AX ;READ FAT READSECTS 0, 9, 1, FAT JNC READROOT MESSAGE MSG1 EXITDOS READROOT: ;READ ROOT DIRECTORY READSECTS 0, 14, 19, ROOT JNC READFILENAME MESSAGE MSG2 EXITDOS READFILENAME: ;GET THE FILE NAME MESSAGE M1 LEA SI,FNAME MOV CX,12 CALL ACCEPT ;GET THE EXTENSION OF FILE MESSAGE M2 LEA SI,EXT MOV CX,12 CALL ACCEPT ;GET THE ADDRESS OF ROOT INTO REGISTORS LEA BX, ROOT LEA SI, ROOT BACK2: ;IF ROOT DIRECTORY ENTRY IS EMPTY MOV AH,[BX] CMP AH,0
JNE SEARCH MESSAGE MSG5 EXITDOS SEARCH: ;MOVE THE FILENAME WITH ENTRY LEA DI, TFNAME CLD MOV CX, 8 REP MOVSB ;MOVE THE EXTENTION WITH ENTRY LEA DI, TEXT CLD MOV CX, 3 REP MOVSB ;COMPARE THE ENTRY WITH USER GIVEN FILE_NAME PUSH SI LEA SI, FNAME LEA DI, TFNAME MOV CX, 8 CLD REPE CMPSB JE FILEFOUND L1: ;IF NOT FOUND GO TO NEXT ENTRY POP SI ADD SI, 21 ADD BX, 32 JMP BACK2 ;IF STILL NOT FOUND THEN EXIT MESSAGE MSG5 EXITDOS FILEFOUND: ;COMPARE THE EXTENSION LEA SI, EXT LEA DI, TEXT MOV CX, 3 CLD REPE CMPSB JE EXTFOUND JMP L1;IF NOT FOUND FIND NEXT EXTFOUND: ;FILE FOUND NOW GO TO STARTING CLUSTER
MESSAGE MSG6 ADD BX, 26 MOV AX, WORD PTR [BX] MOV CLUSTNO, AX ; ************** GETNEXT: MESSAGE MSG7 CALL DISPCLUST GETCH ;GO TO NEXT CLUSTER MOV AX, CLUSTNO ADD AX, 31 MOV SECNO, AX READSECTS 0, 1, SECNO, FBUFF CALL DISPFILE CALL MUL3DIV2 MOV BX, OFF_SET MOV AX, WORD PTR FAT[BX] MOV RESULT, AX CALL EVENODD JNZ ODD1 MOV AX, RESULT AND AX, 0FFFH MOV CLUSTNO, AX JMP NEXTCLUST ODD1: MOV AX, RESULT SHR AX, 1 SHR AX,1 SHR AX,1 SHR AX,1 MOV CLUSTNO, AX NEXTCLUST: CMP AX, 0FFFH JE EXIT JMP GETNEXT EXIT: MESSAGE MSG8 EXITDOS
EVENODD
EVENODD
MUL3DIV2 PROC NEAR MOV AX, CLUSTNO MOV CX, AX SHR AX, 1 ADD AX, CX MOV OFF_SET, AX RET MUL3DIV2 ENDP
DISPFILE PROC NEAR LEA SI, FBUFF MOV CX, 512 PUTCH [SI] INC SI LOOP BACK1 RET ENDP
BACK1:
DISPFILE
ACCEPT PROC NEAR BACK: GETCH CMP AL,0DH JE LOOP1 CMP AL,61H ;COMPARE IF FILENAME IS IN LOWER JB GO ;CASE AND IF YES THEN CHANGE TO SUB AL,20H ;UPPER CASE
GO:
ACCEPT
DISPCLUST PROC NEAR MOV AX, CLUSTNO MOV NO1, AH CALL DISP MOV AX, CLUSTNO MOV NO1, AL
DISP PROC NEAR MOV AH, NO1 AND AH, 0F0H ROR AH, 1 ROR AH,1 ROR AH,1 ROR AH,1 CMP AH, 9 JG NXT1 ADD AH, 48 PUTCH AH JMP NXT2
NXT1: ADD AH, 55 PUTCH AH NXT2: MOV AH, NO1 AND AH, 0FH CMP AH, 9 JG NXT3 ADD AH, 48 PUTCH AH JMP NXT4 NXT3: ADD AH, 55 PUTCH AH NXT4: RET DISP END START ENDP