ВУЗ:
Составители:
71
му прерыванию назначен четырехбайтный вектор с номером в диапазоне
0h - FFh. Векторы определяют адреса подпрограмм обслуживания преры-
вания (ISR, Interrupt Service Routine) и размещаются в младшем килобайте
адресного пространства памяти в виде IP:CS (сегмент_ISR:смещение_ISR,
смещение записывается по младшему адресу).
Внешние прерывания вызываются сигналами на входах (см. Рис. 2.13)
запроса немаскируемого прерывания процессора (NMI) и маскируемого
прерывания (INTR). Маскируемые
прерывания игнорируются, если очи-
щен флаг I (Рис. 2.5).
немаски
ру
емое п
р
е
р
ывание
процессор
IRQ0
IRQ1
контроллер
прерываний
.
IRQ7
NMI
INTR
запросы от устройств
внутренние источники прерваний
команды INT исключения
INTA
Рис. 2.13 Источники прерываний
После завершения выполнения текущей команды процессор вырабаты-
вает сигналы подтверждения (INTA), получает по шине данных номер
прерывания от контроллера прерываний, сохраняет в стеке текущее со-
держимое Flags, CS, IP и приступает к выполнению ISR, загружая содер-
жимое вектора в CS, IP. В начале выполнения ISR процессор очищает
флаг I, запрещая дальнейшие прерывания. Если необходимо, в подпро-
грамме ISR можно разрешить дальнейшие прерывания, установив флаг I (с
помощью команды STI). Подпрограмма ISR должна заканчиваться коман-
дой IRET, которая загружает старые значения IP, CS, Flags из стека и т.о.
возобновляет работу прерванной программы.
Запросы от различных устройств в ПК обрабатываются контроллером
прерываний, который формирует сигнал INTR для процессора (Рис. 2.13).
Обычно это две микросхемы Intel8259, каждая из которых имеет
8 входов
прерываний. Запросам прерываний IRQ0-IRQ7 ПК соответствуют векторы
от 08h до 0Fh, а IRQ8-IRQ15 – векторы от 070h до 077h. Битовые маски,
позволяющие запрещать (маскировать) отдельные входы запросов преры-
ваний, находятся по адресам 021h и 0A1h для IRQ0-IRQ7 и IRQ8-IRQ15
соответственно.
К внутренним прерываниям относятся т.н. исключения – различного ро-
да ошибки, механизм для отлаживания программ, аварийные состояния и
командные прерывания INT:
• вектор 0 – возникает при ошибке деления;
71 му прерыванию назначен четырехбайтный вектор с номером в диапазоне 0h - FFh. Векторы определяют адреса подпрограмм обслуживания преры- вания (ISR, Interrupt Service Routine) и размещаются в младшем килобайте адресного пространства памяти в виде IP:CS (сегмент_ISR:смещение_ISR, смещение записывается по младшему адресу). Внешние прерывания вызываются сигналами на входах (см. Рис. 2.13) запроса немаскируемого прерывания процессора (NMI) и маскируемого прерывания (INTR). Маскируемые прерывания игнорируются, если очи- щен флаг I (Рис. 2.5). IRQ0 запросы от устройств процессор IRQ1 внутренние источники прерваний контроллер INTA прерываний INTR команды INT исключения . NMI IRQ7 немаскируемое прерывание Рис. 2.13 Источники прерываний После завершения выполнения текущей команды процессор вырабаты- вает сигналы подтверждения (INTA), получает по шине данных номер прерывания от контроллера прерываний, сохраняет в стеке текущее со- держимое Flags, CS, IP и приступает к выполнению ISR, загружая содер- жимое вектора в CS, IP. В начале выполнения ISR процессор очищает флаг I, запрещая дальнейшие прерывания. Если необходимо, в подпро- грамме ISR можно разрешить дальнейшие прерывания, установив флаг I (с помощью команды STI). Подпрограмма ISR должна заканчиваться коман- дой IRET, которая загружает старые значения IP, CS, Flags из стека и т.о. возобновляет работу прерванной программы. Запросы от различных устройств в ПК обрабатываются контроллером прерываний, который формирует сигнал INTR для процессора (Рис. 2.13). Обычно это две микросхемы Intel8259, каждая из которых имеет 8 входов прерываний. Запросам прерываний IRQ0-IRQ7 ПК соответствуют векторы от 08h до 0Fh, а IRQ8-IRQ15 векторы от 070h до 077h. Битовые маски, позволяющие запрещать (маскировать) отдельные входы запросов преры- ваний, находятся по адресам 021h и 0A1h для IRQ0-IRQ7 и IRQ8-IRQ15 соответственно. К внутренним прерываниям относятся т.н. исключения различного ро- да ошибки, механизм для отлаживания программ, аварийные состояния и командные прерывания INT: • вектор 0 возникает при ошибке деления;
Страницы
- « первая
- ‹ предыдущая
- …
- 69
- 70
- 71
- 72
- 73
- …
- следующая ›
- последняя »