Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lectures / 16-17

.pdf
Скачиваний:
43
Добавлен:
16.04.2013
Размер:
416.05 Кб
Скачать

Действия процессора при прерывании

 

 

Адреса:

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

в МП

Соседние файлы в папке Lectures