Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцесоры_Ответы.docx
Скачиваний:
21
Добавлен:
17.03.2016
Размер:
1.98 Mб
Скачать

Тема 5.1: Система команд i8086. Система переривів. Адресація пам’яті. Директиви передачі керування.

      1. Команди перериву за типом вектору. Синтаксис команд.

В процессе идентификации источника запроса ему ставился в соответствие восьмиразрядный двоичный код n  вектор прерывания, причем за каждым внутренним прерыванием и за внешним NMI жестко закреплялся свой вектор, а для запросов, поступивших по входу INTR, реализовывалась процедура ввода вектора с внешней шины. 11алее, определенный вектор прерывания рассматривался как номер строки таблицы, располагающейся с нулевого физического адреса памяти. Четырехбайтовыми элементами этой таблицы были адреса CS: IP точек входа в подпрограммы — обработчики прерываний. Таким образом, в системе поддерживалось до 256 различных обработчиков прерываний, причем векторы 0 — 31 резервировались за внутренними прерываниями (и NMI), а остальные — для внешних прерываний.

При идентификации источника запроса INTR выполняются следующие действия (при условии, что флаг IF = 1, иначе запрос INTR игнорируется):

1. Генерируется два цикла шины для ввода вектора внешнего прерывания.

2. Помещается в стек содержимое регистра FLAGS.

3. Помещается в стек содержимое регистра CS. Д

4. Помещается в стек содержимое регистра IP.

5. Сбрасывается в 0 флаг разрешения внешних прерываний IF, запрещая восприятие новых запросов по входу INTR до явной установки флага IF в 1 командой STI.

6. По значению вектора n обращаются к n-му элементу таблицы векторов прерываний и из нее загружаются новые значения регистров CS: IP.

7. Начинается выполнения обработчика прерывания с точки входа, определяемой CS: IP.

Сохраненное в стеке старое содержимое регистров CS: IP образует адрес возврата. Когда обработчик прерываний заканчивает свои действия, он должен выполнить команду возвратаIRET, которая, извлекая из стека содержимое FLAGS, CS, IP, возвращает управление прерванной программе.

Механизм реализации внешних и внутренних прерываний МП 80486 и Pentium в R-режиме аналогичен описанному выше, однако в P-режиме он значительно усовершенствован:

таблица векторов прерываний трансформирована в дескрипторную таблицу прерываний IDT (рис. 7.13);

более сложен процесс перехода к обработчику прерывания или особого случая;

 

 

Механизм передачи управления обработчику особого случая (прерывания) соответствует обычному способу передачи управления через шлюз вызова. При этом процессор аппаратно включает в стек значения EFLAGS, CS: EIP (адрес возврата) прерываемой программы и, кроме того, в некоторых случаях — код ошибки и текущие значения SS, ESP (последние — при смене привилегий).

Точное значение адреса возврата зависит от того, является ли особый случай нарушением, ловушкой или аварией. Первые 32 вектора зарезервированы за особыми случаями P-режима (табл. 7.1).

 

5.1.2. Команди перериву за переповненням. Синтаксис команд.

Программные прерывания, вызываемые исполнением команды INT хх, по действиям процессора аналогичны дальним вызовам подпрограмм (сохранение в стеке адреса возврата — регистров CS и IP— и передача управления по указанному адресу), но имеют некоторые отличия.

  • В начале выполнения прерывания процессор помещает в стек регистр флагов и сбрасывает бит разрешения прерывания IF (Interrupt Flag).

  • Вместо адреса вызываемой подпрограммы аргументом вызова (хх) является номер вектора прерывания (0-255).

  • По окончании выполнения процедуры по инструкции IRET процессор извлекает из стека кроме адреса возврата (инструкции, следующей за INT) и сохраненное значение регистра флагов.

Сброс бита прерывания не позволяет прервать выполнение процедуры прерывания до ее окончания или явного разрешения командой El (Enable Interrupt). Само программное прерывание исполняется независимо от состояния флага IF. Программные прерывания позволяют легко и быстро вызывать общеупотребимые процедуры (сервисы BIOS и DOS) из любого сегмента без применения дальних вызовов. Прерывание INT 3 традиционно используется в целях отладки программ для создания точки останова, в отличие от остальных программных прерываний, оно вызывается однобайтной инструкцией (код 0CCh). Внутренние прерывания вырабатываются процессором по особым условиям

  • прерывание типа 0 вырабатывается в случае переполнения при операции деления на 0;

  • прерывание типа 1 вырабатывается после выполнения каждой команды при установленном флаге трассировки TF,

  • прерывание типа 4 вырабатывается по команде INTO (Interrrupt Overflow), если установлен флаг переполнения OF