Прерывания и особые ситуации: Реальный режим

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

 

В режиме реальной адресации поддерживается гораздо меньше прерываний и особых ситуаций, чем в защищенном режиме (см. Таблицу 3.1). Их обработка в современных процессорах производится совершенно аналогично тому, как это делалось в процессоре 8086.

Специальная таблица (см. рис. 3.1.), называемая таблицей векторов прерываний (Interrupt Vector Table – IVT) или просто таблицей прерываний, размещается в памяти по нулевому адресу (по умолчанию). Каждому вектору прерывания или особой ситуации в этой таблице соответствует 32-битное поле, которое содержит дальний указатель на процедуру обработчик. Процессор автоматически выбирает из памяти соответствующий указатель при поступлении прерывания или генерации особой ситуации, затем сохраняет в стеке текущие значения FLAGS, CS, IP, очищает биты IF, TF, AC регистра FLAGS и передает управление по считанному адресу (см. рис. 3.2.).

 

Таблица векторов прерываний в реальном режиме работы

Рис. 3.1. Таблица векторов прерываний в реальном режиме работы

 

Стек после вызова прерывания или особой ситуации в реальном режиме работы

Рис. 3.2. Стек после вызова прерывания или особой ситуации в реальном режиме работы

 

Начальный адрес таблицы векторов прерываний по умолчанию устанавливается нулевым. Но в процессорах, начиная с Intel286, он может быть переопределен путем программирования регистра IDTR с помощью команды LIDT. На практике для сохранения совместимости с программным обеспечением процессоров 8086/8088 такое переопределение обычно не использовалось.

Если при обработке поступившего запроса на прерывание при записи значений в стек процессор превышает предел стекового сегмента, то согласно документации Intel должно генерироваться прерывание 12. Однако на практике некоторые модели процессоров в такой ситуации могут вести себя иначе. Когда при поступлении запроса на прерывание значение в регистре стека (E)SP равно 1, 3 или 5, возможна полная остановка процессора (переход в режим останова, аналогично тому, как это происходит по команде HLT).