Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Функции DOS - INT 25H/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 = 80H = attachment failed to respond
  • AH = 40H = ошибка операции поиска на диске
  • AH = 08H = неверная контрольная сумма (CRC) при чтении дискеты
  • AH = 04H = запрошенный сектор не найден
  • AH = 03H = попытка записи на защищенную от записи дискету
  • AH = 02H = ошибка, отличная от перечисленных выше

Пример

Участок программы, читающий корневой сектор дискеты:

            mov     al,0          ;выбрать диск A
            mov     dx,0          ;выбрать корневой сектор DOS и BPB
            mov     cx,1          ;читать один сектор ...
            lea     bx,my_buf     ; ... в буфер по адресу DS:BX
            int     25H
            pop     dx            ;удалить лишнее слово из стека
            jnc     no_err
            ...и т.д.             ;обработать любую ошибку диска (код в AX)
   no_err:  ...и т.д.             ;продолжить (ошибок нет)

Замечание:

Не следует предполагать, что сектор содержит ровно 512 байт. Используйте функции 1cH или 32H либо прочитайте корневой сектор , чтобы определить истинный размер секторов.

32 мегабайта?

Утверждается, что DOS поддерживает максимальный объем диска в 32 Мб, но, строго говоря, это неправда. для стандартных драйверов устройств размер сектора равен 512K. Очвидно, что, поскольку наибольший номер сектора, который можно поместить в DX для INT 25H/26H, равен 65535, максимальный размер диска получается равным 32767K, или 32M.

Однако не-IBM'овские драйверы (или будущие драйверы IBM) могут поддерживать размер сектора, больший 512 байт. Поэтому для размера диска нет практических ограничений. Даже для сегодняшних драйверов, 32-мегабайтный максимум относится лишь к единственному разделу DOS.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог