Теоретические положения:

Для доступа к информации, хранящейся на дисках ПЭВМ, используется специальная группа дисковых функций MS-DOS. В эту группу входят прерывания, предназначенные для выполнения основных функций операционной системы, в том числе для выполнения операций с логическими дисками, файлами и каталогами. Дисковые функции DOS обладают достаточной полнотой и универсальностью для решения любых задач в реальном режиме DOS. Они могут применяться и в режиме линейной адресации памяти, но информацию в расширенную память приходиться пересылать через промежуточный буфер в первом мегабайте адресного пространства процессора.

Ниже описаны функции DOS, выполняющие основные операции над логическими дисками, каталогами и файлами. При описании используются следующие термины:

·  строка ASCIIZ – текстовая строка в ASCII-коде, которая завершается нулевым значением;

·  дескриптор файла – уникальный номер, который операционная система присваивает создаваемому или открываемому файлу в качестве идентификатора (чтобы потом обращаться к файлу по этому номеру – вплоть до его закрытия).

Группа функций для работы с файловой системой появилась в ранних версиях MS-DOS и сохранилась с тех пор практически без изменений. Для определения успешности выполнения таких функций используется флаг регистра признаков CF:

·  в случае успешного завершения операции флаг CF сбрасывается в 0;

·  в случае ошибки флаг CF устанавливается в 1.

По мере развития MS-DOS в набор функций постоянно вносились дополнения, упрощающие выполнение тех или иных операций и улучшающие контроль за их выполнением. Усовершенствованные средства контроля: в случае ошибки кроме установки флага CF выдают в регистре АХ код ошибки, по которому можно определить причину ее возникновения. Возможные значения некоторых кодов ошибок приведены в таблице 6.7. Однако следует учитывать, что содержимое регистра АХ в случае успешного завершения данных функций не сохраняется.

НЕ нашли? Не то? Что вы ищете?

Таблица 6.7 . Значения расширенных кодов ошибки

Код ошибки

Расшифровка кода

00h

Нет ошибки

01h

Неверный номер функции

02h

Файл не найден

03h

Путь не найден

05h

Доступ запрещен

06h

Недопустимый дескриптор

08h

Недостаточно памяти

0Bh

Недопустимый формат

0Сh

Недопустимый код доступа

0Dh

Недопустимые данные

0Fh

Недопустимый дисковод

10h

Попытка удалить текущий каталог

12h

Больше нет файлов

13h

Диск защищен от записи

16h

Неизвестная команда

1Dh

Ошибка записи

1Eh

Ошибка чтения

24h

Разделяемый буфер переполнен

26h

Невозможно завершить операцию с файлом

27h

Недостаточно места на диске

35h

Не найдено сетевое имя

36h

Сеть занята

37h

Сетевое устройство больше не существует

39h

Аппаратная ошибка сетевого адаптера

43h

Сетевое имя не найдено

50h

Файл уже существует

52h

Каталог не может быть создан

5Ah

Требуемый компонент системы не установлен

Далее приведены основные функции прерывания Int 21h, используемые при работе с файловой системой.

Прерывание Int 21h, функция OEh: сменить текущий логический диск

Функция позволяет выбрать логический диск.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 0Eh;

·  в AL – код логического диска (0 – А:, 1 – В: и т. д.).

После завершения операции функция возвращает в регистре AL максимально возможный в данной системе номер логического дисковода (определяется параметром LASTDRIVE в файле CONFIG. SYS).

Прерывание Int 21h, функция 19h: определить номер текущего дисковода

Функция определяет номер дисковода, который в данный момент считается текущим, то есть используется по умолчанию.

Перед вызовом прерывания требуется записать в регистр АН значение 19h.

После завершения операции функция возвращает в регистре AL код логического диска (0 – А:, 1 – В: и т. д.).

Прерывание Int 21h, функция 36h: определить объем свободного места на диске

Функция определяет объем свободного места на заданном логическом диске. Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 36h;

·  в AL – код логического диска (0 – А:, 1 – В: и т. д.).

В случае ошибки в регистре АХ будет возвращен код OFFFFh (недопустимый код логического диска).

В случае успешного завершения операции функция возвращает:

·  в АХ – число секторов в кластере;

·  в ВХ – число свободных кластеров;

·  в СХ – число байтов в секторе;

·  в DX – полное число кластеров на диске.

Объем свободного пространства определяется произведением содержимого регистров АХ, ВХ и СХ, а полный объем диска в байтах – произведением АХ, СХ и DX.

Прерывание Int 21h, функция 39h: создать подкаталог

Функция создает в текущем дереве каталогов новый подкаталог.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 39h;

·  в DS:DX – указатель на полную спецификацию каталога в виде строки ASCIIZ (должны существовать все каталоги на заданном пути, кроме последнего; вызов функции завершается ошибкой, если родительский каталог заполнен и является корневым).

Возможные коды ошибки: 03h, 05h.

Прерывание Int 21h, функция 3Ah: удалить подкаталог

Функция удаляет указанный подкаталог.

Каталог должен быть пустым, иначе выдается сообщение об ошибке. Поэтому перед удалением каталога нужно его очистить, удалив все имеющиеся в нем файлы и каталоги.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Ah;

·  в DS:DX – указатель на полную спецификацию удаляемого каталога в виде строки ASCIIZ.

Возможные коды ошибки: 03h, 05h, 06h, 10h.

Прерывание Int 21h, функция 3Bh: перейти в другой каталог

Функция создает в текущем дереве каталогов новый подкаталог.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Bh;

·  в DS:DX – указатель на полную спецификацию заданного каталога в виде строки ASCIIZ.

Возможный код ошибки: 03h.

Прерывание Int 21h, функция 3Ch: создать файл

Функция создает файл для записи. Если файл уже существует, то его размер усекается до 0.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Ch;

·  в СХ – атрибуты создаваемого файла (табл. 6.8);

·  в DS: DX – указатель на имя файла в виде строки ASCIIZ.

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла.

Возможные коды ошибки: 03h,04h,05h.

Таблица 6.8. Формат слова атрибутов файла

Номер разряда

Описание

0

Только для чтения

1

Скрытый

2

Системный

3

Метка тома (разряд может быть установлен только при считывании атрибутов; при создании файла или изменении атрибутов значение разряда должно быть равно 0)

4

Каталог (разряд может быть установлен только при считывании атрибутов; при создании файла или изменении атрибутов значение разряда должно быть равно 0)

5

Признак архивации

6-15

Зарезервированы, должны быть равны 0

Прерывание Int 21h, функция 3Dh: открыть существующий файл

Функция открывает файл для чтения, записи или дозаписи информации. Указатель при этом устанавливается в начало файла.

Перед вызовом прерывания требуется записать в регистры следующие значения:

·  в АН – значение 3Dh;

·  в AL - режимы доступа (табл. 6.9);

·  в DS:DX – указатель на имя файла в виде строки ASCIIZ.

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла.

Возможные коды ошибки: 01h, 02h, 03h, 04h, 05h, 0Ch.

Таблица 6.9. Формат байта режимов доступа

Номер разряда

Описание

0-2

Режим доступа:

000 – только для чтения;

001 – только для записи;

010 – для чтения и записи

3

Зарезервирован, должен быть равен 0

4-6

Режим разделения файлов:

000 – режим совместимости;

001 – другим программам запрещен любой доступ к файлу;

010 – другим программам запрещена запись в файл;

011 – другим программам запрещено чтение из файла;

100 – другим программам разрешен полный доступ к файлу

7

Флаг наследования:

0 – дочерний процесс наследует дескриптор;

1 – не наследует.

Прерывание Int 21h, функция 3Eh: закрыть файл

Функция сбрасывает на диск содержимое всех буферов, обновляет информацию в каталоге, а затем освобождает дескриптор файла (после этого дескриптор может быть присвоен другому файлу).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10