- •Лекции 19-20
- •Понятие прерывания
- •Аппаратное прерывание
- •Аппаратное прерывание
- •Аппаратные прерывания
- •Номера IRQ аппаратных
- •Исключения
- •Программное прерывание
- •Программное окружение прерываний
- •Таблица прерываний
- •Прерывание 10h (Видео
- •Прерывание 16h (клавиатура)
- •Прерывание 21h (сервис DOS)
- •Функции консольного вывода
- •Функции консольного ввода
- •Функции файлового ввода -
- •Функции файлового ввода - вывода
- •Функции работы с памятью
- •Пример
- •Пример
- •Пример
- •;------ Cycle for read & write -----------
- •next4:
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Создание собственных обработчиков прерываний
- •Создание собственных обработчиков прерываний
- •Создание собственных обработчиков прерываний
- •Пример 1
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
- •Пример использования
- •Пример 2
- •Обработчик (код обработки - продолжение)
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
- •Пример 3
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
Лекции 19-20
Прерывания: аппаратные и программные Использование сервиса BIOS и DOS Перехват и обработка прерываний Создание собственных обработчиков
Понятие прерывания
Прерывание – событие, заставляющее процессор переключиться с выполнения одной программы на другую (после завершения выполнения текущей команды), а затем вернуться в исходную программу (на выполнение следующей команды).
Это происходит «незаметно» для исходной программы.
Прерывания делятся на три вида:
Аппаратные прерывания (внешние прерывания).
Исключения (внутренние прерывания).
Программные прерывания.
Аппаратное прерывание
Аппаратное прерывание - это асинхронное событие, генерируемое внешним (по отношению к процессору) устройством.
Посредством аппаратных прерываний аппаратура «информирует» центральный процессор о том, что произошло какое-либо событие, требующее немедленной реакции, например:
нажатие клавиши клавиатуры,
завершение асинхронной операции ввода-вывода,
сигнал таймера и т.д.
Каждый тип аппаратных прерываний имеет собственный номер (irq
– interrupt query), однозначно определяющий источник прерывания.
Обработка аппаратного прерывания не должна учитывать, какой процесс является текущим.
Аппаратное прерывание |
||
|
|
CPU |
Контроллер |
irq0 |
|
устройства |
|
Котроллер |
|
|
Прерываний |
… |
|
i8259A |
|
|
|
Контроллер |
irq15(23) |
INTR |
устройства |
|
|
|
|
ШИНА АДРЕСА |
|
|
ШИНА ДАННЫХ |
Аппаратные прерывания
Аппаратные прерывания подразделяются на маскируемые и немаскируемые.
Немаскируемые прерывания – системные прерывания на которые процессор должен отреагировать в любом случае.
Маскируемые прерывания – реакция на них может быть заблокирована. Эти прерывания разрешены если IF=1, и запрещены если IF=0.
Управление разрешением обработки маскируемых прерываний осуществляется с помощью команд:
CLI – запретить обработку маскируемых прерываний,
STI – разрешить обработку маскируемых прерываний.
Номера IRQ аппаратных
|
0 |
|
прерываний |
|
12 |
|
|
|
|
|
|
|
|||
|
|
Системный таймер |
|
|
|
||
|
1 |
|
Клавиатура |
|
13 |
Ошибка сопроцессор |
|
|
|
|
|
|
|
|
|
|
2 |
|
Подключение ведомого |
|
14 |
Первичный канал IDE |
|
|
|
|
|
|
|
|
|
|
3 |
|
Последовательный порт 2 |
|
15 |
Вторичный канал IDE |
|
|
|
|
|
|
|
|
|
|
4 |
|
Последовательный порт 1 |
|
16 |
Видеоподсистема |
|
|
|
|
|
|
|
|
|
|
5 |
|
Параллельный порт LPT2 |
|
17 |
|
|
|
|
|
|
|
|
|
|
|
6 |
|
Дисковод |
|
18 |
|
|
|
|
|
|
|
|
|
|
|
7 |
|
Параллельный порт LPT1 |
|
19 |
|
|
|
|
|
|
|
|
|
|
|
8 |
|
CMOS и часы |
|
20 |
|
|
|
|
|
|
|
|
|
|
|
9 |
|
|
|
21 |
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
22 |
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исключения
Исключение – синхронное событие, возникающее в результате попытки выполнения программой команды, которая по каким-то причинам не может быть выполнена до конца.
Примеры исключений:
деление на ноль,
переполнение стека,
ошибка обращения к памяти и т.д.
Программное прерывание
Программное прерывание (пользовательское прерывание) - это синхронное событие, которое может быть повторено при выполнении одного и того же программного кода.
Программное прерывание вызывается явно используя команду INT.
Основное предназначение программных прерываний
– обращение к сервисам BIOS (Basic Input Output System) и операционной системы (DOS, Linux и т.д.).
Программное окружение прерываний
Команда вызова программных прерываний INT. Команды управления обработкой внешних прерываний:
CLI (запрет) и STI (разрешение).
Адреса обработчиков прерываний (вектор прерываний) в реальном режиме располагаются по нулевому адресу (0000h:0000h) и занимают 1Кб (256 × 4 = 1024)
где
256 – максимальное количество прерываний,
4 – размер одного адреса (сегмент:смещение).
Во всех программных прерываниях в AH указывается номер функции.
Таблица прерываний
№ |
Назначение |
№ |
Назначение |
||
|
|
|
|
||
0h |
Переполнение при делении (А) |
16h |
BIOS Обслуживание клавиатуры |
||
|
|
|
|
||
1h |
Пошаговое прерывание (А) |
17h |
BIOS Поддержка принтера |
||
|
|
|
|
||
2h |
Немаскируемое прерывание (А) |
18h |
BIOS ROM-Basic |
||
|
|
|
|
||
3h |
Прерывание по контрольной точке INT3 (П) |
19h |
BIOS Начальный загрузчик |
||
|
|
|
|
||
4h |
Прерывание по переполнению INTO (П) |
1ah |
BIOS Ввод-вывод таймера |
||
|
|
|
|
||
5h |
Печать экрана PrtSc (П) |
1bh |
BIOS | DOS – Обработка Ctrl+Break |
||
|
|
|
|
||
8h |
Прерывание таймера (А) |
1ch |
Прерывание по таймеру (пользователь) |
||
|
|
|
|
||
9h |
Прерывание от клавиатуры (А) |
1dh |
BIOS Указатель видео параметров |
||
|
|
|
|
||
Eh |
Прерывание от дисковода (А) |
1eh |
BIOS Указатель параметров дискеты |
||
|
|
|
|
||
10h |
BIOS Видео сервис |
1fh |
BIOS Указатель графических символов |
||
|
|
|
|
||
11h |
BIOS Проверка оборудования |
20h |
DOS Завершение программы |
||
|
|
|
|
||
12h |
BIOS Размер используемой памяти |
21h |
DOS Сервис MS DOS |
||
|
|
|
|
||
13h |
BIOS Дисковый ввод-вывод |
22h |
DOS Адрес завершения |
||
|
|
|
|
||
14h |
BIOS Ввод-вывод через COM-порт |
23h |
DOS Адрес завершения по Ctrl-Break |
||
|
|
|
|
||
15h |
BIOS Специальные функции AT |
25h/26h |
DOS Прямой дисковый ввод - вывод |
||
|
|
|
|
|
|
|
|
|
|
|
|