Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

142

mov ds,dx

mov dx,offset int_hook

int 21h

...

...

...

lds dx,old_hook mov ah,25h

mov al,63h int 21h

6.5.5. Распределение номеров прерываний

Как уже говорилось, в памяти отводится место под 256 векторов прерываний (1 Кбайт). Некоторые из них практически не используются; к другим, наоборот, обращается каждая программа.

В табл. 6.3 показана таблица векторов прерываний, чтобы вы имели представление о ее составе.

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

Номер вектора

Адрес вектора

Назначение вектора

 

 

 

 

 

 

 

 

00h

00000h

Внутренне прерывание генерируется CPU при попытке

 

 

деления на нуль

 

 

 

 

 

 

 

 

 

 

 

01h

00004h

Внутреннее

 

прерывание пошагового

выполнения

 

 

программы. Генерируется после выполнения каждой

 

 

машинной команды, если в слове флагов установлен

 

 

бит пошаговой трассировки TF. Используется

 

 

отладчиками

 

 

 

 

 

 

 

 

 

02h

00008h

Аппаратное немаскируемое прерывание. Обычно

 

 

генерируется при ошибке четности в оперативной

 

 

памяти и при запросе прерывания от сопроцессора

 

 

 

 

 

 

 

03h

0000Ch

Программное

прерывание

для

 

трассировки.

 

 

Генерируется

при

выполнении

 

однобайтовой

 

 

машинной команды с кодом CCh и обычно

 

 

используется отладчиками для установки точки

 

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

04h

00010h

Внутреннее

 

прерывание

генерируется,

когда

 

 

арифметический результат приводит к переполнению

 

 

 

05h

00014h

Аппаратное прерывание от нажатия клавиши

 

 

PrintScreen (печать экрана)

 

 

 

 

 

 

 

06h

00018h

Внутреннее прерывание недопустимого кода операции

 

 

или длина команды больше 10 байт

 

 

 

 

 

 

 

 

 

07h

0001Ch

Особый

случай

отсутствия

арифметического

 

 

сопроцессора

 

 

 

 

 

 

 

 

 

08h

00020h

IRQ0 — аппаратное прерывание от системного таймера

 

 

(генерируется 18,2 раза в секунду)

 

 

 

 

 

 

 

 

 

09h

00024h

IRQ1 — аппаратное

прерывание

от

клавиатуры.

 

 

Генерируется при каждом нажатии и отпускании

 

 

клавиши. Используется для чтения данных из

 

 

клавиатуры

 

 

 

 

 

 

 

 

 

 

0Ah

00028h

IRQ2 — используется для каскадирования аппаратных

 

 

прерываний

 

 

 

 

 

 

 

 

 

 

0Bh

0002Ch

IRQ3 — аппаратное прерывание от последовательного

 

 

порта COM2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.sklyaroff.ru

 

 

 

 

 

 

 

143

 

 

 

 

 

Таблица 6.3. (продолжение)

 

 

 

 

 

0Ch

00030h

IRQ4 — аппаратное прерывание от последовательного

 

 

 

порта COM1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0Dh

00034h

IRQ5 — аппаратное

прерывание

от

параллельного

 

 

 

порта LPT2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0Eh

00038h

IRQ6 — аппаратное

прерывание

от

гибкого

диска.

 

 

 

Генерируется контроллером НГМД после завершения

 

 

 

операции ввода/вывода

 

 

 

 

 

 

 

 

 

 

 

 

 

0Fh

0003Ch

IRQ7 — аппаратное

прерывание

от

параллельного

 

 

 

порта LPT1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10h

00040h

Программы BIOS обслуживания видеосистемы

 

 

 

 

 

 

 

 

 

11h

00044h

Определение конфигурации устройств в системе

 

 

 

 

 

 

 

 

 

12h

00048h

Определение размера оперативной памяти

 

 

 

 

 

 

 

 

 

13h

0004Ch

Программы BIOS обслуживания дисков

 

 

 

 

 

 

 

 

 

 

14h

00050h

Программы

BIOS

обслуживания

последовательного

 

 

 

порта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15h

00054h

Расширенный сервис

 

 

 

 

 

 

 

 

 

 

 

 

16h

00058h

Программы BIOS обслуживания клавиатуры

 

 

 

 

 

 

 

 

 

17h

0005Ch

Программы BIOS обслуживания принтера

 

 

 

 

 

 

 

 

 

 

 

18h

00060h

Запуск BASIC в ПЗУ, если он есть

 

 

 

 

 

 

 

 

 

 

 

 

19h

00064h

Перезагрузка операционной системы

 

 

 

 

 

 

 

 

1Ah

00068h

Программы BIOS обслуживания часов реального

 

 

 

времени

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1Bh

0006Ch

Обработчик

прерывания,

возникающего,

если

 

 

 

пользователь нажал комбинацию клавиш <Ctrl+Break>

 

 

 

 

 

1Ch

00070h

Вектор для прикладной обработки прерываний от

 

 

 

системного таймера

 

 

 

 

 

 

 

 

 

 

 

1Dh

00074h

Адрес таблицы видеопараметров, используемой

 

 

 

программами BIOS

 

 

 

 

 

 

 

 

 

 

 

1Eh

00078h

Адрес таблицы параметров дискеты, используемой

 

 

 

программами BIOS

 

 

 

 

 

 

 

 

 

 

 

1Fh

0007Ch

Указатель на графическую таблицу для символов с

 

 

 

кодами ASCII 128-255

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

21h

00084h

Диспетчер функций DOS

 

 

 

 

 

 

 

 

 

 

22h

00088h

Адрес возврата в родительский процесс после

 

 

 

завершения текущего

 

 

 

 

 

 

 

 

 

 

23h

0008Ch

Адрес обработчика системы DOS, активизируемого

 

 

 

нажатием клавиш <Ctrl>+<C>

 

 

 

 

 

 

 

 

 

 

 

 

24h

00090h

Адрес обработчика DOS критических ошибок

 

 

 

 

 

 

 

25h

00094h

Активизирует службу DOS для чтения данных с диска

 

 

 

по абсолютным адресам

 

 

 

 

 

 

 

 

 

 

26h

00098h

Активизирует службу DOS для записи данных с диска

 

 

 

по абсолютным адресам

 

 

 

 

 

 

 

 

 

 

27h

0009Ch

Завершает работу программы, но оставляет ее в памяти

 

 

 

под наблюдением DOS

 

 

 

 

 

 

 

 

 

 

2Fh

000BCh

Программное прерывание, используемое для связи с

 

 

 

резидентными программами

 

 

 

 

 

 

 

 

 

 

33h

000CCh

Программы обслуживания мыши, реализуемые в

 

 

 

драйвере мыши

 

 

 

 

 

 

 

 

 

 

 

43h

0010Ch

Указывает набор графических знаков (EGA, PS/2)

 

 

 

 

 

 

 

 

 

 

 

 

http://www.sklyaroff.ru

 

 

 

 

 

144

 

 

 

 

Таблица 6.3. (окончание)

 

 

 

 

 

4Ah

00128h

Вектор для прикладной обработки прерываний от

 

 

 

будильника (часов реального времени)

 

 

 

 

 

 

 

 

60h...67h

00180h...0019Ch

Свободные векторы для использования прикладными

 

 

 

программами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

68h...6Fh

001A0h...001BCh

Не используются

 

 

 

 

 

 

 

 

 

 

70h

001C0h

IRQ8 — аппаратное прерывание от будильника (часов

 

 

 

реального времени)

 

 

 

 

 

 

 

 

 

 

 

 

71h

001C4h

IRQ9 — аппаратное

прерывание от

подключенной к

 

 

 

компьютеру нестандартной аппаратуры

 

 

 

 

 

 

 

 

 

72h

001C8h

IRQ10 — используется

дополнительными

 

 

 

устройствами

 

 

 

 

 

 

 

 

 

 

 

73h

001CCh

IRQ11 — используется

дополнительными

 

 

 

устройствами

 

 

 

 

 

 

 

 

 

 

 

 

74h

001D0h

IRQ12 — прерывание от мыши PS/2-типа

 

 

 

 

 

 

 

75h

001D4h

IRQ13 — аппаратное прерывание от арифметического

 

 

 

сопроцессора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

76h

001D8h

IRQ14 — аппаратное

прерывание

от

первого

IDE-

 

 

 

контролера "операция завершена"

 

 

 

 

 

 

 

 

 

 

 

 

 

77h

001DCh

IRQ15 — аппаратное

прерывание

от

второго

IDE-

 

 

 

контролера "операция завершена"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

78h...7F

001DCh...001FCh

Зарезервировано

 

 

 

 

 

 

 

 

 

 

 

 

 

 

80h...85h

00200h...00214h

Зарезервировано для BASIC

 

 

 

 

 

 

 

 

 

 

 

 

86h...F0h

00218h...003C0h

Используются интерпретатором BASIC

 

 

 

 

 

 

 

 

 

F1h...FFh

003C4h...003FCh

Зарезервировано для временного

использования

 

 

 

программистом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Большинство векторов прерываний содержат адреса обработчиков прерываний. Однако некоторые номера прерываний просто указывают на различную служебную информацию. Например, прерывание 1Eh содержит адрес, по которому хранятся параметры инициализации дисковода для дискет; вектор прерывания 1Fh указывает на битовые комбинации, используемые BIOS при выводе на экран дисплея знаков текста, а прерывания 41h и 46h указывают на параметры жесткого диска.

Такие векторы прерываний не используются для выполнения прерываний. Если, к примеру, вы попытаетесь выполнить прерывание 1Eh, то, скорее всего, вызовите аварийный сбой в работе программы, т. к. вектор 1Eh указывает на данные, а не на выполняемый код.