Этот приказ (см. таблицу ниже) определяет дополнительные особенности обработки прерываний контроллером i8259А. Данный приказ посылается в порт 21h.
Таким образом, приказы инициализации задают контроллеру режимы работы в условиях вложенных прерываний. Если требуется конкретизировать порядок обработки для отдельных уровней прерываний, необходимо использовать специальные операционные управляющие слова — OCW, назначение и форматы которых мы рассмотрим ниже.
После введения в процессоры прерывания как способа реакции на асинхронные события оказалось, что этот же механизм удобно использовать для обращения к подпрограммам, наряду с обычной командой call.
Особенности вызова-возврата при прерывании:
1) сохранение большей части контекста, чем при выполнении call,
2) хранение адреса перехода в определенном месте (в векторе прерывания).
Эти особенности в некоторых случаях могут дать определенные преимущества.
В системах команд многих процессоров есть команда (команды) программных прерываний (software interrupt), позволяющие запустить механизм прерывания программно. Чаще всего для таких команд используются мнемоники int (от interrupt — прерывание) или trap (англ. ловушка). Команда обычно имеет один параметр, указывающий номер прерывания (т.е. фактически задающей адрес вектора — местоположение ячеек, хранящих адрес перехода на соответствующую подпрограмму).
В виде программных прерываний оформляют во многих операционных системах обращения к стандартным функциям ОС. Преимуществом такого способа является то, что разработчики ОС могут свободно модифицировать как код, реализующий системную функцию, так и его расположение в адресном пространстве, оставляя неизменным лишь адрес вектора, через который происходит обращение к этой системной функции. Таким образом, прикладная программа оказывается относительно независимой от версии ОС, если сохраняется интерфейс функции и адрес вектора.
Этот приказ (см. таблицу ниже) предназначен для управления регистром масок IMR для маскирования прерываний конкретных уровней. Данный приказ посылается в порт 21h.
В дальнейшем описании предполагается, что используется "свободное" прерывание.
1. Если используется аппаратное прерывание, предусмотреть соединение источника запроса с одним из свободных входов запроса. Вход надо выбирать с учетом требуемого приоритета добавляемого прерывания и возможностей контроллера прерываний по управлению приоритетами. Если используется программное прерывание, надо убедиться, что выбранный вектор свободен.
2. Написать подпрограмму реакции на запрос (обработчик, handler). Не забыть обеспечить в ней сохранение контекста на входе в обработчик и его восстановление на выходе из прерывания (иногда существуют соглашения о "свободных регистрах"). Выход надо делать командой возврата из прерывания. Примите решение, допускаете ли Вы вложенные прерывания, и, если да, то в обработчике надо разрешить прерывания процессору, так как обычно при входе в прерывания повторные прерывания процессору автоматически запрещаются.
3. Занести начальный адрес обработчика в ячейки вектора для выбранного прерывания. Это лучше делать явными присваиваниями в инициализирующей части Вашей программы.
4. Настроить контроллер прерываний на нужный режим: задать приоритет выбранного входа, задать форму сигнала запроса (для аппаратного прерывания).
5. Разрешить запрос прерывания от выбранного источника (для аппаратного прерывания).
6. Разрешить прерывания процессору.
Этот приказ (см. таблицу ниже) используется для управления приоритетом и учета особенностей завершения обслуживания прерывания в контроллере. Он определяет выполнение следующих действий:
Данный приказ посылается в порт 20h.