Прерывания
(классификация и описание)
![]()
Введение
Все прерывания в компьютере делятся на аппаратные, программные и исключения. Аппаратные прерывания могут быть маскируемыми и немаскируемыми. Маскируемые прерывания могут быть запрещены установкой флага 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