Lectures / 16-17
.pdfДействия процессора при прерывании
|
|
Адреса: |
0 |
|
|
|
2 |
|
Процессор |
3 n*4 |
|
|
IP |
||
|
n*4+2 |
||
0 |
CS |
|
4 |
FLAGS |
|
||
|
2 |
5 |
|
|
|
||
n |
|
|
|
|
|
|
|
INTR |
|
6 |
|
|
1 |
|
|
|
|
|
|
if |
|
0 |
|
|
|
|
|
|
|
|
7 |
IP ISR0 |
Память |
|
CS ISR0 |
Таблица |
|
|
||
|
векторов |
|
IP ISRn |
прерыва- |
|
ний |
||
CS ISRn |
||
|
||
ISR для |
|
|
прерывания № n |
|
|
.... |
|
|
iret 4” |
|
|
IP |
|
|
CS |
Стек |
|
FLAGS |
||
SP на |
||
|
||
Программа |
момент |
|
прерывания |
Некоторые векторы прерываний
0Искл. Деление на ноль
1Искл. Пошаговый режим (для отладчика)
2Апп. Немаскируемое аппаратное прерывание
3Прогр. Прерывание от команды int без числ. параметра
4Искл. Прерывание от команды into при переполнении
6 |
Искл. |
Недопустимый КОП |
8 |
Апп. |
Системный таймер |
9 |
Апп. |
Клавиатура |
B |
Апп. |
Последовательный порт COM2 |
CАпп. Последовательный порт COM1 (обычно от мыши)
DАпп. Параллельный порт LPT2 (обычно свободно)
EАпп. Гибкий диск
FАпп. Параллельный порт LPT1 (принтер)
10 |
Прогр. |
BIOS: обслуживание видеосистемы |
13 |
Прогр. |
BIOS: обслуживание дисков |
14 |
Прогр. |
BIOS: обслуживание клавиатуры |
16 |
Прогр. |
BIOS: обслуживание принтера |
1C |
Прогр. |
Прикладная обработка прерываний от сист.таймера |
21 |
Прогр. |
Диспетчер DOS |
Замена вектора прерывания
mov mov
mov mov mov mov
cli
mov mov
sti
ax, 0 |
|
|
es, ax |
|
|
ax, es:[N*4] |
Сохранение |
|
word ptr Save, ax |
||
старого |
||
ax, es:[N*4+2] |
вектора |
|
word ptr Save+2, ax |
|
; Для аппаратных прерываний
word ptr es:[N*4], offset MyISR word ptr es:[N*4+2], seg MyISR
; Для аппаратных прерываний
Восстановление вектора прерывания
mov |
ax, 0 |
mov |
es, ax |
cli |
; Для аппаратных прерываний |
mov |
ax, word ptr Save |
mov |
es:[N*4], ax |
mov |
ax, word ptr Save+2 |
mov |
es:[N*4+2], ax |
sti |
; Для аппаратных прерываний |
Замена и восстановление вектора
прерывания с помощью функций DOS
Вызов DOS Get Interrupt Vector - получение адреса
обработчика прерываний |
|
При вызове: |
При возврате: |
AH = 35h (№ функции) |
ES:BX = адрес обработчика |
AL = номер вектора прерывания |
прерывания |
Вызов DOS Set Interrupt Vector - заполнение вектора прерывания адресом обработчика прерываний При вызове:
AH |
= 25h (№ функции) |
AL |
= номер вектора прерывания |
DS:DX = адрес обработчика прерывания
Замена и восстановление вектора
прерывания с помощью функций DOS
Save dd ?
………………………..
mov ax, 3500h+N int 21h
mov word ptr Save, bx mov word ptr Save+2, es
mov dx, seg MyISR
mov ds, dx
lea dx, MyISR mov ax, 2500h+N int 21h
………………..
lds dx, Save mov ax, 2500h+N int 21h
Сохранение
старого
вектора
Запись
нового
вектора
Восстановление старого вектора
Почему нужно сохранять в ISR
регистры? Пример
Простой обработчик прерывания (ISR):
ISR |
proc |
far |
|
mov |
ax, 0 |
|
iret |
|
ISR |
endp |
|
Программа: |
|
|
....... ...… |
|
|
|
mov |
ax, 5 |
|
add |
ax, 2 |
; печать ax |
|
Возможные
точки
прерываний
Сцепление обработчиков
прерываний
|
|
|
|
|
|
Вариант 1 |
|
|
|
|
|
|
|
Вариант 2 |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
Системный |
|
|
|
|
|
|
|
|
|
Системный |
||||||||||
Программа |
|
обработчик |
Программа |
|
|
обработчик |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NewISR proc |
|
|
|
|
…… |
|
|
|
|
|
|
NewISR proc |
|
|
|
|
|
|
…… |
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
1 |
|
pushf |
|
|
|
|
…… |
|
|
|
|
|
|
……………… |
|
|
|
2 |
|
|
…… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|||||||||
|
|
|
|
|
call cs:Old |
|
|
|
|
|
|
|
INT |
|
|
|
|
|
|
|
|
||||||
|
|
INT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
…… |
|
|
|
|
|
……………… |
|
|
|
|
|
|
…… |
|
||||
|
|
|
|
|
|
…………… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
…… |
|
|
|
|
|
|
jmp cs:Old |
|
|
|
|
|
|
…… |
|
||
|
|
|
|
|
|
…………… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
3 |
|
…… |
|
|
|
|
|
|
NewISR endp |
|
|
|
|
…… |
|
|||||
|
|
|
|
|
|
…………… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|||
|
|
|
|
iret |
|
|
|
|
iret |
|
|
|
|
|
|
|
|
|
|
|
|
|
iret |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
NewISR endp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Прикладной |
|
Прикладной |
обработчик |
|
обработчик |
|
|
|
Схема прерываний в компьютере |
||
3. ЦП |
1. Устройство |
|
|
закончило |
|
подтверждает |
|
операцию |
получение |
Контроллер |
|
прерывания |
Диск |
|
|
прерываний |
|
|
Клавиатура |
|
ЦП |
|
Таймер |
|
|
|
2. Контроллер |
|
|
инициирует |
|
|
прерывание |
|
|
|
|
Шина |
Соединение контроллеров прерываний
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
Ведомый
контроллер
Базовый вектор 70h
Порты
A0h, A1h
IRQ0
IRQ1
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
Ведущий
контроллер
Базовый вектор 8h
Порты
20h, 21h
INT
в МП