Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 [ 13 ] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

BnOSh

ВП09Н

BnOBh

BHOCh

ВП ODh

ВП OEh

BHOFh

ВП lOh

Bni3h

ВП 14h

ВП 16h

Bni7h

BnSlh

Bn23h

ВПЗЗИ

ВП 60h...66h

BnrOh

Ассемблер в задачах защиты информаци

ВП 72h, 73h, 75h

ВП 76h

Деление на нуль Пошаговая работа Немаскируемое прерывание (NMI) Точка останова (команда INT) Переполнение(команда INTO) \

Нажатие клавиши PrintScr

Прерывание от таймера Прерывание от клавиатуры Прерывание от последовательного порта COM2 Прерывание от последовательного порта С0М1 Прерывание от параллельного порта iPTZ Прерывание от гибкого диска Прерывание от параллельного порта LPT1 Драйвер экрана BIOS

Драйвер жесткого диска BIOS Драйвер RS-232 BIOS

Драйвер клавиатуры BIOS Драйвер принтера BIOS

Диспетчер DOS

Прерывание при нажатии Ctrt-C Драйвер мыши

Свободные вектора программных прерываний Прерывание от системных часов Свободные вектора внешних аппаратных прерываний Прерывание от жесткого диска

Рис. 1.3.3. Вектора некоторых прерываний

1.3.4. Внешние аппаратные прерывания

Запросы IRQ внешних аппаратных прерываний, возникающие на выходах требующе го обслуживания УВВ, поступают на вход прерывания INT ЦП через контроллер прерываний (КПр). КПр состоит из двух однотипных контроллеров, образующих структуру "ведущий-ведомый", как показано на рис. 1.3.4 . В состав каждого контроллера (рис 1.3.5) входят: регистр запросов прерываний IRR, в котором фиксируются факты прихода сигналов IRQ; регистр обслуживаемых запросов ISR, в котором фиксируются запросы-находящиеся в стадии обслуживания; регистр маски прерываний IMR.n регистр базового номера прерывания.

f..l;.9f.!:.?.!.?.P?f P..Jpoвaнuя на Ассемблере IBM PC

«Q8

Ведомый контроллер

порты OAOh, OAlh

Базовый номер прерывания 70h .

IRQQ

IRQ\

Ведущий контроллер

порты 20h, 21h

Базовый номер прерывания 08h

На вход ЦП

Убывание приоритетов Рис. 1.3.4. Организация внешних аппаратных прерьваний й IBM PC

Б 2 S о.

£1

1 о

Из ЦП

INTAl

На вход ЦП о ( а. <

Схема анализа приорит>5

Регистр базового номера "Рерывания

Блокмровм

1 О

Приказ fOf

Из обработчика прерываний

Номер прерывания 8

7 Шина данных

<= 1-3.5. Внутренняя структура контроллера прерываний

"р""™™ (р- ьз.б „ ,.3.7,



..5.f!!!.if.P.i?f.?. J.:.2?!!lJ}.°fPP° на Ассемблере IBM PC

обработчик прерывания

ИБ КПр IRQ -

КПр* ЦП

lira-

ЦП -»- КПр

КПр->. ЦП 067-0-

ттА1

IНомер\ д прерывания j

08h...0Fh, 70h... 77h-

Puc. 1.3.6. Временная диаграмма последовательности внешнего аппаратного прерьвания

1) КПр. Запросы IRQ поступают на входы КПр и вызывают установку соответствующих разрядов регистра запросов прерывания.

2) КПр. Если данные прерьшания не замаскированы, т. е. соответствующие разряды регистра маски прерьшаний сброшены, единичные сигналы с выхода регистра запросов прерываний поступают на входы схемы анализа приоритетов.

3) КПр. Схема приоритетов формирует сигнал INT, поступающий на одноименный вход ЦП. "Самая приоритетная" 1 с выхода IRR проходит далее на вход соответствующего разряда регистра ISR. 3-разрядный код номера входа регистра IRR, на который пришел самый приоритетный запрос, суммируется с содержимым регистра базового номера прерываний (08h для ведущего и OAOh для ведомого КПр). На выходе сумматора в результате формируется 8-разрядный код номера соответствующего прерывания.

4) ЦП. После выполнения текущей команды процессор обнаруживает высокий уровень сет-нала на входе INT. Если IF = I, т. е. прерывания разрешены, процессор по линии ШТА формирует два сигнала ШТА 1 и ШТА 2, которые поступают в контроллер прерьшаний.

5) КПр. Сигнал ШТА 1, поступив в КПр, переводит прерывание с рассматриваемым номером из разряда запрашиваемых в разряд обслуживаемых, сбрасывая соответствующий разряд регистра IRR и устанавливая соответствующий разряд регистра ISR Функцией каждой единицы в регистре ISR является блокировка всех прерываний того же и более низкого уровня приоритета.

6) КПр. Сигнал ШТА 2 является для КПр сигналом чтения, по которому контроллер выдает на линии шины данных DB7 ,.. DBO сформированный им ранее номер прерывания

7) ЦП. Процессор читает номер прерьшания Л, сохраняет в стеке содержимое регистра флагов, сбрасьшает флаг IF, сохраняет в стеке адрес возврата (CS: IP), обращается к ячейке таблицы векторов с адресом 4N, считанный из нее ВП записывает в CS: IP, обеспечивая тем самым передачу управления на начало обработчика прерывания с номером N.

8) ОП. Обработчик прерывания в процессе своей работы должен обеспечить сброс сигнала IRQ, сброс соответствующей ему 1 в регистре ISR и по команде IRET вернуть управление прерванной программе.

RESET

Загрузка начального адреса в (CS: IP)

Чтение КОП


КОП = ? Гдругое

IRET

Выполнение команды

Формирование в (С5: IP) адреса следующей команды

Чтение адреса возврата из аека: стек-*(С5: IP)

Чтение флагов из стека: сгек-»Р

Подтверждение прерывания INTA1: уаановка бита I5R, сброс битаIRR


•оследовательность внешнего аппаратного прерьвания Особенности создания обработчиков прерывания:



процедура обработчика всегда имеет атрибут FAR;

сегментные регистры DS, ES и SS после прерывания сохраняют значения, которые они имели в прерванной профамме;

обработчик прерываний "наследует" стек прерванной профаммы;

учитывая, что аппаратные прерывания могут возникать в произвольные моменты времени, после входа в обработчик необходимо сохранять содержимое всех используемых регистров, а перед выходом из обработчика - восстанавливать его.

На рис. 1.3.8 показана обобщенная структура обработчика внешних аппаратных прерываний. Если в обработчике отсутствует команда STI, механизм вложенных прерываний будет заблокирован. Прерывания будут вновь разрешены только после выполнения команды IRET, возвращающей из стека сохраненное состояние регистра F с установленным флагом IF. Чтобы не задерживать обработку прерываний от приоритетных усфойств обычно в качестве первой команды обработчика используют команду STI.

STl\

Запрещены

все вложенные

прерывания

Разрешены вложенные прерывания с более

высокий приоритетом

Разрешены

все вложенные

IRET

прерывания

IRET

IRET

Рис. 1.3.8. Структура обработчика внешнего аппаратного прерьиания: а - обобщенная структура,

б - обработчик с заблокированным механизмом вложенных прерьваниО, в - обработчик с включенным механизмом вложенных прерьваний

В каждом конретном случае в более детальном виде структура обработчика прерывания зависит от следующих факторов:

какое прерывание - профаммное или аппаратное;

какой обработчик - резидентный или транзитный;

какой вектор прерывания - свободный или используемый системой;

Ш если ВП используется системой, прикладной обработчик заменяет системный или Ж "сцепляется" с ним;

в случае "сцепления" прикладной обработчик работает до системного или после;

используются ли в теле обработчика системные вызовы DOS или BIOS.

Примеры

.5=== Приказ EOI для ведущего КПр. ===================

mov al, 20h ; Посылка кода 20h

out 20h, al ; в порт 20h ведущего КПр .s=== Приказ EOI для ведомого КПр. ===================

mov al, 20h ; Посьшка кода 20h

out 20h, al ; в порт 20h ведущего и

out OAOh, al; в порт OAOh ведомого КПр .==== Запрет прерывания от клавиатуры (IRQ1). ========

in al, 21h ; Чтение текущей маски

or al, 02h ; Устанавливаем разряд 1

out 21h, al ; Запись в регистр IMR ;=== Разрешение прерывания от клавиатуры (IRQ1). ==============

in al, 21h ; Чтение текущей маски

and al, OFDh ; Сбрасываем разряд 1

out 21h, al ; Запись в регистр IMR ;==== Обработчик прерывания с номером из диапазона =============

;==== 08h...0Fh с заблокированным механизмом вложенных прерываний.

MyHandierl:

mov out iret

al, 20h 20h, al

Обработчик прерывания с номером из диапазона 08h...0Fh

Oldint Newint:

;== с включенным механизмом вложенных прерываний. ==============

MyHandler2:

mov al, 20h out 20h, al \ iret

;==== Структуры прикладных ОП, взаимодействующих с системными. =====

Прикладная обработка выполняется после системной =============

DD ? ; Ячейка для хранения "старого"

; используемого системой ВП ; Точка входа в прикладной ОП

pushf

call DWORD PTR cs: Oldint

; После выполнения этих команд на вершине ; стека три верхних слова имеют тот же ; вид, что и при обычном входе в системную ; процедуру ОП, поэтому команда IRET ; вернет управление в нашу программу

-Прикладная обработка



0 1 2 3 4 5 6 7 8 9 10 11 12 [ 13 ] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88