11/01/94 09:34pm
prer_ap.lek
П.Нортон, Р.Уилтон "IBM PC и PS/2
руководство по
программированию" перевод
В.Н.Григорьева М "Радио и
связь" 1994
Роберт Журден "Справочник
программиста на компьютере фирмы
IBM"
Ю.М.Казаринов "Микропроцессорный
комплект К1810 структура,
программирование, применение"
справочная книга М "Высшая
школа" 1990
В.Б.Бродин, И.И.Шагурин
"Микропроцессор i486. Архитектура,
программирование, интерфейс" М
"Диалог-МИФИ" 1993
Аппаратные прерывания
Прерывание - приостановление работы одной программы и передача управления другой при возникновении некоторого независящего от них события.
АППАРАТНЫЕ
ПРЕРЫВАНИЯ - прерывания, вызванные
процессами в аппаратуре
вычислительной системы. Источником
такого прерывания может быть сам
микропроцессор (не программа, а
само оборудование
микропроцессора!).
Аппаратные прерывания, вызываемые
самим микропроцессором.
Существует несколько зарезервированных за микропроцессором прерываний. Они возникают при обнаружении оборудованием процессора некорректных ситуаций в программе пользователя. Такие перывания называются ИСКЛЮЧЕНИЯМИ.
Исключения делятся на:
ОТКАЗЫ (faults) - выявляются и обслуживаются перед выполнением команды. Они могут иметь место в виртуальной системе памяти, когда процессор обращается к несуществующим странице или сегменту. В процессе обработки такого исключения операционная система обращается к странице или сегменту на диске, а микропроцессор перезапускает команду;
ЛОВУШКИ (traps) - прерывания возникающие непосредственно после выполнения команды автоматически или после выполнения соответствующей команде INT;
ВЫХОДЫ ИЗ ПРОЦЕССА (aborts) - возникают при обнаружении крупных, неисправимых ощибок в системных таблицах или оборудовании.
ОШИБКА ДЕЛЕНИЯ (0h) генерируется сразу после выполнения команд деления DIV и IDIV, если формат частного превышает формат получателя или в случае деления на 0.
ПОШАГОВОЕ ВЫПОЛНЕНИЕ (1h) вырабатывается если установлен флаг трассировки TF, после выполнения каждой каманды, кроме команд изменяющих содержимое сегментных регистров. Используется при отладке. Управление битом трассировки вазможно косвенным образом, поместив регистр флагов в стек и после модификации бита 8 возвратив на место.
ПРЕРЫВАНИЕ КОНТРОЛЬНОЙ ТОЧКИ (3h) по существу является программным прерыванием, но в отличии от остальных вызавается однобайтовой камандой INT3, что делает ее более удобной при подстановке в отлаживаемую программу особенно при работе в кодах.
ПЕРЕПОЛНЕНИЕ (4h) генерируется по однобайтовой команде INTO, если установлен флаг переполнения OF при выполнении сложения или вычитания.
Описанные выше прерывания существовали в микропроцессорах i8086 и i8088. С появлением более современных микросхем список был расширен, но не совсем удачно: НЕКОТОРЫЕ ИЗ НОВЫХ ИСКЛЮЧЕНИЙ ИМЕЮТ НОМЕРА, СОВПАДАЮЩИЕ С НОМЕРАМИ ПЕРЫВАНИЙ ИСПОЛЬЗУЕМЫМИ РАНЕЕ ROM BIOS! Программист должен осторожно использовать дублирующиеся вектора.
Помимо расширения списка были внесены дополнения в существующие исключения.
Исключения в микропроцессоре i486.
Основные понятия, связанные с особенностями функционирования процессора:
1 Task State Segment (TSS) - Сегмент состояния задачи - область памяти для хранения контекста неактивной в настоящий момент задачи.
2 Local Descriptor Table (LDT) - Таблица локальных дескрипторов - таблица, содержащая базовые физические адреса и дополнительную информацию. Она необходима для преобразования адресов в "защищенном режиме".
0h - ОШИБКА ДЕЛЕНИЯ полностью соответствует базовуму варианту.
1h - ОТЛАДКА возникает при пошаговом выполнении; при обращении к TSS с с установленным битом ловушки (бит T); при достижении контрольной точки, установленной в регистрах DR0-DR3.
3h - КОНТРОЛЬНАЯ ТОЧКА полностью соответствует базовуму варианту.
4h - ПЕРЕПОЛНЕНИЕ полностью соответствует базовуму варианту.
5h - ПРЕВЫШЕНИЕ ГРАНИЦЫ МАССИВА происходит при выполнении команды BOUND, если содержимое адресуемого регистра выходит за указанные пределы.
6h - НЕРАЗРЕШЕННЫЙ КОД КОМАНДЫ попытка выполнения команды с несуществующим кодом или неразрешенным операндом; неверное использование префикса LOCK.
7h - ПРОЦЕССОР ПЛАВАЮЩЕЙ ТОЧКИ НЕ ДОСТУПЕН возникает есль обращение к сопроцессору запрещено. Соответствующая операция должна быть эмулирована.
8h - ДВОЙНАЯ ОШИБКА фиксируется, если при обслуживании исключений Ah..Dh возникло новое исключение с номером отличным от Eh. Если данное исключение возникает дважды, то работа процессора блокируется до сигнала "сброс" или до возникновения немаскируемого прерывания.
9h - ПРЕВЫШЕНИЕ СЕГМЕНТА АРИФМЕТИЧЕСКИМ СОПРОЦЕССОРОМ;
Ah - НЕРАЗРЕШЕННЫЙ СЕГМЕНТ TSS возникает при переключении задач при неверном TSS; отсутствии соответствующей LDR; нарушении защиты памяти; неверных значениях сегментных регистров.
Bh - ОТСУТСТВИЕ СЕГМЕНТА отращение к сегменту, находящемуся вне ОП.
Ch - ОШИБКА ОБРАЩЕНИЯ К СТЕКУ возникает при обращении к сегменту стека, отсутствующему в ОП; нарушение границы стека.
Dh - НАРУШЕНИЕ ОБЩЕЙ ЗАЩИТЫ нарушение защиты при обращении к памяти или порту; нарушение границ сегментов при обращении к таблице дескрипторов; неправильная загрузка регистра управления процессором; запись в ячейку доступную только для чтения; переключение на занятую задачу; передача управления сегменту данных; превышения максимальной длины команды (15 байт).
Eh - ОТСУТСТВИЕ ДОСТУПА К СТРАНИЦЕ имеет место при страничной адресации если текущая процедура не имеет достаточного уровня привилегий для вызова указанной страницы или происходит обращение к несуществующему разделу или странице.
10h - ОШИБКА ОПЕРАЦИИ С ПЛАВАЮЩЕЙ ТОЧКОЙ возникает при обнаружении ошибки если реакция на ошибки разрешена.
11h - ОШИБКА ВЫРАВНИВАНИЯ возможна если возникла ошибка и реакция разрешена. Требование по выравниванию: адрес должен быть кратен длине выбираемой информации.
Все указанные исключения можно вызвать искусственно, соответствующей командой программного прерывания.
Аппаратные прерывания, вызываемые внешними схемами.
Сигналы (запросы) внешних прерываний поступают в микропроцессор по двум линиям. Одна вызывает немаскируемое прерывание, реакция на которое осуществляется немедленно. Программа обслуживания этого прерывания имеет вектор 2h. Сигнал, приходящий по другой линии, вызывает маскируемое прерывание. Большая часть оборудования сигнализирует о необходимости связаться с процессором через запрос маскируемого прерывания. Для однозначной идентификации устройства используется однобайтовый код номера прерывания, передаваемый процессору если он подтвердил возможность прерывания.
Поскольку по
прерываниям работает несколько
независящих друг от друга
устройств запросы могут поступить
одновременно. Для разрешения
подобных конфликтов и для
формирования кода устройства
служит контроллер прерываний.
Компьютеры IBM PC/XT имели одну
микросхему обработки запросов
прерываний, а AT две, соединенные
специальным образом. Приоритеты
могут программно меняться, кроме
этого можно маскировать отдельные
прерывания.
Таблица аппаратных прерываний: (запрос - прерывание - функция)
0 - 08h - Запрос от таймера
1 - 09h - Контроллер клавиатуры
2 - 0Ah - Вторая микросхема в AT, XT286, PS50 + или вертикальный обратный ход луча EGA/VGA
3 - 0Bh - Запросы от COM2 или COM4
4 - 0Ch - Запросы от COM1 или COM3
5 - 0Dh - НЖМД в XT или запрос от LPT2 (AT)
6 - 0Eh - Запросы от контроллера НГМД
7 - 0Fh - Запросы от LPT1
8 - 70h - Часы реального времени в AT, XT286, PS50 +
9 - 71h - В AT, XT286, PS50 + программно переназначено на запрос 2
12 - 74h - Перывание от мыши в PS50 +
13 - 75h - Ошибка математического сопроцессора в AT, XT286, PS50 +
14 - 76h - Контроллер НЖМД в AT, XT286, PS50 +
Приоритеты прерываний и исключений:
Внешние прерывания проверяются и обрабатываются между выполнением команд программы. Немаскируемое прерывание имеет более высокий проиритет, чем маскируемое. Если встретился префикс блоккировки, повторения или замены сегмента, то запросы прерывания анализируются ПОСЛЕ ВЫПОЛНЕНИЯ следующей команды.
Запросы на обработку исключений генерируются внутренними блоками микропроцессора. Одна команда может быть причиной нескольких исключений, однако в каждый момент будет возникать только одно. Процессор будет обрабатывать возникающие ситуации и перезапускать команду до полного ее выполнения.
Последовательность проверок исключений:
1 Проверяются ловушки только что завершенной команды (пошаговый режим, прерывания по значению результата);
2 Проверяются отказы следующей команды по значениям регистров отладки;
3 Проверяется наличие запросов внешних прерываний;
4 Проверяются отказы сегментации, мешающие выборке следующей команды;
5 Проверяются отказы страничной организации (исключение Eh);
6 Проверяются отказы дешифрации (длина команды, возможность выборки операндов);
7 Проверяется возможность выполнения операции с плавающей точкой;
8 Проверяется наличие ошибки при операции с плавающей точкой если проверка включена.
Организация таблицы векторов прерывания.
Таблица содержит до 256 элементов. Если микропроцессор работает в РЕАЛЬНОМ режиме (используется 1-ый Мбайт памяти), то каждый элемент таблицы 4-х байтный адрес подпрограммы обработки прерывания.
В ЗАЩИЩЕННОМ режиме используются 8-байтовые дескрипторы типа "шлюз". Задачей шлюза является предоставление информации процессору для проверки условий защиты памяти.