ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »
