MS-DOS для программиста


Прерывания INT 25h и INT 26h


Для работы с логическим диском (или дискетой) на уровне логических номеров секторов MS-DOS предоставляет программам два прерывания - INT25h (чтение сектора по его логическому номеру) и INT 26h (запись сектора по его логическому номеру). Вызов этих прерываний имеет различный формат для разных версий MS-DOS. Для тех версий, которые не поддерживают размер логических дисков более 32 Мбайт (MS-DOS 3.10, 3.20, 3.30) используется следующий формат:

  • INT 25h - Чтение сектора по его логическому номеру

На входе: AL Адрес НГМД или НМД (0 - A:, 1 - B:, ...)
CX Количество секторов, которые нужно прочитать
DX Логический номер начального сектора
DS:BX Адрес буфера для чтения
На выходе: AH Код ошибки при неуспешном завершении операции
CF 1, если произошла ошибка,

0, если ошибки нет

  • INT 26h - Запись сектора по его логическому номеру

На входе: AL Адрес НГМД или НМД (0 - A:, 1 - B:, ...)
CX Количество секторов, которые нужно записать
DX Логический номер начального сектора
DS:BX Адрес буфера, содержащего данные
На выходе: AH Код ошибки при неуспешном завершении операции
CF 1, если произошла ошибка,

0, если ошибки нет

Для более поздних версий MS-DOS и для COMPAQ DOS версии 3.31 используется другой способ указания номера логического сектора.

Так как шестнадцати разрядов недостаточно для адресации диска размером более 32 Мбайт, то при работе с расширенным разделом диска, занимающим более 32 Мбайт, регистры используются по-другому.

Регистр CX содержит FFFFh - признак того, что программа работает с логическим диском, имеющим размер более 32 Мбайт.

Регистры DS:BX содержат адрес следующей структуры:

Смещение Размер Содержимое
0 4 Начальный номер логического сектора
4 2 Количество секторов для чтения или записи
6 4 Дальний адрес буфера для передачи данных

Так как для указания начального номера логического сектора в этом управляющем блоке отводится 4 байта, то снимается указанное ранее ограничение на размер логического диска.

Сделаем очень важное замечание, касающееся только что рассмотренных прерываний MS-DOS.

Эти прерывания оставляют в стеке одно слово - старое значение регистра флагов. Поэтому после вызова прерывания должна следовать, например, такая команда:

pop ax

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




Начало  Назад  Вперед



Книжный магазин