Прерывания и особые ситуации: Приоритеты исключений FPU

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

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

Приоритеты исключений распределены следующим образом:

  1. "Недействительная операция":
    • обращение к пустому стеку;
    • переполнение стека;
    • неподдерживаемый формат операнда;
    • операнд SNaN.
  2. Операнд QNaN. Данный случай не является исключением, но он может маскировать исключения с меньшим приоритетом, например, деление QNaN на нуль не вызывает исключения "деление на нуль", а возвращает результатом QNaN.
  3. Любые другие источники исключения "недействительная операция", кроме названных выше, а также исключение "деление на нуль".
  4. "Денормализованный операнд", если замаскировано, то дает возможность к возникновению исключений с меньшим приоритетом.
  5. "Переполнение" и "антипереполнение".
  6. "Неточный результат".

Исключения "недействительная операция", "деление на нуль", "денормализованный операнд" генерируются до начала выполнения вызвавшей их команды. Когда они не замаскированы, не происходит никаких изменений операндов в регистрах и памяти, управление сразу передается в обработчик исключений. Другие же исключения — "переполнение", "антипереполнение" и "неточный результат", генерируются по результатам выполнения команды. Поэтому, в зависимости от ситуации, процессор может изменять некоторые значения в стеке или памяти.