Работа системы прерываний в реальном режиме

В реальном режиме работы в системе прерываний используется понятие вектора прерывания, поскольку для указания адреса программы обработки прерывания здесь требуется не одно значение, а два (значение для сегментного регистра кода и значение для указателя команд), то есть мы имеем дело не со скалярной величи­ной, а с «векторной», состоящей из двух скалярных.

Итак, каждый вектор прерывания состоит из четырех байтов, или двух слов: пер­вые два содержат новое значение для регистра IP, а следующие два — новое значе­ние для регистра CS. Таблица векторов прерывания занимает 1024 байт. Таким об­разом, в ней может быть задано 256 векторов прерываний. В процессоре i8086 эта таблица располагается на адресах 00000H-003FFH. Расположение этой таблицы в процессорах i80286 и в более поздних определяется значением регистра IDTR (Interrupt Descriptor Table Register — регистр таблицы дескрипторов прерываний). При включении или сбросе процессора i80x86 этот регистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и таким образом перейти на новую таблицу векторов прерываний.

Таблица векторов прерываний заполняется (инициализируется) при запуске сис­темы, но, в принципе, может быть изменена или перемещена.

Каждый вектор прерывания имеет свой номер, называемый номером прерывания, который указывает его место в таблице. Этот номер, помноженный на четыре (сдвиг на два разряда влево и заполнение освободившихся битов нулями) и сложенный с содержимым регистра IDTR, дает абсолютный адрес первого байта вектора пре­рываний в оперативной памяти.

Работа системы прерываний в реальном режиме - student2.ru 1 Программа, имеющая уровень привилегий 3. Иначе говоря, работающая в кольце защиты с номером 3.

Система прерываний 32-разрядных микропроцессоров j80x86__________________ 123

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

В IBM PC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние.

Внутренние прерывания, как мы уже знаем, возникают в результате работы про­цессора в ситуациях, которые нуждаются в специальном обслуживании, или при выполнении специальных команд (INT, INTO). Это следующие прерывания:

□ прерывание при делении на ноль (номер прерывания 0);

□ прерывание по флагу TF (Trap Flag — флаг трассировки) обычно исполь­
зуется специальными программами отладки типа DEBUG (номер прерыва­
ния 1);

□ прерывания, возникающие при выполнении команд INT (Interrupt — прерыва­
ние) и INTO (Interrupt if Overflow — прерывание по переполнению), называют­
ся программными.

В качестве операнда команды INT указывается номер прерывания, которое нужно выполнить, например INT 10H. Программные прерывания как средство перехода на соответствующую процедуру были введены для того, чтобы выполнение этой процедуры осуществлялось в привилегированном режиме, а не в обычном пользо­вательском.

Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства. Существует два специальных внешних сигнала среди входных сигналов процессо­ра, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (No Mask Interrupt — немаскируемое прерывание) и INTR (Interrupt Request — запрос на прерывание). Соответственно, внешние прерывания подразделяются на немаски­руемые и маскируемые.

Маскируемые прерывания генерируются контроллером прерываний по заявке оп­ределенных периферийных устройств2. Контроллер прерываний (его обозначение i8259A) поддерживает восемь уровней (линий) приоритета; к каждому уровню «привязано» одно периферийное устройство3. Маскируемые прерывания часто называют аппаратными прерываниями.

Работа системы прерываний в реальном режиме - student2.ru 1 Флаг трассировки — специальный бит в регистре PSW (Program Status Word — слово состояния
программы), который в случае равенства единице вызывает приостанов после каждой команды и
генерирует прерывание для организации режима отладки с пошаговым выполнением программы.
Чаще всего регистр PSW в микропроцессорах Intel 80x86 называют регистром флагов.

2 Сигнал запроса па прерывание чаще всего является сигналом готовности внешнего устройства (со­
ответствующего контроллера внешнего устройства) на выполнение следующей команды, связанной
с управлением операциями ввода-вывода.

3 В качестве внешнего периферийного устройства, занимающего одну линию запроса на прерывание,
может быть использовано специальное управляющее устройство, которое позволяет разделять эту
самую линию запроса между несколькими внешними устройствами.

124_______________ Глава 4. Особенности архитектуры микропроцессоров i80x86

Как известно, прерывания могут быть инициированы внешним устройством ПЭВМ или специальной командой прерывания из программы. В любом случае если пре­рывания разрешены, то выполняется следующая процедура.

1. В стек помещается регистр флагов PSW.

2. Флаг включения-выключения прерываний IF и флаг трассировки TF, находя­
щиеся в регистре PSW, обнуляются для блокировки других маскируемых пре­
рываний и исключения пошагового режима исполнения команд.

3. Значения регистров CS и IP сохраняются в стеке вслед за PSW.

4. Вычисляется адрес вектора прерывания и из вектора, соответствующего номе--
ру прерывания, загружаются новые значения IP и CS.

Когда системная подпрограмма принимает управление, она может разрешить сно­ва маскируемые прерывания командой STI (Set Interrupt Flag — установить флаг прерываний), которая переводит флаг IF в состояние 1, что разрешает микропро­цессору вновь реагировать на прерывания, инициируемые внешними устройства­ми, поскольку стековая организация допускает вложение прерываний друг в друга.

Закончив работу, подпрограмма обработки прерывания должна выполнить команду IRET (Interrupt Return), которая извлекает из стека три 16-разрядных значения и загружает их в указатель команд IP, регистр сегмента команд CS и регистр PSW соответственно. Таким образом, процессор сможет продолжить работу с того мес­та, где он был прерван.

В случае внешних прерываний процедура перехода на подпрограмму обработки прерывания дополняется следующими шагами.

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

2. Микропроцессор проверяет флаг IF в регистре PSW. Если он установлен в 1, то
переходим к шагу 3. В противном случае работа процессора не прерывается.
Часто говорят, что прерывания замаскированы, хотя правильнее говорить, что
они отключены. Маскируются (запрещаются) отдельные линии запроса на пре­
рывания посредством программирования контроллера прерываний.

3. Микропроцессор генерирует сигнал INTA (подтверждение прерывания). В от­
вет на этот сигнал контроллер прерываний посылает по шине данных номер
прерывания. После этого выполняется описанная ранее процедура передачи
управления соответствующей программе обработки прерывания.

Номер прерывания и его приоритет устанавливаются на этапе инициализации си­стемы. После запуска ОС пользователь, как мы уже отмечали, может изменить таблицу векторов прерываний, поскольку она ему доступна.

Наши рекомендации