Низкоуровневое програмирование Главная - Реальный режим - Прерывания DOS - INT 25/26h: Прямая дисковая операция чтения/записи.

INT 25/26h: Прямая дисковая операция чтения/записи.

Вход
AL = номер диска (0=A, 1=B, и т.д.)
CX = счетчик считываемых или записываемых секторов
DX = начальный сектор (логический номер сектора DOS)
DS:BX = адрес данных (исходный или целевой буфер)

Выход AX = код ошибки, если взведен флаг переноса (CF=1) (см. ниже)
значения всех регистров портятся, за исключением DS,ES,SS,SP
ВАЖНО: эти функции оставляют одно лишнее слово в стеке
Этот сервис DOS предоставляет прямой доступ к любому сектору диска, доступному через DOS-BIOS или устанавливаемые драйверы устройств.

INT 25h читает секторы
INT 26h записывает секторы
Логические секторы DOS начинаются с корневого сектора . первый сектор в разделе DOS - это логический сектор 0. номера логических секторов возрастают сначала для каждого сектора на цилиндре, затем по каждой головке, и наконец по каждому цилиндру на устройстве.

Заметьте, что Главная корневая запись и любые другие секторы вне раздела DOS недоступны через этот сервис. прерывание INT 13h - это единственный сервис, который предоставляет полный доступ к любой части твердого диска.

Ошибки
Ошибки, возникающие в процессе INT 25H/26H, НЕ обрабатываются обработчиком кртических ошибок INT 24h. при выходе из INT 25h/26h, DOS-BIOS взводит флаг переноса (CF=1), когда встречается ошибка. Если установлен флаг CF:
AL = ошибка устройства (0-0Ch) - аналогично битам 0-7 в DI для INT 24h - это
AL = один из кодов ошибок 13h-1Fh (без 13h) в списке кодов ошибок DOS
AHСмысл
80hattachment failed to respond
40hошибка операции поиска на диске
08hневерная контрольная сумма (CRC) при чтении дискеты
04hзапрошенный сектор не найден
03hпопытка записи на защищенную от записи дискету
02hошибка, отличная от перечисленных выше
Замечание: Не следует предполагать, что сектор содержит ровно 512 байт. Используйте функции 1Ch или 32h либо прочитайте корневой сектор, чтобы определить истинный размер секторов.