Аппаратное обеспечение IBM PC

Обработка особых случаев


В арифметическом сопроцессоре имеются два механизма обработки ошибок, возникающих при выполнении различных команд. Первый механизм основан на генерации так называемого прерывания особого случая (INT10h). Это прерывание вырабатывается в том случае, когда происходит какая-нибудь ошибка (например, деление на нуль) при условии, что соответствующие биты масок особых случаев в регистре управления не установлены. При втором способе обработки ошибок все особые случаи маскируются (соответствующие биты управляющего регистра устанавливаются в единицу) и в случае ошибки сопроцессор в качестве результата возвращает некоторое заранее известное особое значение (нечисло, неопределенность или бесконечность).

Программист может выбирать между этими способами обработки ошибок, маскируя или разрешая прерывание по особому случаю. Если прерывание особого случая замаскировано, можно предложить следующий способ обнаружения ошибки:

  • сбросить флажки особых случаев в регистре сосотояния;
  • выполнить одну или несколько команд сопроцессора;
  • проверить состояние флажков особых случаев в регистре состояния, в частности, бит суммарной ошибки ES;
  • если какой-либо флажок установлен, вызвать программу обработки ошибочной ситуации;
  • в программе обработки ошибочной ситуации можно сбросить флажки особых случаев, записав соответствующее значение в регистр состояния.
  • Кроме того, после выполнения команды полезно проверить получившийся результат на принадлежность к множеству особых значений.

    Рассмотрим возможные особые случаи сопроцессора в реальном режиме.



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