Главная » Ассемблер, Железо » Группа дисковых функций MS-DOS

0

В эту группу входят прерывания, предназначенные для выполнения основных функций операционной системы, в том числе для выполнения операций с логическими дисками, файлами и каталогами [3, 10]. Дисковые функции DOS обладают достаточной полнотой и универсальностью для решения любых задач в реальном режиме DOS. Они могут применяться и в режиме линейной адресации памяти, но информацию в расширенную память приходится пересылать через промежуточный буфер в первом мегабайте адресного пространства процессора. Впрочем, дополнительные пересылки не особенно замедляют работу: поиск данных на диске и передача информации между диском и процессором занимает гораздо больше времени, чем копирование такого же объема данных с одного участка оперативной памяти в другой.’

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

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

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

Классические функции для работы с дисками

К этой группе относятся функции, появившиеся в ранних версиях операционной системы MS-DOS и сохранившиеся с тех пор практически без изменений. Такие функции отличаются крайне примитивной обработкой ошибок:

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

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

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

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

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

•           в АН — значение OEh;

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

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

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

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

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

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

Прерывание Int 21 h, функция 1Ah: изменить адрес области обмена с диском

Функция устанавливает адрес буфера, используемого в операциях ввода-вывода и поиска в каталогах.

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

•          в АН — значение lAh;

•                в DS: DX — указатель на новый адрес буфера обмена DTA. ПРИМЕЧАНИЕ

При запуске программы ее область DTA первоначально установлена по адресу PSP:0080h.

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

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

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

После завершения операции функция возвращает в ES: ВХ указатель на адрес буфера обмена DTA.

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

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

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

•          в АН — значение 36h;

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

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

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

•           в АХ — число секторов в кластере;

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

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

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

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

Улучшенные функции для работы с дисками

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

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

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


Код ошибки

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

OOh

Нет ошибки

01 h

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

02h

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

03h

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

04h

Открыто слишком много файлов (нет свободных дескрипторов)

05h

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

06h

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

07h

Разрушен блок управления памятью

08h

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

09h

Недопустимый адрес блока памяти

OAh

Ошибка окружения (длина больше 32 Кбайт)

OBh

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

OCh

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

Таблица 6.1 (продолжение)

Код ошибки

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

ODh

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

OEh

Неизвестное устройство

OFh

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

10h

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

11 h

Устройство не то же самое

12h

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

13h

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

I4h

Неизвестное устройство

15h

Дисковод не готов

16h

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

17h

При проверке CRC обнаружена ошибка данных

18h

Неверная длина структуры запроса

19h

Ошибка поиска (позиционирования)

lAh

Неизвестный тип носителя (не DOS-диск)

1Bh

Сектор не найден

1Ch

В принтере нет бумаги

1Dh

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

1Eh

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

1Fh

Общий сбой

20h

Нарушение разделения

21h

Нарушение запирания

22h

Недопустимая смена диска (в ES:DI будет находиться

 

указатель на метку нужного тома в виде строки ASCJIZ)

23h

FCB недоступен

24h

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

25h

Несоответствие кодовой страницы

26h

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

27h

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

28h-31h

Зарезервированы

32h

Неподдерживаемый сетевой запрос

33h

Удаленный компьютер не слушает

34h

Дублирование имени в сети

35h

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

36h

Сеть занята

37h

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

38h

Исчерпан лимит команд NetBIOS

39h

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

Код ошибки

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

3Ah

Неверный отклик из сети

3Bh

Неожиданная ошибка сети

3Ch

Несовместимый удаленный адаптер

3Dh

Очередь на печать заполнена

3Eh

Нет места для файла печати

3Fh

Файл печати удален

40h

Сетевое имя удалено

41h

Доступ к сети невозможен

42h

Неверный тип сетевого устройства

43h

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

44h

Исчерпан лимит сетевых имен

45h

Исчерпан лимит сеанса работы NetBIOS

46 h

Временная пауза

47h

Сетевой запрос не принят

48h

Приостановлено переназначение принтера или диска

49h-4Fh

Зарезервированы

50h

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

51h

Зарезервирован

52h

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

53h

Отказ по прерыванию Int 24h (критическая ошибка)

54h

Слишком много переназначений

55h

Двойное перенаправление

56h

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

57h

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

58 h

Ошибка сетевой записи

59h

Функция не поддерживается в сети

5Ah

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

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

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

•        в АН — значение 39h;

•       в DS DX — указатель на полную спецификацию каталога в виде строки ASCIIZ (должны существовать все каталоги на заданном

пути, кроме последнего; вызов функции завершается ошибкой, если родительский каталог заполнен и является корневым). Возможные коды ошибки: 03h, 05h.

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

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

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

•          в АН — значение 3Ah;

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

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

ПРИМЕЧАНИЕ

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

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

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

•          в АН — значение 3Bh;

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

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

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

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

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

•          в АН — значение 3Ch;

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

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

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

Возможные коды ошибки: 03h, 04h, 05h. Таблица 6.2. Формат слова атрибутов файла

Номер

Описание

разряда

 

0

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

1

Скрытый

2

Системный

3

Метка тома (разряд может быть установлен только

 

при считывании атрибутов; при создании файла или изменении

 

атрибутов значение разряда должно быть равно 0)

4

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

 

атрибутов; при создании файла или изменении атрибутов

 

значение разряда должно быть равно 0)

5

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

6-15

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

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

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

•        в АН — значение 3Dh;

•        в AL — режимы доступа (табл. 6.3);

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

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла. Возможные коды ошибки: Olh, 02h, 03h, 04h, 05h, OCh.

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

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

Описание

0-2

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

 

ООО — только для чтения;

 

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

Таблица 6.3 (продолжение)

Номер

Описание

разряда

 

 

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

3

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

4-6

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

 

ООО — режим совместимости;

 

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

 

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

 

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

 

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

7

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

 

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

 

1 — не наследует

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

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

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

•        в АН — значение 3Eh;

•         в ВХ — дескриптор файла. Возможный код ошибки: 06h.

Прерывание Int 21 h, функция 3Fh: чтение информации из файла

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

•        в АН — значение 3Fh;

•        в ВХ — дескриптор файла;

•        в СХ — число байтов, подлежащих считыванию;

•       в DS DX — указатель на буфер, в который должна быть занесена считанная информация.

В случае успешного завершения операции функция возвращает в регистре АХ число реально считанных байтов (оно может быть меньше значения, указанного в регистре СХ при вызове функции, если в процессе считывания достигнут конец файла). Возможные коды ошибки: 05h, 06h.

Прерывание Int 21 h, функция 40h: запись информации в файл

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

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

•           в АН —значение 40h;

•           в ВХ — дескриптор файла;

•" в СХ — число байтов, подлежащих записи;

•       в DS: DX — указатель на буфер, информация из которого записывается в файл.

В случае успешного завершения операции функция возвращает в регистре АХ число реально записанных байтов (оно может быть меньше значения, указанного в регистре СХ при вызове функции, если на диске недостаточно свободного места, то есть произошло переполнение).

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

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

Удаляет указанный файл. ПРИМЕЧАНИЕ

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

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

•           в АН — значение 41h;

•           в DS: DX — указатель на имя файла в виде строки ASCIIZ. Возможные коды ошибки: 02h, 03h, 05h.

Прерывание Int 21 h, функция 42h: изменить положение указателя файла

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

•           в АН — значение 42h;

•       в AL — код точки отсчета положения указателя (0 — отсчет ведется от начала файла, 1 — от текущего положения указателя, 2 — от конца файла);

•           в ВХ — дескриптор файла;

•           в СХ — старшая часть смещения;

•           в DX — младшая часть смещения.

В случае успешного завершения операции функция возвращает в регистрах DX и АХ новое положение указателя относительно начала файла:

•           в DX — старшая часть значения положения указателя;

•           в АХ — младшая часть значения. Возможные коды ошибки: Olh, 06h.

Прерывание Int 21 h, функция 43h, подфункция OOh: получить атрибуты файла

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

•           в АХ — значение 4300h; •

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

В случае успешного завершения операции функция возвращает в регистре СХ слово атрибутов файла (см. табл. 6.2). Возможные коды ошибки: Olh, 02h, 03h, 05h.

Прерывание Int 21 h, функция 43h, подфункция 01 h: изменить атрибуты файла

Подфункция изменяет атрибуты указанного файла.

ПРИМЕЧАНИЕ

Функция не может изменить атрибуты метки тома или каталога.

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

•       в АХ — значение 4301h;

•       в СХ — новые значения атрибутов файла (см. табл. 6.2);

•        в DS: DX — указатель на имя файла в виде строки ASCIIZ. Возможные коды ошибки: Olh, 02h, 03h, 05h.

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

Выдает имя текущего (рабочего) каталога на указанном логическом диске.

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

•       в АН — значение 47h;

•       в DL — код логического диска (0 — диск, используемый по умолчанию (текущий), 1 — диск А:, 2 — диск В: и т. д.);

•       в DS: SI — указатель на буфер размером 64 байта, выделенный для записи имени каталога.

В случае успешного выполнения функции в буфер будет записан путь от корневого каталога до текущего в виде строки ASCIIZ. Описание пути не включает в себя идентификатор диска и начальный обратный слэш «\». Возможный код ошибки: OFh.

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

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

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

•       в АН — значение 4Eh;

•       в СХ — маску атрибутов файла (см. табл. 6.2);

•       в DS:DX — указатель на спецификацию файла в виде строки ASCIIZ (спецификация может включать в себя путь и шаблоны).

В случае успешного завершения функция возвращает в области DTA блок данных для первого найденного файла. Формат блока данных приведен в табл. 6.4.

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

ПРИМЕЧАНИЕ

Получить адрес области обмена с диском DTA можно при помощи функции 2Fh.

Таблица 6.4. Формат блока данных файла для функций поиска

Смещение

Размер элемента

Описание

OOh

BYTE

Буква логического диска

01 h

11 байт

Шаблон для поиска

OCh

BYTE

Атрибуты поиска

ODh

WORD

Счетчик элементов внутри каталога

OFh

WORD

Номер кластера начала родительского

 

 

каталога

11h

4 байта

Зарезервировано

15h

BYTE

Атрибуты найденного файла

16h

WORD

Время создания файла:

 

 

биты 0-4 — двухсекундные приращения:

 

 

биты 5-10 — минуты;

 

 

биты 11-15 — часы

18h

WORD

Дата создания файла:

 

 

биты 0-4 —день;

 

 

биты 5-8 — месяц;

 

 

биты 9-15 — номер года (относительно

 

 

1980 года)

1Ah

DWORD

Размер файла в байтах

1Eh

13 байтов

Имя и расширение файла в виде строки ASCIIZ

Прерывание Int 21 h, функция 4Fh: найти следующий файл

Функция выполняет поиск следующего файла, соответствующего спецификации, заданной при предшествующем вызове функции 4Eh. Перед вызовом прерывания требуется записать в регистр АН значение 4Fh. В области DTA должен находиться блок данных от предыдущего вызова функции 4Eh или 4Fh.

В случае успешного завершения функция возвращает в области DTA блок данных очередного найденного файла (см. табл. 6.4).

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

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

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

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

•        в АН — значение 56h;

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

•       в ES: ВХ — новое имя файла в виде строки ASCIIZ (может включать в себя путь, но не должна включать шаблоны).

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

Прерывание Int 21 h, функция 57h, подфункция OOh: получить время и дату создания файла

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

•        в АХ — значение 5700И;

•        в ВХ — дескриптор файла.

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

•        в СХ — время создания файла:

о биты 0-4 — двухсекундные приращения; о биты 5-10 — минуты; о биты 11 -15 — часы;

•       в DX — дату создания файла: о биты 0-4 — день;

о биты 5-8 — месяц;

о биты 9-15 — номер года (относительно 1980 года). Возможные коды ошибки: Olh, 06h.

14[2]

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

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

•          в АХ — значение 5701h;

•          в 8Х — дескриптор файла;

•          в СХ — время создания файла:

о биты 0-4 — двухсекундные приращения; о биты 5-10 — минуты; о биты 11-15 — часы;

•       в DX — дату создания файла: о биты 0-4 — день;

о биты 5-8 — месяц;

о биты 9-15 — номер года (относительно 1980 года). Возможные коды ошибки: Olh, 06h.

Прерывание Int 21 h, функция 59h: получить дополнительную информацию об ошибке

Эту функцию (при необходимости) следует вызывать сразу после получения сообщения о возникновении ошибки при выполнении какой-либо операции по прерыванию Int 21h. Функция выдает дополнительную информацию о причинах возникновения ошибки и рекомендации по ее устранению.

ПРИМЕЧАНИЕ

При выдаче кода ошибки обычно он упрощается до старого набора кодов DOS 2.x (коды 01h-12h), а данная функция выдает уточненный (расширенный) код.

•           в BL — код рекомендуемого действия (табл. 6.6.);

•           в СН — местоположение ошибки (табл. 6.7.);

ВНИМАНИЕ

В результате выполнения функции будут разрушены регистры CL, DX, SI, DI, BP, DS и ES, поэтому их содержимое перед вызовом данной функции следует сохранить.

Таблица 6.5. Значения кодов класса ошибок


Код класса

Значение

 

01 h

Нехватка ресурсов (недостаточно места на диске или нет

 

 

свободных каналов ввода-вывода)

 

02h

Доступ к файлу временно запрещен (с ним работает другая

 

 

программа)

 

03h

Доступ запрещен — у программы нет необходимых

 

 

полномочий для работы

 

04h

Ошибка системной программы

 

05h

Отказ оборудования

 

06h

Отказ системы (разрушен файл конфигурации)

 

07h

Ошибка прикладной программы

 

08h

Не найдено

 

09h

Неверный формат

 

OAh

Заблокировано

 

OBh

Ошибка носителя информации

 

OCh

Уже существует

 

ODh

Неизвестно

 

Таблица 6.6. Значения кодов рекомендуемых действий

 

Код

Рекомендуемая реакция на ошибку

 

действия

 

 

01 h

Повторить несколько раз и в случае неудачи предложить

 

 

пользователю либо прервать операцию,

 

 

либо проигнорировать ошибку

 

02h

Повторить несколько раз с задержкой между повторами

 

 

и в случае неудачи предложить пользователю либо прервать

 

 

операцию, либо проигнорировать ошибку

 

03 h

Запрос пользователю для повторного ввода информации

 

 

(обычно необходимо в случае некорректно заданного имени

 

 

файла или диска)

 

422

Глава 6. Работа с дисками

Таблица 6.6 (продолжение)

Код

Рекомендуемая реакция на ошибку

действия

 

04h

Прервать программу после освобождения используемых

 

ресурсов

05h

Немедленно прервать программу

06h

Игнорировать ошибку

07h

Повтор после вмешательства пользователя, который должен

 

устранить причину ошибки

Таблица 6.7. Значения кодов местоположения ошибок

Код

Местоположение ошибки

01 h

Неизвестно

02h

Диск

03 h

Сеть

04h

Устройство последовательного доступа

05h

Память

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

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

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

•        в АН — значение 5Ah;

•        в СХ — атрибуты файла (см. табл. 6.2);

•       в DS: DX — указатель на путь в виде строки ASCIIZ (в конце строки должно находиться не менее 13 байт, заполненных нулями для получения сгенерированного имени).

В случае успешного завершения операции функция возвращает в регистре АХ дескриптор файла, открытого для чтения и записи в режиме совместимости; OS: ОХ при этом будет указывать на путь, дополненный сгенерированным именем файла.

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

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

Создает файл для записи. От функции 3Ch отличается тем, что завершается ошибкой, если файл с таким именем уже существует.

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

•           в АН — значение 5Bh;

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

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

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

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

Низкоуровневые дисковые функции DOS

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

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

В случае ошибки все функции этой группы устанавливают флаг CF и возвращают в регистре AL код ошибки (см. табл. 6.1), а в регистре АН — код состояния устройства (табл. 6.8).

Таблица 6.8. Коды состояния устройства

Код

Состояние

01h

Неверная команда

02 h

Дефектная адресная метка

03h

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

Таблица 6.8 (продолжение)

 

 

Код

Состояние

04h

Сектор не найден

08h

Сбой DMA

10h

Ошибка данных — неправильная контрольная сумма (CRC)

20h

Сбой контроллера (

40h

Сбой при выполнении поиска

80h

Устройство не отвечает

Прерывание Int 25h: абсолютное чтение секторов из разделов малого объема

Прерывание используется для чтения секторов с диска по заданным логическим номерам. Объем раздела не должен превышать 32 Мбайт. Перед вызовом прерывания требуется записать в регистры следующие значения: ,

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

•        в СХ — число считываемых секторов;

•        в DX — номер начального сектора;

•        в DS: ВХ — адрес буфера для размещения данных.

В случае успешного выполнения операции в буфер будут записаны данные, прочитанные с диска.

Прерывание Int 25h, функция FFFFh: абсолютное чтение секторов из разделов большого объема

Прерывание используется для чтения секторов с диска по заданным логическим номерам. Читает из разделов, имеющих объем более 32 Мбайт.

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

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

•        в СХ — значение OFFFFh;

•       в DS: ВХ — адрес блока параметров операции абсолютного чтения (табл. 6.9).

В случае успешного выполнения операции в буфер, адрес которого указан в блоке параметров, будут записаны данные, прочитанные с диска.

Таблица 6.9. Блок параметров операции абсолютного чтения

Смещение

Размер

Описание

OOh

DWORD

Номер сектора

04h

WORD

Число считываемых секторов

06h

DWORD

Дальний (far) указатель на буфер данных

Прерывание Int 26h: абсолютная запись секторов в разделы малого объема

Используется для записи секторов на диск по заданным логическим номерам. Объем раздела не должен превышать 32 Мбайт.

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

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

•       в СХ — число записываемых секторов;

•       в DX — номер начального сектора;

•       в DS: ВХ — адрес буфера, содержащего записываемые данные.

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

Используется для записи секторов на диск по заданным логическим номерам. Читает из разделов, имеющих объем более 32 Мбайт.

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

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

•       в СХ — значение OFFFFh;

•       в DS: ВХ — адрес блока параметров операции абсолютной записи (формат блока приведен в табл. 6.10).

Таблица 6.10. Блок параметров операции абсолютной записи

Смещение

Размер

Описание

OOh

DWORD

Номер сектора

04h

WORD

Число записываемых секторов

06h

DWORD

Дальний (far) указатель на буфер

 

 

данных

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии