Анимация
JavaScript
|
Главная Библионтека 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.
Рис. 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 |