Системное программное обеспечение персональных ЭВМ


Пример 1



Пример 1

u 0 i r c l l o

    где
  • u - диск (1) или другое устройство (0);
  • i - разрешено игнорировать (1);
  • r - разрешено повторить (1);
  • c - разрешено снять (1);
  • ll - локализация места ошибки на диске (00 - системная область, 01 - таблица размещения файлов, 10 - каталог, 11 - область данных), имеет смысл только при u=1;
  • o - операция чтения (0) или записи (1).

  • Если в регистре AH бит u=1, то регистр AL содержит логический номер диска.
  • Регистры BP:SI указывают не заголовок драйвера устройства, на котором произошла ошибка.
  • Регистр DI (младший его байт) содержит код ошибки. Возможны следующие коды:

    0-запись на защищенный диск;9-нет бумаги в принтере;
    1-неизвестное устройство;    10-ошибка записи;
    2-дисковод не готов;    11-ошибка чтения;
    3-неизвестная команда;    12-общий сбой;
    4-ошибка CRC (циклического кода проверки);    13-нарушение режима разделения;
    5-неправильная структура запроса    14-нарушение блокировки;
    6-ошибка поиска;    15-ошибка замены диска;
    7-неизвестный тип диска;    16-недоступен FCB;
    8-не найден сектор;    17-буфер режима разделения переполнен.

    Обработчик критической ошибки должен вернуть в регистре AX код решения:

    0- игнорировать ошибку;
    1- повторить операцию;
    2- завершить программу;
    3- снять системный вызов, в котором произошла ошибка.

    Из обработчика критической ошибки нельзя обращаться к функциям DOS с номерами выше 0x0C, исключение составляет функция 0x59, о которой будет сказано ниже.

    В программном примере 14.1 устанавливается собственный обработчик ошибки, который запоминает информацию об ошибке и заканчивается с кодом 3 - снять системный вызов. Информация об ошибке затем распечатывается.

    Ошибочные ситуации, которые возникают при работе примера 14.1, - чтение информации с неготового диска и вывод на неготовый принтер. Читатель может самостоятельно расширить пример другими сбойными ситуациями.




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