Программные прерывания

Автор работы: Пользователь скрыл имя, 27 Февраля 2013 в 12:53, лекция

Описание работы

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

Файлы: 1 файл

14_Программные прерывания.doc

— 78.00 Кб (Скачать файл)

Однако, сигнал прерывания того же (или более низкого) уровня может придти между командой OUT 20h, AL и командой IRET. Поскольку блокировка нижележащих уровней в контроллере уже снята, возникает вложенное прерывание и повторный вход в ту же программу. Чтобы избежать этого, перед командой EOI выполняют команду запрета всех прерываний CLI. В результате вложенные прерывания запрещаются до выхода из обработчика. Прерывания не останутся запрещенными навсегда, т.к. команда IRET восстанавливает не только адрес возврата в регистры CS и IP, но и содержимое регистра флагов на момент прерывания. Если при этом содержимом регистра флагов возникло прерывание, значит флаг IF был установлен. Получается, что команда IRET в программе обработки аппаратного прерывания всегда восстанавливает установленное состояние флага IF, т.е. разрешает прерывания.

Запросы на прерывания, поступающие в ведущий контроллер (уровни IRQ0…IRQ7) блокируют только ведущий контролер, однако, запросы на прерывания, поступающие в ведомый контроллер (уровни IRQ8..IRQ15) блокируют уровни не только низших приоритетов в ведомом контроллере, но и уровни IRQ2..IRQ7 в ведущем контроллере. Поэтому в обработчиках прерываний уровней 8..15 следует предусматривать посылку команды конца прерываний в оба контроллера:

mov al, 20h

out 20h, al

out A0h, al

Типичными значениями масок для  ведущего и ведомого контроллеров являются: B8h и 9Dh соответственно. При отладке взаимодействия с компьютером аппаратуры, работающей в режиме прерываний, приходится анализировать содержимое внутренних регистров контроллера прерываний. Для этого существуют специальные команды контроллера. Если в порт 20h контроллера прерываний послать код 0Ah, то разрешается чтение входного регистра контроллера – регистра запросов IRR. Чтение осуществляется через порт 20h. Читая содержимое IRR, можно определить, на какие входы контроллера поступают сигналы аппаратуры. При этом надо иметь в виду, что регистрация процессором сигнала прерывания приводит к сбросу запроса соответствующего уровня в регистре запросов. Поэтому наблюдение запросов в регистре IRR следует выполнять либо при замаскированных, либо при запрещенных прерываниях.

Код 0Bh, посланный в тот же порт 20h, разрешает чтение регистра обслуживаемых запросов ISR. Чтение осуществляется через порт 20h. Т.о., можно установить, проходит ли сигнал прерывания в процессор (поскольку установка битов регистра ISR выполняется сигналом INTA, поступающим из процессора в контроллер после регистрации им сигнала прерывания).


Информация о работе Программные прерывания