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

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

Внутренние прерывания характеризуются типом прерывания, который либо предопределен (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стек должен быть в том состоянии, в котором он был сразу после вызова подпрограммы обслуживания.

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