Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 17

File Management System

From the name – File Management System we can understand its purpose. It is to
perform the task of managing files of our computer. A general file manager does
have a lot of job to do. Most common jobs are:

:: Create file

:: Create folder

:: Change directory

:: Delete files

:: Delete folders

:: Show directory

:: Cut, copy, paste file or folders

:: Give the user a friendly command mode interface to operate with files and
directories

A very much popular and used such type or program is Windows Explorer which is
provided with Windows Operating System.

In this project we tried to build such type of file management system using
Assembly Language, which runs on Windows or DOS platform. We have followed the
idea of Windows Explorer to operate with files and directories. As done in Assembly
Language, there exist some drawbacks. The features and working procedure in
described in details below. We will call our program FMS in short through rest of
description.

Abstract View
FMS starts running with a graphical interface in ODS. It shows the contents of the
current directory at its view, and we can start operating with our files and
directories using FMS from here.
Features of FMS
The FMS does not have all the features we generally get from Windows Explorer.
Available features of FMS are:

:: Create file

:: Create folder

:: Change directory

:: Delete files

:: Delete folders

:: Show directory

Using FMS
Using FMS is very easy. Some simple keyboard commands does all the operation for
the user.

Operation Key
Quit ESC
New folder N
New file F
Rename File R
Remove directory D
Remove file T
Change directory M
Show directory P
Getting inside FMS:
FMS uses DOS and BIOS interrupts to do its job. All though 21 types of interrupts are
used to perform different operations. All used interrupts are listed at appendix A.
We have used some macros which are listed in appendix B.

Exploring the code:


We start exploring from the ‘MAIN’ method of our code.

Here is the main method:

“INCLUDE FILE_OP.ASM
INCLUDE STRING_OP.ASM

.MODEL SMALL
.STACK 100H
.DATA
FILENAME DB 64 DUP(0)
FOLDERNAME DB 64 DUP(0)
OLDNAME DB 64 DUP(0)
NEWNAME DB 64 DUP(0)
HANDLE DW ?
PATH DB 64 DUP (0)
LINE1 DB 80 DUP (178)
LINE2 DB 80 DUP (177)
DES DB 'ENTER DESTINATION : '
SOUR DB 'ENTER SOURCE : '
ILLI DB ' !!! ILLIGAL KEY !!!!'
STRLEN DW ?
DRIVE DB ?

TL1 DB 178,' FILE


+--\ ',178,0
TL2 DB 178,' +--||| MANAGEMENT
|--| ',178,0
TL3 DB 178,' | | SYSTEM
|--| ',178,0
TL4 DB 178,' +----+
+--+ ',178,0

FL1 DB ' * +--|||',0


FL2 DB ' FOLDER CREATED -----> * * | |',0
FL3 DB ' * +----+',0
FL4 DB ' ',0

FD1 DB ' * * +--|||',0


FD2 DB ' FOLDER DELETED -----> * | |',0
FD3 DB ' * * +----+',0
FD4 DB ' ',0
CD1 DB ' * +--|||',0
CD2 DB ' DIRECTORY CHANGED -----> * | |',0
CD3 DB ' * * * +----+',0
CD4 DB ' * ',0

FI1 DB ' * +--\'


FI2 DB ' FILE CREATED -----> * * |--|'
FI3 DB ' * |--|'
FI4 DB ' +--+'
FI5 DB ' ',0

FID1 DB ' * * +--\'


FID2 DB ' FILE DELETED -----> * |--|'
FID3 DB ' * * |--|'
FID4 DB ' +--+'
FID5 DB ' ',0

PTH1 DB
'+--------------------------------------------------------------------+'
PTH2 DB ' CURRENTH PATH : '

MN1 DB ' ========================================'


MN2 DB ' | KEY | OPERATION |'
MN3 DB ' | ESC | QUIT |'
MN4 DB ' | N | NEW FOLDER |'
MN5 DB ' | F | NEW FILE |'
MN6 DB ' | R | RENAME FILE |'
MN7 DB ' | D | REMOVE DIRECTORY |'
MN8 DB ' | T | REMOVE FILE |'
MN9 DB ' | M | CHANGE DIRECTORY |'
MN10 DB ' | P | SHOW DIRECTORY |'
MN11 DB ' |--------------------------------------|'

.CODE
MAIN PROC
PRINT_TITLE LINE1,TL1,TL2,TL3,TL4,LINE2,79
PRINT_MENU MN1,MN2,MN3,MN4,MN5,MN6,MN7,MN8,MN9,MN10,MN11,60

WIN :
MOV AH , 0
INT 16H
.IF AL == 1BH ; ESC FOR QUIT
JMP END_WIN

.ELSEIF AL == 4EH ; N FOR NEW FOLDER


PRINT_STRING DES,20
READ_STRING FOLDERNAME
NEW_LINE
CREATE_FOLDER FOLDERNAME
LEN_STRING FOLDERNAME,STRLEN
PRINT_FOLDER FL1,FL2,FL3,FL4,FOLDERNAME,STRLEN
JMP WIN

.ELSEIF AL == 46H ; F FOR CREATE FILE


PRINT_STRING DES,20
READ_STRING FILENAME
NEW_LINE
OPEN_FILE FILENAME , HANDLE
LEN_STRING FILENAME,STRLEN
PRINT_FILE FI1,FI2,FI3,FI4,FI5,FILENAME,STRLEN
JMP WIN

.ELSEIF AL == 44H ; D FOR DELETE FOLDER


PRINT_STRING DES,20
READ_STRING FOLDERNAME
NEW_LINE
REMOVE_FOLDER FOLDERNAME
LEN_STRING FOLDERNAME,STRLEN
PRINT_FOLDER FD1,FD2,FD3,FD4,FOLDERNAME,STRLEN
JMP WIN

.ELSEIF AL == 54H ; T FOR DELETE FILE


PRINT_STRING DES,20
READ_STRING FILENAME
NEW_LINE
REMOVE_FILE FILENAME
LEN_STRING FILENAME,STRLEN
PRINT_FILE FID1,FID2,FID3,FID4,FID5,FILENAME,STRLEN
JMP WIN

.ELSEIF AL == 52H ; R FOR RENAME


PRINT_STRING SOUR,15
READ_STRING OLDNAME
NEW_LINE
PRINT_STRING DES,20
READ_STRING OLDNAME
NEW_LINE
RENAME_FILE OLDNAME,NEWNAME
JMP WIN

.ELSEIF AL == 50H ; P FOR RPINT PATH


PRINT_STRING PTH1,70
NEW_LINE
PRINT_STRING PTH2,20
GET_DRIVE DRIVE
PRNCHAR DRIVE
PRNCHAR 3AH
PRNCHAR 5CH
GET_DIR PATH
LEN_STRING PATH,STRLEN
PRINT_STRING PATH,STRLEN
NEW_LINE
PRINT_STRING PTH1,70
NEW_LINE
JMP WIN

.ELSEIF AL == 4DH ; M FOR CHANGE DIRECTORY


PRINT_STRING DES,20
READ_STRING PATH
NEW_LINE
CHANGE_DIR PATH
LEN_STRING PATH,STRLEN
PRINT_FOLDER CD1,CD2,CD3,CD4,PATH,STRLEN
JMP WIN
.ENDIF
PRINT_STRING ILLI,50
NEW_LINE
JMP WIN
END_WIN :
MOV AH , 4CH
INT 21H

MAIN ENDP
END MAIN”

Here the options for the operations are added with condition.
When we press the ESC key it goes to JMP_WIN. Which quits from FMS.

When we press ‘N’ it creates new folder. For creating new folder it uses
macro “CREATE FOLDER MACRO FOLDER NAME”

“CREATE_FOLDER MACRO FOLDERNAME


SAVE_REG
INIT_DS_DX
MOV AH , 39H
LEA DX , FOLDERNAME
INT 21H
RES_REG
ENDM”

‘F’ uses for creating new file. It uses “OPEN_FILE MACRO F_NAME,F_HANDLE ”

“OPEN_FILE MACRO F_NAME,F_HANDLE


SAVE_REG
INIT_DS_DX
MOV AH , 3CH
LEA DX , F_NAME
MOV CL , 1
INT 21H
MOV F_HANDLE , AX
RES_REG
ENDM”

‘D’ uses for delete folder.It uses “REMOVE_FOLDER MACRO FOLDERNAME”.

”REMOVE_FOLDER MACRO FOLDERNAME


SAVE_REG
INIT_DS_DX
MOV AH , 3AH
LEA DX , FOLDERNAME
INT 21H
RES_REG
ENDM”

When we press ‘T’ it removes file from directory. It uses “REMOVE_FILE MACRO
FILENAME”.

“REMOVE_FILE MACRO FILENAME


SAVE_REG
INIT_DS_DX
MOV AH , 41H
LEA DX , FILENAME
INT 21H
RES_REG
ENDM “

By pressing ‘R’ we can rename file. It uses macro “RENAME_FILE MACRO


OLDNAME , NEWNAME”
“RENAME_FILE MACRO OLDNAME , NEWNAME
SAVE_REG
INIT_DS_DX
INIT_ES
LEA DX , OLDNAME
LEA DI , NEWNAME
MOV AH , 56H
INT 21H
RES_REG
ENDM”

‘P’ uses for printing current path. It uses macros “GET_DRIVE MACRO DRIVE”
and “GET_DIR MACRO PATH”.

“GET_DRIVE MACRO DRIVE


SAVE_REG
MOV AH , 19H
INT 21H
ADD AL , 41H
MOV AH , 2
MOV DRIVE , AL
RES_REG
ENDM”

“GET_DIR MACRO PATH


SAVE_REG
INIT_DS_DX
MOV AH,47H
LEA SI,OFFSET PATH
MOV DL,0
INT 21H
RES_REG
ENDM”

We use ‘M’ for change directory. It uses “CHANGE_DIR MACRO PATH”.

“CHANGE_DIR MACRO PATH


SAVE_REG
INIT_DS_DX
LEA DX,PATH
MOV AH,3BH
INT 21H
RES_REG
ENDM”

Here we have used some other macros. They are listed below.

1.NEW_LINE MACRO
It uses for creating new line.

“NEW_LINE MACRO
SAVE_REG
MOV AH , 02H
MOV DL , 0DH
INT 21H
MOV DL , 0AH
INT 21H
RES_REG
ENDM”

2. READ_STRING MACRO STRING


It uses for reading a string input from keyboard.
“READ_STRING MACRO STRING
LOCAL WHILE1 , ELSE1 , READ , END_WHILE1
SAVE_REG
INIT_ES
LEA DI , STRING
CLD
MOV AH, 1
INT 21h
WHILE1:
CMP AL, 0DH
JE END_WHILE1
CMP AL, 8H
JNE ELSE1
DEC DI
JMP READ
ELSE1:
STOSB
READ:
INT 21h
JMP WHILE1
END_WHILE1:
MOV AL , 0
STOSB
RES_REG
ENDM”

3. LEN_STRING MACRO STRING , STRLEN


It uses to get the length of the string.

“LEN_STRING MACRO STRING , STRLEN


LOCAL L1, _END
SAVE_REG
XOR CX, CX
CLD
LEA SI, STRING
L1:
LODSB
CMP AL, 0
JE _END
INC CX
JMP L1
_END:
MOV STRLEN, CX
RES_REG
ENDM”

4. COPY_STRING MACRO SRC, SRC_STR_LEN, DST


It uses to copy the string.

“COPY_STRING MACRO SRC, SRC_STR_LEN, DST


SAVE_REG
MOV CX, SRC_STR_LEN
CLD
LEA SI, SRC
LEA DI, DST
REP MOVSB
MOV [DI], 0
RES_REG
ENDM”

5. PRINT_STRING MACRO STR, LENGTH


It uses for printing string.

“PRINT_STRING MACRO STR, LENGTH


LOCAL TOP
SAVE_REG
INIT_DS_DX
LEA SI,STR
CLD
MOV CX,LENGTH
MOV AH,2H
TOP:
LODSB
MOV DL,AL
INT 21H
LOOP TOP
RES_REG
ENDM”

6. PRNCHAR MACRO CHAR


It uses for printing character.

“PRNCHAR MACRO CHAR


SAVE_REG
MOV AH, 2
MOV DL, CHAR
INT 21H
RES_REG
ENDM”

7. PRINT_FOLDER MACRO F1, F2, F3,F4,FOLDER,LEN


It uses for printing folder.

“PRINT_FOLDER MACRO F1, F2, F3,F4,FOLDER,LEN


PRINT_STRING F1 , 46
NEW_LINE
PRINT_STRING F2 , 46
NEW_LINE
PRINT_STRING F3 , 46
NEW_LINE
PRINT_STRING F4 , 40
PRINT_STRING FOLDER , LEN
NEW_LINE
ENDM”

8. PRINT_FILE MACRO FI1, FI2, FI3, FI4,FL5,FILE,LEN


It uses for printing file.

“PRINT_FILE MACRO FI1, FI2, FI3, FI4,FL5,FILE,LEN


PRINT_STRING FI1 , 46
NEW_LINE
PRINT_STRING FI2 , 46
NEW_LINE
PRINT_STRING FI3 , 46
NEW_LINE
PRINT_STRING FI4 , 46
NEW_LINE
PRINT_STRING FI5 , 40
PRINT_STRING FILE , LEN
NEW_LINE
ENDM”

9. PRINT_TITLE MACRO LINE1,TL1,TL2,TL3,TL4,LINE2,L


It uses for printing title.

“PRINT_TITLE MACRO LINE1,TL1,TL2,TL3,TL4,LINE2,L


PRINT_STRING LINE1 , L
NEW_LINE
PRINT_STRING TL1 , L
NEW_LINE
PRINT_STRING TL2 , L
NEW_LINE
PRINT_STRING TL3 , L
NEW_LINE
PRINT_STRING TL4 , L
NEW_LINE
PRINT_STRING LINE1 , L
NEW_LINE
ENDM”

10. PRINT_MENU MACRO MN1,MN2,MN3,MN4,MN5,MN6,MN7,MN8,MN9,MN10,MN11,LN


It uses for printing menu.

“PRINT_MENU MACRO MN1,MN2,MN3,MN4,MN5,MN6,MN7,MN8,MN9,MN10,MN11,LN


PRINT_STRING MN1 , LN
NEW_LINE
PRINT_STRING MN2 , LN
NEW_LINE
PRINT_STRING MN1 , LN
NEW_LINE
PRINT_STRING MN3 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN4 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN5 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN6 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN7 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN8 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN9 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
PRINT_STRING MN10 , LN
NEW_LINE
PRINT_STRING MN11 , LN
NEW_LINE
ENDM”

11. SAVE_REG MACRO


It uses to push the registers in stack.

“ SAVE_REG MACRO

PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH BP
PUSH SI
PUSH DI
PUSHF

ENDM”

12. RES_REG MACRO


It uses to pop out the registers from stack.

“RES_REG MACRO
POPF
POP DI
POP SI
POP BP
POP DX
POP CX
POP BX
POP AX

ENDM”
13. INIT_DS_DX MACRO
It uses for initializing data segment.

“INIT_DS_DX MACRO
MOV AX , @DATA
MOV DS , AX
ENDM”

14. INIT_ES MACRO


It uses for initializing initializing extra segment.

“INIT_ES MACRO
MOV AX , @DATA
MOV ES , AX
ENDM”
Drawbacks:
We managed to perform various task of the project goal. But as the project
grows bigger, it becomes difficult to combine all those individual tasks. It has
several drawbacks. These are:

:: It works in only one drive

:: Copy/Paste option is not available yet

:: Graphics mode is not included

:: Validity checking of instructions is not been added.

Future Planning:
In future we will try to design it in graphics mode. Also we will try to include
the missing features.

Conclusion:
FMS is a very interesting project. But it’s not so easy to implement in
Assembly Language. In our project we used many macros.

Reference:
1. Assembly Language Programming & Organization of the IBM PC.

- Ytha Yu

- Charles Marut

2. Microprocessor & Interfacing Programming and Hardware.

- Douglas V. Hall
-

Appendix A:
Used Interrupts:

Serial Interru Functi Action Input Output


Numb pt on Performed
er Numbe Numb
r er
1. 10H 00H Initialize AL=Mode
Graphics AH=Function
Mode Number
CX=Number
of
Character
2. 10H 02H Set Cursor AH=Function
Position Number
BH=Page
Number
DL=Column
DH=Row
3. 10H 0AH Print AL=Character
Character in AH=Function
Graphics Number
Mode BH=Page
Number
CX=Number
of
Character
DL=Column
DH=Row
4. 10H 0CH Print a Single AL=Color
Pixel in AH=Function
Graphics Number
Mode BH=Page
Number
CX=Column
DX=Row
5. 10H 13H Print String in AL=Mode
Teletype AH=Function
Mode Number
BL=Color
CX=Length
DL=Column
DH=Row
BP=String
6. 16H 00H Detects Ah=Function AX=Output
Keyboard Number
Input
7. 21H 19H Get Current AH=Function AL=Drive
Drive Number Number
8. 21H 2FH Read DTA AH=Function ES:BX=DTA
Number Address
9. 21H 39H Make AH=Function
Directory Number
DX=ASCIIZ
Path
10. 21H 3AH Remove AH=Function
Directory Number
DX=ASCIIZ
Path
11. 21H 3BH Change AH=Function
Directory Number
DX=ASCIIZ
Path
12. 21H 3DH Open File AL=Access AX=File
Code Handle
AH=Function
Number
DX=Path
13. 21H 3EH Close File AH=Function
Number
BX=File
Handle
14. 21H 3FH Read File AH=Function
Number
BX=File
Handle
CX=Number
of
Bytes to Read
DX=Buffer
15. 21H 40H Write File AH=Function
Number
BX=Handle
CX=Number
of
Bytes to Read
DX=Buffer
16. 21H 41H Delete File AH=Function
Number
DX=ASCIIZ
Path
17. 21H 47H Get Directory AH=Function SI=Path
Number
DL=Drive
Number
18. 21H 4CH DOS Return AH=Function
Number
19. 21H 4EH Find First File AH=Function
Number
CX=Mode
DX=ASCIIZ
File
Name
20. 21H 4FH Find Next File AH=Function
Number
21. 21H 5BH Create File AH=Function
Number
CX=Attribute
DX=ASCIIZ
Path

Appendix B:
Macros

File: STRING_OP.ASM

1. NEW LINE

2. LEN_STRING MACRO STRLEN

3. PRINT STRING MACRO STR, LENGTH

4. PRINT FOLDER MACRO FL1, FL2,FL3

5. PRINT FILE MACRO FI1, FI2,FI3

File: MACROLIB.ASM

1. SAVE_REG

2. RES_REG

3. INIT_DS_DX

File: FILE_OP.ASM

1. CREATE_FOLDER MACRO FOLDERNAME


2. REMOVE_FOLDER MACRO FOLDERNAME
3. OPEN_FILE MACRO F_NAME, F_HANDLE
4. CLOSE_FILE MACRO PATHNAME
5. READ_FILE MACRO PATHNAME
6. WRITE_FILE MACRO PATHNAME
7. REMOVE_FILE MACRO FILENAME
8. FIND_FIRST_FILE MACRO FILENAME
9. RENAME_FILE MACRO OLDNAME, NEWNAME
10.GET_DRIVE MACRO DRIVE
11.GET_DIR MACRO PATH
12.CHANGE_DIR MACRO PATH

You might also like