Лекции по Вычислительным машинам, системам и сетям   

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 были рассмотрены ранее.



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.