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

Ваш аккаунт

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

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

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

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

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

Функции DOS - INT 24H: обработчик критических ошибок.

Этот вектор (0000:0090) хранит адрес, по которому передается управление, когда драйвер устройства DOS обнаруживает критическую ошибку. адрес по этому вектору копируется в PSP функицями 26H (создать PSP) и 4bH (EXEC). При выходе родительские значения восстанавливаются в векторе INT 24H из родительского PSP.

Нормальный обработчик INT 24H - это код, который выдает сообщение:

      Abort, Retry, Ignore? _

которое вы видите при неготовности дискеты или принтера.

Наиболее сложные программы предоставляют собственный обработчик критических ошибок.

Вход

При входе в обработчик INT 24H регистры содержат следующие данные:

  • BP:SI => заголовок устройства , позволяющий определить сбойное устройство
  • DI = биты 0-7 содержат код ошибки (биты 8-15 не определены)
  • AL = если в AH бит 7=0, то в AL номер диска (0=A, 1=B, и т.д.)
  • AH = информация об ошибке:

Вы можете обработать ошибку, запросив действие пользователя (например, подготовить дискету или включить принтер). функции DOS выше 0cH не следует использовать (исключая функцию 59H , которая работает нормально). Вы можете получить дополнительную информацию через функцию 59H и/или через блок заголовка устройства, адресуемый через BP:SI.

Выход

После обработки ошибки вы можете загрузить в регистр AL код действия и вернуться в DOS, указав одно из следующих действий:

  • AL=0: игнорировать ошибку
  • AL=1: повторить операцию
  • AL=2: снять. завершить через адрес INT 23H (как при Ctrl-Break)
  • AL=3: вернуться в приложение, индицируя сбившуюся функцию DOS

DOS 3.x проверьте AH при входе, чтобы определить допустимые действия. Опция AL=3 кажется идеальной. например, если операция "открыть файл" вызвала ошибку из-за отсутствия диска в устройстве, вы можете предоставить вашему приложению самому обработать эту ситуацию. Однако эта опция имеет недостатки:

  • Опция AL=3 НЕДОСТУПНА в версиях DOS младше 3.0
  • DOS всегда возвращает код ошибки 53H, который не очень информативен

Стек

При входе в обработчик INT 24H, стек имеет состояние, описанное ниже:

  • IP - адрес для возврата в DOS через IRET
  • CS - адрес для возврата в DOS через IRET
  • Flags
  • AX,BX,CX,DX,SI,DI,BP,DS,ES - регистры прикладной программы перед INT 21H
  • IP - адрес для возврата непосредственно в приложение
  • CS - адрес для возврата непосредственно в приложение
  • Flags - регистр флагов приложения

Эту информацию можно использовать, чтобы определить сбившуюся функцию (через AH в стеке) и любые параметры (через другие регистры). Но более существенно то, что ваш обработчик INT 24H может восстановить регистры и осуществить возврат непосредственно в прикладную программу.

Обычно ваш обработчик будет имитировать DOS, загружая AX кодом ошибки DOS и взводя флаг CF, чтобы индицировать ошибку (хорошие программы так и поступают). Когда вы возвращаетесь в приложение таким способом, то, как утверждается в документации, DOS будет в "неустойчивом" состоянии до тех пор, пока не будет вызвана функция с номером старше 0cH. Тем не менее, такая техника успешно используется многими программами.

Вектор INT 24H ИГНОРИРУЕТСЯ для дисковых ошибок, встречающихся при INT 25H/26H

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

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