Предыдущий раздел ПРЕРЫВАНИЯ И РЕЗИДЕНТНЫЕ ПРОГРАММЫ Следующая глава

19.1.2. Исключения

Кроме внешних аппаратных прерываний существуют также внутренние аппаратные прерывания, называемые обычно исключениями. Источником аппаратного сигнала исключения является одна из аппаратных схем самого ЦП. Он выдается в том случае, если при выполнении на ЦП очередной машинной команды возникла ситуация, требующая помощи со стороны системных программ. Например, если при выполнении на ЦП команды div (деление), получилось частное, величина которого превышает предельно допустимую величину для 16-битного регистра, то возникает исключение «деление на нуль». Стандартный обработчик данного исключения завершает выполнение программы, а также выводит соответствующее сообщение на экран.

В качестве второго примера рассмотрим исключение «трассировка». Данное исключение будет происходить при выполнении на ЦП каждой машинной команды, если установлен флаг TF в регистре FLAGS. В результате этого наша прикладная программа будет «спотыкаться» – по завершению каждой команды программы будет инициироваться обработчик исключения. Результат работы этого обработчика зависит от целей трассировки. Так как обычно она выполняется с целью обнаружения ошибок в программе, то обработчик данного исключения выполняет выдачу на экран содержимого регистров ЦП. Подобный обработчик исключений входит в состав системной программы, называемой отладчиком. Пример отладчика – Debug.

В завершение примера отметим, что в i8086 отсутствуют специальные команды для установки и сброса флага TF. Поэтому для выполнения требуемого действия отладчик должен: 1) с помощью команды pushf записать (скопировать) содержимое FLAGS в стек; 2) скорректировать слово в вершине стека, установив или сбросив бит 8; 3) с помощью команды popf выбрать слово из вершины стека и поместить его в регистр FLAGS.

 


Предыдущий раздел В начало Следующая глава