7.4.3.4. Исключения
Исключения подразделяются на отказы, ловушки и выходы из
процесса в зависимости от способа их возникновения и от того, возможен ли
рестарт с вызвавшей их команды.
Отказы - это исключения, которые обнаруживаются либо
перед исполнением, либо
во время исполнения команды. При обнаружении во время исполнения команды сообщение об отказе
возникает вместе с переводом машины в состояние, которое позволяет осуществить рестарт с данной команды. Значения
регистра сегмента программы CS и
указателя команд EIP, сохраняемые при возникновении отказа, указывают на вызвавшую
отказ команду.
Ловушка возникает на границе команд сразу же после
команды, вызвавшей это исключение. Значения регистров CS и EIP, сохраненные при срабатывании
ловушки, указывают
на команду, следующую за вызвавшей срабатывание командой. Запоминаемые значения регистров CS и EIP отражают
изменения в нормальном порядке выполнения программы, если ловушка сработала на команде,
изменяющей этот
порядок. Например, если ловушка сработала на команде JMP, то в стеке запоминаются значения регистров CS и EIP,
указывающие на ссылку команды JMP, а не на непосредственно следующую за командой JMP команду.
Выход из процесса не позволяет ни осуществить рестарт
программы, ни точно локализовать команду, вызвавшую это исключение. Выходы из
процесса используются
для обнаружения крупных ошибок, таких как неразрешенные или несовместимые значения в системных
таблицах или аппаратные сбои.
Время,
которое проходит от запроса прерывания до его обработки, зависит от
нескольких факторов. Источник прерывания должен принимать
во внимание эту задержку.
На задержку влияет следующее:
если прерывание маскируемое, то запрос по входу INTR не воспринимается до тех пор, пока прерывания не
будут разрешены программно;
если в данный момент обрабатывается немаскируемое
прерывание, то запрос очередного немаскируемого прерывания не будет принят до тех пор, пока МП80386 не исполнит команду
возврата из прерывания IRET;
сохранение регистра флагов и других регистров требует
затрат времени;
если обработка прерывания требует переключения задач, то
на сохранение и восстановление
состояния задачи также должно быть потрачено время;
если в данный момент МП 80386 выполняет команду, то это
выполнение должно
быть завершено. С определенными исключениями (такими как пересылка строки, которая
разрешает прерывания после пересылки каждого блока) запрос прерывания опознается только на
границах команд.
Наибольшая задержка появляется в том случае, когда запрос
прерывания возникает
во время исполнения МП 80386 длительной по времени команды, такой как
умножение, деление или переключение задачи в защищенном режиме. Если команда
устанавливает флаг прерываний, разрешая тем самым прерывания, то прерывание не обрабатывается до
конца следующей команды.