Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / I8086.DOC
Скачиваний:
89
Добавлен:
21.02.2014
Размер:
73 Кб
Скачать

Внутренние прерывания

Внутренние прерывания характеризуются типом прерывания, который либо предопределен (INTO, тип 4), либо содержится в коде команды INT n. При этом циклы #INTA не формируются. Внутренние прерывания не могут быть запрещены (кроме пошагового прерывания).

Прерывание по ошибке деления на 0 (тип 0) генерируется микропроцессором сразу после команды деления DIV, IDIV, если формат частного превышает формат приемника или в случае деления на 0.

Прерывание по переполнению (тип 4) генерируется по однобайтовой команде INTO, если установлен флаг OF.

Пошаговое прерывание (тип 1) вырабатывается автоматически при TF=1 после выполнения каждой команды (или пары команд, если первая команда изменяет содержимое сегментного регистра). При обработке этого прерывания МП включает в стек регистры F, CS, IP, а затем сбрасывает флаги IF и TF, поэтому после вызова подпрограммы обслуживания этого прерывания МП работает обычным способом, а не в пошаговом режиме. Подпрограмма обработки пошагового прерывания обычно осуществляет индикацию внутренних регистров МП и содержимого некоторых ячеек памяти и используется для отладки. Когда подпрограмма обработки пошагового прерывания завершается, из стека извлекаются прежние состояния флагов и МП снова переводится в пошаговый режим работы.

Состояние флага TF можно изменять, если содержимое регистра флагов предварительно поместить в стек с помощью команды PUSHF, а затем извлечь значение вершины стека в какой-либо рабочий регистр МП. После изменения флага TF в этом регистре выполняют обратную операцию засылки измененного значения рабочего регистра в стек и извлечения из него нового состояния регистра флагов с помощью команды POPF.

В пошаговом режиме МП реагирует на внешние и внутренние прерывания. Обычным путем (с включением в стек регистров CS,IP и F) осуществляется переход на подпрограмму обслуживания возникшего прерывания. Однако до выполнения первой команды подпрограммы обслуживания возникшего прерывания МП распознает пошаговое прерывание и управление передается сначала подпрограмме обработки пошагового прерывания типа 1, и лишь после ее завершения МП возвращается к выполнению подпрограммы возникшего прерывания.

Прерывание пользователем в программе осуществляется по 2-байтовой команде INT n, в которой тип прерывания указывается во 2-м байте команды. Команда INT n запоминает в стеке регистры CS, IP и F и выполняет межсегментный переход по вектору прерывания n.

Однобайтовая команда INT3 определена как прерывание контрольной точки (точки разрыва). Контрольной точкой может быть любое место в программе, где нормальное ее выполнение прерывается и производятся некоторые специальные действия. Контрольные точки обычно вводятся при отладке как средство индикации содержимого регистров, ячеек памяти, портов ВВ в критических местах программы. Эту команду можно также использовать, чтобы вставить дополнительный фрагмент программы без ее повторной трансляции.

Программа обслуживания прерывания

Связь между типом n и подпрограммой обслуживания прерывания устанавливается с помощью таблицы указателей векторов прерываний. Эта таблица занимает 1 Кб памяти с адресами 0..3FFh и содержит 256 указателей по 2 слова каждый, определяющих начальный логический адрес соответствующей подпрограммы обслуживания. Слово с большим адресом содержит базовый адрес кодового сегмента, а слово с меньшим адресом - смещение в кодовом сегменте. МП вычисляет адрес вектора путем умножения типа прерывания n на 4. При переходе на подпрограмму обслуживания смещение из вектора загружается в регистр IP, а адрес сегмента - в регистр CS.

Когда осуществляется переход на подпрограмму обслуживания прерывания, старое содержимое регистров F, CS и IP запоминается в стеке; флаг IF сбрасывается, тем самым запрещаются внешние прерывания по входу INTR, что нужно, например, для защиты начального участка подпрограммы обслуживания, в течение которого в стеке сохраняются внутренние регистры МП. Затем подпрограмма обслуживания может разрешить внешние прерывания командой STI.

В конце подпрограммы восстанавливают содержимое регистров из стека. Этот участок программы следует защитить с помощью команды CLI от прерываний по входу INTR. Подпрограмма обслуживания прерывания завершается командой IRET, которой предшествует команда STI, разрешающая внешние прерывания. Перед выполнением команды IRET стек должен быть в том состоянии, в котором он был сразу после вызова подпрограммы обслуживания.

Соседние файлы в папке лекции