Лекции по Вычислительным машинам, системам и сетям |
2. Микропроцессорный комплект К1810 |
2.15. Система прерываний ВМ86
В МП ВМ86 каждому источнику запроса на прерывание ставится в соответствие тип (номер) прерывания. Тип имеет формат 1 байт. Всего возможно 256 различных источников запросов. Чтобы МП по известному типу мог определить начальный адрес обработчика, в ОП создается таблица векторов прерываний. Каждый вектор представ-ляет собой пару «сегмент/смещение» и однозначно задает начальный адрес обработчика прерывания данного типа. В ОП вектор занимает 4 байта. Таблица прерываний ВМ86 всегда располагается в младшем килобайте ОП. Ее формат приведен на рис. 2.16. На рис. 2.16 displ и disph – соответ-ственно младший и старший байты смещения, а segl и segh – младший и старший байты сегмента. Из рис. 2.16 видно, что для определения адреса вектора достаточно взять тип и умножить его на 4. Так вычисляет адрес вектора МП.
Действия МП при любом прерывании можно формально описать следующим образом:
sp ß (sp) - 2 Аф = (ss)×16 + (sp) Аф ß (f) sp ß (sp) - 2 Аф = (ss)×16 + (sp) Аф ß (cs) sp ß (sp) - 2 Аф = (ss)×16 + (sp) Аф ß (ip) Аф = тип × 4 ip ß (Аф) Аф = тип × 4 + 2 cs ß (Аф) |
Рис. 2.16
Так как таблица прерываний располагается по младшим адресам ОП, то никакие сегментные регистры в формирова-нии адреса вектора участия не принимают. Помимо рассмотренных выше пунктов, МП также сбрасывает в ноль флаги if и tf, маскируя внешние прерывания и запрещая пошаговое выполнение обработчика.
Источники запросов для ВМ86 показаны в табл. 2.5. Рассмотрим кратко имеющиеся виды прерываний.
Прерывание по ошибке деления (divided overflow). Это прерывание возникает при выполнении команд деления div и idiv, если формат результата (частного) превышает формат регистра-приемника. То есть, с точки зрения МП, результат деления равен бесконечности. В частности, такая ситуация возникает при попытке деления на ноль.
Таблица 2.5
Источник запроса (вид прерывания) |
Тип |
Приоритет |
Прерывание по ошибке деления |
0 |
1 |
Прерывание по флагу tf |
1 |
4 |
Прерывание по входу NMI |
2 |
2 |
Прерывание по команде int3 |
3 |
1 |
Прерывание по команде into |
4 |
1 |
Программные прерывания (по команде int n, где n = 0 – 255) |
0 ‑ 255 |
1 |
Прерывания по входу INTR |
0 ‑ 255 |
3 |
Прерывание по флагу tf. Прерывание возникает после выполнения очередной команды программы, если флаг tf установлен в «1». При переходе к обработчику МП сбрасы-вает tf в ноль, поэтому обработчик выполняется не в пошаговом, а в автоматическом режиме. При возврате из обработчика по команде iret МП восстанавливает (выталкивает из стека) старое содержимое регистра флагов f. Флаг tf снова устанавливается в единицу и МП возвращается в пошаговый режим. Обработчик прерывания выводит на экран содержимое внутренних регистров МП.
Прерывание по команде int3. Это однобайтовая команда «прерывание в контрольной точке». Используется при отладке программы. Располагаются эти команды в критических местах программы (например, их туда может вставлять debugger). Обработчик этого прерывания также обычно выводит на экран содержимое регистров МП.
Прерывание по команде into. Команда проверяет состояние флага переполнения of, и если он установлен в единицу, происходит прерывание.
Прерывание по команде int n. Это двухбайтная команда, в которой n задает тип прерывания и может принимать значение от 0 до 255. Таким образом, с помощью такой команды можно вызвать любой обработчик. Команда int n представляет команду межсегментного вызова подпрограммы и подобна команде call far. Разница между этими командами в том, что int n занимает в памяти два байта, а call far – пять, int n сохраняет в стеке содержимое регистра флагов f, а call far не сохраняет. Команды int n используются для обращения к системным библиотечным подпрограммам (например, к средствам DOS и BIOS).
Прерывания по входам INTR и NMI были рассмотрены ранее.
Спасибо, что просмотрели данную страницу. Рекомендуем добавить ее в закладки ->