Министерство образования РФ
Хабаровский государственный технический университет
Заочный факультет ускоренного обучения
Кафедра «Вычислительная техника»
По дисциплине «Организация ЭВМ и систем»
Прерывания DOS и работа с файлами
Работу выполнил: студент Войтенок А.А.
Шифр № 4кПОв 0013796
Проверил: доцент к.т.н. Шоберг А.Г.
г. Хабаровск
2002 г.
Цель работы: Изучить основные функции DOS, предназначенные для обработки файлов.
Прерывание DOS 21h обеспечивает набор функций для работы с дисковой памятью(файлами и каталогами). В лабораторной работе использованы следующие функции прерывания 21h.
Операция |
Код (функция) |
Входные параметры |
Выходные параметры |
Установка текущего дисковода |
0E |
DL=номер текущего дисковода |
AL= число дисководов |
Определение текущего оглавления |
47 |
DL=номер дисковода(0- текущий, 1- А) DS:SI – адрес области памяти для записи полного имени оглавления |
Строка с именем оглавления, оканчивающаяся нулевым байтом(00h) |
Создание файла |
3С |
DX- адрес ASCIIZ- строки CX- атрибут создаваемого файла (0- обычный файл, 10h- подкаталог) |
AX- файловый номер или код ошибки |
Открытие файла |
3D |
DX- адрес ASCIIZ- строки имени файла AL=код доступа(0-только для чтения, 1- только для записи, 2- чтение и запись) |
AX- файловый номер или код ошибки |
Запись файла |
40 |
BX= файловый номер CX= число записываемых байт DX=адрес области вывода |
AX= число записанных байтов или код ошибки |
Чтение файла |
3F |
BX- файловый номер, CX- число байтов, DX- адрес области ввода |
AX= число прочитанных байтов или код ошибки |
Закрытие файла |
3E |
BX- файловый номер |
в случае ошибки AX=06 |
В случае успешного завершения операции функции сбрасывают флаг CF регистра флагов. При возникновении ошибки устанавливают CF=1 и помещают код ошибки в регистр AX.
Контрольные вопросы.
1. Порядок работы с файлами в DOS. Используются функции прерывания 21h. Файл открывается (3D) или создаётся(3С). Полученный файловый номер используется при операциях чтения и записи. По окончании работы файл должен быть закрыт (3E).
2. Для доступа к диску по секторам применяются прерывания BIOS 13h (физическая адресация по номеру головки, дорожки, сектора) и прерывания DOS 25h и 26h(логическая адресация по номеру сектора в пределах логического диска).
3. Ошибка при чтении диска определяется по значению флага CF=1, код ошибки помещается в регистр AX.
4. Номер возврата(файловый номер) – дескриптор, который присваивается открытому файлу. Используется в дальнейшем при операциях чтения, записи, закрытия файла.
5. Изменение атрибута файла производится функцией 43h. В регистре DX устанавливается адрес ASCIIZ- строки, AL=01, CX=новое значение атрибута.
6. Поиск файлов по шаблону. Функции 4E и 4F. DX= адрес ASCIIZ-строки с именем пути и шаблоном поиска (включая символы * и ?). В CX- значение атрибута. Имя файла и расширение помещаются в текущую дисковую область переноса.
Текст программы.
data segment para public 'data'
BUFFER db 512 dup(?)
PATH db 512 dup (?)
MESSAGE db 'Drive number: $'
FILEDESC dw 0 ;дескриптор файла
M_CATALOGDETECT db 0dh,0ah,0dh,0ah,'Current katalog and disk 1 $'
M_DRIVECOUNT db 0dh,0ah,'Drives count 2 $'
M_CREATECATALOG db 0dh,0ah,'Create catalog 3 $'
M_CREATEFILE db 0dh,0ah,'Create file 4 $'
M_OPENFILE db 0dh,0ah,'Open file 5 $'
M_WRITE db 0dh,0ah,'Write to file 6 $'
M_CLOSE db 0dh,0ah,'Close file 7 $'
M_QUIT db 0dh,0ah,'QUIT Esc $'
T_DRIVE db 0dh,0ah,'Drive : $'
T_FOLDER db 0dh,0ah,'Current catalog: $'
T_DISKCOUNT db 0dh,0ah,'Disk count: $'
T_CATALOG_NAME db 0dh,0ah,'Folder name: $'
M_FOLDER_CREATED db 0dh,0ah,'Folder created!$'
M_FILE_CREATED db 0dh,0ah,'File created, descriptor: $'
M_ERROR db 0dh,0ah,'Error : $'
T_FILE_NAME db 0dh,0ah,'File name : $'
M_FILE_OPENED db 0dh,0ah,'File opened, descriptor: $'
M_FILE_CLOSE db 0dh,0ah,'File close 1 $'
M_FILE_WRITE db 0dh,0ah,'File write 2 $'
M_FILE_READ db 0dh,0ah,'File read 3 $'
T_READED_BYTES db 0dh,0ah,'Readed bytes :$'
M_INPUT_STRING db 0dh,0ah,'Input string $'
NL dw 0D0Ah
FILESYSTEM db 'Type of file system: $'
BYTEPERSECTOR db 'Bytes per sector: $'
RESERVEDSECTORS db 'Reserved sectors: $'
FATCOUNT db 'FAT count: $'
MAXDESCCOUNT db 'Max descriptors count in root catalog: $'
SECTORPERFAT db 'Sectors count in FAT: $'
ROOTOFFSETSTRING db 'Root offset: $'
FOUNDMESSAGE db 'File found $'
NOTFOUNDMESSAGE db 'File not found $'
NAMESTRING db 'Name: $'
EXTSTRING db 'Extension: $'
STRING db 10 dup(?)
MESSAGE_FILE db 0ah,0dh,'File name : $'
FILENAME db 20 dup (0)
FNAME db 10 dup (0) ; имя файла
EXT db 3 dup (0) ; расширение
NAMELEN db 0 ;длина имени
EXTLEN db 0 ;длина расширения
DISK db 0 ; номер диска
TYPEFAT db 0 ; тип FAT 0-12,1-16
FAT16 db 'FAT16'
RESSECT dw 0 ; зарезервировано секторов
FAT_SIZE dw 0 ; секторов в FAT
FAT_CNT db 0 ; количество FAT
DESC_CNT dw 0 ; количество дескрипторов в корневом каталоге
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.