Программирование модемов

Таблица векторов прерываний



Таблица векторов прерываний

Для того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - адрес сегмента обработчика прерывания.

Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004 и т.д. Для программиста, использующего язык Си, таблицу можно описать следующим образом:

void (* interrupt_table[256])();

Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке DOS. DOS может переключить на себя некоторые прерывания BIOS.

Займемся теперь содержимым таблицы векторов прерываний. Приведем назначение некоторых наиболее важных векторов:



Номер Описание
0Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0). DOS обычно при обработке этого прерывания выводит сообщение об ошибке и останавливает выполнение программы. Для процессора 8086 при этом адрес возврата указывает на следующую после команды деления команду, а в процессоре 80286 - на первый байт команды, вызвавшей прерывание.
1Прерывание пошагового режима. Вырабатывается после выполнения каждой машинной команды, если в слове флагов установлен бит пошаговой трассировки TF. Используется для отладки программ. Это прерывание не вырабатывается после выполнения команды MOV в сегментные регистры или после загрузки сегментных регистров командой POP.
2Аппаратное немаскируемое прерывание. Это прерывание может использоваться по-разному в разных машинах. Обычно вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора.
3Прерывание для трассировки. Это прерывание генерируется при выполнении однобайтовой машинной команды с кодом CCh и обычно используется отладчиками для установки точки прерывания.
4Переполнение. Генерируется машинной командой INTO, если установлен флаг OF. Если флаг не установлен, то команда INTOвыполняется как NOP. Это прерывание используется для обработки ошибок при выполнении арифметических операций.
5Печать копии экрана. Генерируется при нажатии на клавиатуре клавиши PrtScr. Обычно используется для печати образа экрана. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за пределы заданного диапазона.
6Неопределенный код операции или длина команды больше 10 байт (для процессора 80286).
7Особый случай отсутствия математического сопроцессора (процессор 80286).
8IRQ0 - прерывание интервального таймера, возникает 18,2 раза в секунду.
9IRQ1 - прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры.
AIRQ2 - используется для каскадирования аппаратных прерываний в машинах класса AT.
BIRQ3 - прерывание асинхронного порта COM2. Это и следуюшее прерывания особенно важны нам, так как они используются при работе с последовательными портами (модемами).
CIRQ4 - прерывание асинхронного порта COM1.
DIRQ5 - прерывание от контроллера жесткого диска для XT.
EIRQ6 - прерывание генерируется контроллером флоппи-диска после завершения операции.
FIRQ7 - прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание. В некоторых случаях можно использовать это прерывание для работы с последовательными портами.
10Обслуживание видеоадаптера.
11Определение конфигурации устройств в системе.
12Определение размера оперативной памяти в системе.
13Обслуживание дисковой системы.
14Последовательный ввод/вывод.
15Расширенный сервис для AT-компьютеров.
16Обслуживание клавиатуры.
17Обслуживание принтера.
18Запуск BASIC в ПЗУ, если он есть.
19Загрузка операционной системы.
1AОбслуживание часов.
1BОбработчик прерывания Ctrl-Break.
1CПрерывание возникает 18,2 раза в секунду, вызывается программно обработчиком прерывания таймера.
1DАдрес видеотаблицы для контроллера видеоадаптера 6845.
1EУказатель на таблицу параметров дискеты.
1FУказатель на графическую таблицу для символов с кодами ASCII 128-255.
20-5FИспользуется DOS или зарезервировано для DOS.
60-67Прерывания, зарезервированные для пользователя.
68-6FНе используются.
70IRQ8 - прерывание от часов реального времени.
71IRQ9 - прерывание от контроллера EGA.
72IRQ10 - зарезервировано.
73IRQ11 - зарезервировано.
74IRQ12 - зарезервировано.
75IRQ13 - прерывание от математического сопроцессора.
76IRQ14 - прерывание от контроллера жесткого диска.
77IRQ15 - зарезервировано.
78 - 7FНе используются.
80-85Зарезервированы для BASIC.
86-F0Используются интерпретатором BASIC.
F1-FFНе используются.

IRQ0-IRQ15 - это аппаратные прерывания, о них будет рассказано позже.



Содержание раздела