Прерывания
(классификация и описание)
Введение
Все прерывания в компьютере делятся на аппаратные, программные и исключения. Аппаратные прерывания могут быть маскируемыми и немаскируемыми. Маскируемые прерывания могут быть запрещены установкой флага IF, немаскируемые прерывания не могут быть запрещены и возникают при сбоях и ошибках аппаратуры (например, ошибка паритета памяти). Аппаратные прерывания - это запросы от периферийных устройств на обработку данных. Программные прерывания - это, как правило, вызов каких-либо функций DOS или BIOS, а также вызов пользовательских функций. Исключения возникают при возникновении какой-либо критической ошибки (например, деление на 0, отсутствие сопроцессора и т.д.) или при пошаговом выполнении программы (трассировка). Каждому прерыванию сопоставляется некоторая программа - обработчик прерывания, которая выполняет те или иные действия при возникновении прерывания. Для аппаратных прерываний обработчики, помимо всего прочего, выполняют управление аппаратурой. Обработчики программных прерываний обычно выполняют некоторые функции, в зависимости от входных параметров, заданных в регистрах, и могут возвращать результаты в регистрах или иным образом. Обработчики исключений выполняют специфические задачи, зависящие от конкретного случая (например, обработчик прерывания "деление на 0" обычно выдаёт сообщение об ошибке на экран). Для привязки каждого прерывания к его обработчику существует специальная таблица - так называемая таблица векторов прерываний, в которой для каждого прерывания хранится адрес обработчика в формате сегмент:смещение. Таблица располагается в памяти по абсолютному адресу 0x00000000 и собержит 256 ячеек - столько прерываний может быть в компьютере IBM PC. Сюда включены аппаратные и программные прерывания, а также исключения. Размер таблицы - 1024 байта, а размер ячейки - 4 байта (2 байта на сегмент и 2 на смещение). Некоторые ячейки в таблице векторов прерываний зарезервированы и не должны использоваться. Некоторые являются свободными и предназначены для установки пользовательских обработчиков.
Ниже представлены таблицы с описанием прерываний DOS, BIOS и некоторых других прерываний.
Прерывания BIOS
Номер прерывания | Описание |
0x00 | Деление на 0 |
0x01 | Пошаговый режим (отладка) |
0x02 | Немаскируемое прерывание |
0x03 | Точка останова (breakpoint) |
0x04 | Переполнение |
0x05 | Печать экрана (Print Screen) |
0x06 | Недопустимая команда (для 286 и выше) |
0x07 | Вызов отсутствующего сопроцессора |
0x08 | Таймер (IRQ0) |
0x09 | Клавиатура (IRQ1) |
0x0A-0x0F | IRQ2-IRQ7 |
0x10 | Видеосервис BIOS |
0x11 | Список оборудования |
0x12 | Размер нижней памяти (640 или 512Кб) |
0x13 | Дисковый ввод/вывод (работа с физическими секторами на низком уровне) |
0x14 | Обслуживание COM портов |
0x15 | AT функции (задержка, работа с джойстиком и др.) |
0x16 | Клавиатурный ввод/вывод (чтение клавиш и др.) |
0x17 | Обслуживание LPT портов |
0x18 | ROM-Basic |
0x19 | Начальная загрузка |
0x1A | Системное время |
0x1B | Обработчик Ctrl+Break |
0x1C | Процедура, вызываемая обработчиком INT 08h (заглушка) |
0x1D | Адрес таблицы параметров дисплея |
0x1E | Адрес таблицы параметров дисковода |
0x1F | Адрес таблицы графических символов |
0x33 | Функции драйвера мыши |
0x40 | Функции BIOS для дискет |
0x41 | Параметры жёсткого диска 0 |
0x42 | Перемещённый обработчик видео |
0x43 | Знакогенератор EGA |
0x44 | Nowell Netware API |
0x45 | Зарезервировано |
0x46 | Параметры жёсткого диска 1 |
0x47-0x49 | Зарезервировано |
0x4A | Будильник пользователя |
0x67 | Память EMS |
Прерывания DOS
Номер прерывания | Описание |
0x20 | Завершение программы (обычно, для COM файлов) |
0x21 | Обращение к функциям DOS |
0x22 | Адрес обработчика завершения задачи |
0x23 | Адрес обработчика Ctrl+Break |
0x24 | Адрес обработчика критической ошибки |
0x25 | Чтение логических секторов |
0x26 | Запись логических секторов |
0x27 | Создание резидентной программы |
0x28 | Ожидание нажатия клавиши |
0x29 | Вывод символа (используется DOS) |
0x2A | Сеть Microsoft |
0x2B-0x2D | Зарезервировано |
0x2E | Выполнение команды DOS |
0x2F | Мультиплексное прерывание (связь процессов) |
0x30-0x32 | Зарезервировано |
0x34-0x3E | Зарезервировано |
0x3F | Обработчик оверлеев |
Другие прерывания
Номер прерывания | Описание |
0x4B-0x5F | Зарезервировано |
0x60-0x63 | Резерв прикладных программ |
0x64 | Nowell Netware API |
0x65-0x66 | Резерв прикладных программ |
0x68-0x6F | Зарезервировано |
0x78-0x79 | Зарезервировано |
0x7A | Nowell Netware API |
0x7B-0x7F | Зарезервировано |
0x80-0xF0 | Зарезервировано для ROM BASIC |
0xF1-0xFF | Резерв прикладных программ |
Примечание: Некоторые приведённые выше прерывания DOS (например, 0x28h, 0x29) являются недокументированными. Это означает, что в последующих версиях DOS они могут быть заменены другими или вообще удалены. Использовать эти прерывания не рекомендуется.
Copyright © 1999 by HackMaster