MS-DOS для программиста
© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 254 стр.
Для того чтобы связать адрес обработчика
прерывания с номером прерывания, используется
таблица векторов прерываний , занимающая первый
килобайт оперативной памяти. Эта таблица
находится в диапазоне адресов от 0000:0000 до 0000:03FFh и
состоит из 256 элементов - дальних адресов
обработчиков прерываний.
Элементы таблицы векторов прерываний
называются векторами прерываний. В первом слове
элемента таблицы записана компонента смещения, а
во втором - сегментная компонента адреса
обработчика прерывания.
Вектор прерывания с номером 0 находится по
адресу 0000:0000, с номером 1 - по адресу 0000:0004 и т. д.
Для программиста, использующего язык С, таблицу
векторов прерываний можно описать следующим
образом:
void (far* interrupt_table[256])();
Инициализация таблицы выполняется частично
системой базового ввода/вывода BIOS после
тестирования аппаратуры и перед началом
загрузки операционной системой, частично при
загрузке MS-DOS. Операционная система MS-DOS может
изменить некоторые вектора прерываний,
установленные BIOS.
Расскажем о назначении наиболее важных
векторов прерываний.
Номер |
Описание |
0 |
Ошибка деления.Вызывается
автоматически после выполнения команд DIV или IDIV,
если в результате деления происходит
переполнение (например, при делении на 0). Обычно
при обработке этого прерывания MS-DOS выводит
сообщение об ошибке и останавливает выполнение
программы. При этом для процессора i8086 адрес
возврата указывает на команду, следующую после
команды деления, а для процессора i80286 и более
старших моделей - на первый байт команды,
вызвавшей прерывание |
1 |
Прерывание пошагового
режима.Вырабатывается после выполнения каждой
машинной команды, если в слове флагов установлен
бит пошаговой трассировки TF. Используется для
отладки программ. Это прерывание не
вырабатывается после пересылки данных в
сегментные регистры командами MOV и POP |
2 |
Аппаратное немаскируемое
прерывание.Это прерывание может использоваться
по-разному в разных машинах. Обычно оно
вырабатывается при ошибке четности в
оперативной памяти и при запросе прерывания от
сопроцессора |
3 |
Прерывание для
трассировки.Генерируется при выполнении
однобайтовой машинной команды с кодом CCh и обычно
используется отладчиками для установки точки
прерывания |
4 |
Переполнение. Генерируется машинной
командой INTO , если установлен флаг переполнения
OF. Если флаг не установлен, команда INTO
выполняется как NOP. Это прерывание используется
для обработки ошибок при выполнении
арифметических операций |
5 |
Печать копии экрана. Генерируется, если
пользователь нажал клавишу <PrtSc>. В программах
MS-DOS обычно используется для печати образа
экрана. Для процессора i80286 и более старших
моделей генерируется при выполнении машинной
команды BOUND, если проверяемое значение вышло за
пределы заданного диапазона |
6 |
Неопределенный код операции или длина
команды больше 10 байт |
7 |
Особый случай отсутствия
арифметического сопроцессора |
8 |
IRQ0 - прерывание интервального таймера,
возникает 18,2 раза в секунду |
9 |
IRQ1 - прерывание от клавиатуры.
Генерируется, когда пользователь нажимает и
отжимает клавиши. Используется для чтения данных
из клавиатуры |
A |
IRQ2 - используется для каскадирования
аппаратных прерываний |
B |
IRQ3 - прерывание асинхронного порта COM2 |
C |
IRQ4 - прерывание асинхронного порта COM1 |
D |
IRQ5 - прерывание от контроллера жесткого
диска (только для компьютеров IBM PC/XT) |
E |
IRQ6 - прерывание генерируется
контроллером НГМД после завершения операции
ввода/вывода |
F |
IRQ7 - прерывание от параллельного
адаптера. Генерируется, когда подключенный к
адаптеру принтер готов к выполнению очередной
операции. Обычно не используется |
10 |
Обслуживание видеоадаптера |
11 |
Определение конфигурации устройств в
системе |
12 |
Определение размера оперативной памяти |
13 |
Обслуживание дисковой системы |
14 |
Работа с асинхронным последовательным
адаптером |
15 |
Расширенный сервис |
16 |
Обслуживание клавиатуры |
17 |
Обслуживание принтера |
18 |
Запуск BASIC в ПЗУ, если он есть |
19 |
Перезагрузка операционной системы |
1A |
Обслуживание часов |
1B |
Обработчик прерывания, возникающего,
если пользователь нажал комбинацию клавиш
<Ctrl+Break> |
1C |
Программное прерывание, вызывается 18,2
раза в секунду обработчиком аппаратного
прерывания таймера |
1D |
Адрес видеотаблицы для контроллера
видеоадаптера 6845 |
1E |
Указатель на таблицу параметров дискеты
|
1F |
Указатель на графическую таблицу для
символов с кодами ASCII 128-255 |
20-5F |
Используется MS-DOS или зарезервировано
для MS-DOS |
60-67 |
Прерывания, зарезервированные для
программ пользователя |
68-6F |
Не используются |
70 |
IRQ8 - прерывание от часов реального
времени |
71 |
IRQ9 - прерывание от контроллера EGA |
72 |
IRQ10 - зарезервировано |
73 |
IRQ11 - зарезервировано |
74 |
IRQ12 - зарезервировано |
75 |
IRQ13 - прерывание от арифметического
сопроцессора |
76 |
IRQ14 - прерывание от контроллера жесткого
диска |
77 |
IRQ15 - зарезервировано |
78 - 7F |
Не используются |
80-85 |
Зарезервировано для BASIC |
86-F0 |
Используются интерпретатором BASIC |
F1-FF |
Не используются |
Прерывания, обозначенные как IRQ0 - IRQ15 являются
аппаратными прерываниями.
|