Главная / Эвм / Обработка аппаратных прерываний в реальном режиме

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

Механизм прерываний поддерживается на аппаратном уровне.

Таблица прерываний в реальном режиме состоит из 256 элементов, каждый из которых имеет длину в 4 байта и представляет собой дальний адрес (CS:IP) процедуры обработки прерываний. Таблица прерываний реального режима всегда находится в фиксированном месте физической памяти – с начального адреса 00000 по адрес 003FF.

Рассмотрим механизм обработки аппаратных прерываний в реальном режиме работы процессора. Выделяют три этапа:

1) прекращение выполнения текущей программы;

Это действие должно произойти так, чтобы потом вернуться и продолжить работу. Для этого необходимо сохранить содержимое регистров, так как они являются ресурсами, разделяемыми между программами.

Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags — состояние флагов после выполнения последней команды прерванной программы). Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров — должно обеспечиваться программистом.

Наиболее удобным местом хранения регистров является стек. После сохранения регистров в стеке микропроцессор сбрасывает бит флага IF (т. е.=0) (В стеке при этом записан регистр flags с еще установленным IF). Этим предотвращается возможность возникновения вложенных внешних прерываний и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы — обработчика вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti.

2) переход к выполнению и выполнение программы обработки прерывания;

Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания.

В реальном режиме микропроцессора допускается 256 источников — по количеству элементов таблицы векторов прерываний.

Структура элемента:

2 байта — значение смещения начала программы-обработчика прерывания от начала кодового сегмента

2 байта — значение базового адреса сегмента, в котором находится программа-обработчик.

Как определить адрес, по которому находится вектор прерывания с номером N?

Смещение эл-та таблицы векторов прерываний = N * 4

Полный размер таблицы? 4*256=1024

И так на втором этапе микропроцессор:

1. По номеру источника прерывания определяет смещение в таблице векторов прерываний

2. Помещает первые два байта в регистр IP

3. Помещает вторые два байта в регистр CS

4. Передыет управление по адресу CS:IP

Далее выполняется сама программа обработки прерывания. Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.

3) возврат управления прерванной программе;

Необходимо привести стек в состояние, в котором он был сразу после передачи управления данной процедуре. Для этого программист должен указать необходимые действия по восстановлению регистров и очистке стека. Этот участок необходимо защитить от возможного искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli.

Последние команды в в обработчике прерывания — sti, iret:

Sti — разрешить аппаратные прерывания (устанавливает флаг IF=1, не имеет операндов).

Iret — извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.

Оставить комментарий