ХАНДЫФАР
Инструкция INT n
Вызов прерывания
INT imm8 - Сгенерировать программное прерывание с вектором, указанным в imm8.
Инструкция INT n генерирует вызов обработчика прерываний или исключений, указанного в операнде назначения. Операнд назначения указывает вектор от 0 до 255, закодированный как 8-битное промежуточное значение без знака. Каждый вектор является индексом дескриптора канала в таблице прерываний.
Когда процессор работает в режиме виртуального 8086, IOPL определяет действие инструкции INT n. Если IOPL меньше 3, процессор генерирует исключение #GP(селектор); если IOPL равен 3, процессор выполняет прерывание в защищённом режиме с уровнем привилегий 0. Чтобы выполнить прерывание в защищённом режиме с уровнем привилегий 0, необходимо установить DPL на 3, а целевой CPL процедуры обработки прерываний — на 0.
Инструкции, следующие за INT n, могут быть извлечены из памяти до завершения выполнения предыдущих инструкций, но они не будут выполняться (даже спекулятивно) до тех пор, пока не будут выполнены все инструкции до INT n (более поздние инструкции могут выполняться до того, как данные, сохранённые предыдущими инструкциями, станут глобально видимыми).
В архитектуре 8086 коды прерываний делятся на три категории: системные (BIOS/DOS), отладочные и пользовательские. Ниже приведены наиболее часто используемые:
00h - Деление на ноль - Автоматически вызывается процессором при попытке деления на 0.
01h - Отладка (Step) - Вызывается при установленном флаге TF (режим пошаговой отладки).
03h - Отладка (Break)_- Вызывается инструкцией INT 3 (точка останова для отладчиков, например DEBUG).
04h - Переполнение_- Вызывается при установленном флаге OF.
08h - Таймер - Вызывается каждые ~55 мс (18 раз в секунду) для отсчета времени.
09h - Клавиатура - Вызывается при нажатии/отпускании клавиши (передает скан-код).
0Ah - Таймер (сброс) - Дополнительный обработчик таймера BIOS.
0Bh - Серийный порт 2 - Обработчик для второго серийного порта (COM2).
0Ch - Серийный порт 1 - Обработчик для первого серийного порта (COM1).
0Dh - Дискетта - Вызывается при ошибке чтения/записи на дискетту.
10h - Видео - Основной обработчик видеосистемы (вывод символов, установка режима экрана).
11h - Информация о ПК - Возвращает информацию о конфигурации компьютера (например, количество памяти).
12h - Размер памяти - Возвращает объем установленной оперативной памяти (в КБ).
13h - Дисковый ввод-вывод - Работа с дисками (чтение/запись секторов).
14h - Серийные порты - Конфигурация и работа с серийными портами.
15h - Дополнительные функции - Различные утилитарные функции (управление памятью, питанием).
16h - Клавиатура - Дополнительные функции работы с клавиатурой (чтение символа, проверка нажатия).
17h - Принтер - Работа с принтером (отправка данных, проверка статуса).
21h - DOS-вызов - Основной интерфейс DOS (работа с файлами, консолью, процессами).
Инструкция INT n
Вызов прерывания
INT imm8 - Сгенерировать программное прерывание с вектором, указанным в imm8.
Инструкция INT n генерирует вызов обработчика прерываний или исключений, указанного в операнде назначения. Операнд назначения указывает вектор от 0 до 255, закодированный как 8-битное промежуточное значение без знака. Каждый вектор является индексом дескриптора канала в таблице прерываний.
Когда процессор работает в режиме виртуального 8086, IOPL определяет действие инструкции INT n. Если IOPL меньше 3, процессор генерирует исключение #GP(селектор); если IOPL равен 3, процессор выполняет прерывание в защищённом режиме с уровнем привилегий 0. Чтобы выполнить прерывание в защищённом режиме с уровнем привилегий 0, необходимо установить DPL на 3, а целевой CPL процедуры обработки прерываний — на 0.
Инструкции, следующие за INT n, могут быть извлечены из памяти до завершения выполнения предыдущих инструкций, но они не будут выполняться (даже спекулятивно) до тех пор, пока не будут выполнены все инструкции до INT n (более поздние инструкции могут выполняться до того, как данные, сохранённые предыдущими инструкциями, станут глобально видимыми).
В архитектуре 8086 коды прерываний делятся на три категории: системные (BIOS/DOS), отладочные и пользовательские. Ниже приведены наиболее часто используемые:
00h - Деление на ноль _______- Автоматически вызывается процессором при попытке деления на 0.
01h - Отладка (Step) ________- Вызывается при установленном флаге TF (режим пошаговой отладки).
03h - Отладка (Break)_______ - Вызывается инструкцией INT 3 (точка останова для отладчиков, например DEBUG).
04h - Переполнение__________ - Вызывается при установленном флаге OF.
08h - Таймер ________________- Вызывается каждые ~55 мс (18 раз в секунду) для отсчета времени.
09h - Клавиатура ____________- Вызывается при нажатии/отпускании клавиши (передает скан-код).
0Ah - Таймер (сброс) ________- Дополнительный обработчик таймера BIOS.
0Bh - Серийный порт 2 _______- Обработчик для второго серийного порта (COM2).
0Ch - Серийный порт 1 _______- Обработчик для первого серийного порта (COM1).
0Dh - Дискетта ______________- Вызывается при ошибке чтения/записи на дискетту.
10h - Видео _________________- Основной обработчик видеосистемы (вывод символов, установка режима экрана).
11h - Информация о ПК _______- Возвращает информацию о конфигурации компьютера (например, количество памяти).
12h - Размер памяти _________- Возвращает объем установленной оперативной памяти (в КБ).
13h - Дисковый ввод-вывод ___- Работа с дисками (чтение/запись секторов).
14h - Серийные порты ________- Конфигурация и работа с серийными портами.
15h - Дополнительные функции - Различные утилитарные функции (управление памятью, питанием).
16h - Клавиатура ____________- Дополнительные функции работы с клавиатурой (чтение символа, проверка нажатия).
17h - Принтер _______________- Работа с принтером (отправка данных, проверка статуса).
21h - DOS-вызов _____________- Основной интерфейс DOS (работа с файлами, консолью, процессами).