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 , о которой мы будем говорить ниже, для определения других характеристик логического диска.



    Содержание раздела