Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BOS.doc
Скачиваний:
12
Добавлен:
21.12.2018
Размер:
1.25 Mб
Скачать

Вопрос 25. Программируемый контроллер прерываний. Структура. Уровни прерываний.

Микросхема 8259А (контроллер прерываний) состоит из трех логических компонентов:

  1. регистр IRR – Interrupt Register Register – регистр требующих обработки прерываний;

  2. регистр IMR – Interrupt Service Register – регистр обслуживаемого прерывания;

  3. регистр ISR – Interrupt Mask Register – регистр маскирования прерывания.

IRR используется для того, чтобы запоминать возникшие прерывания. ISR указывает на то, какое прерывание в данный момент обслуживается. IMR доступен не только для чтения, как IRR и ISR, но ещё и для записи. С помощью IMR можно запретить или разрешить соответствующие классы прерываний. Каждому биту регистра IMR ставится в соответствие линия прерывания IRQ (для IRR тоже самое). Если установить бит в IMR, то соответствующая ему линия IRQ маскируется и до сброса бита в ноль прерывание от соответствующего устройства не обрабатывается. Наивысший приоритет имеет IRQ0, наименьший – IRQ7. К линии INT (IRQ2) была заведена вторая микросхема 8259A, то прерываний можно обрабатывать 15.

Программные прерывания в тот момент, когда в коде нашей программы мы явно указываем необходимость их произвести. Программные прерывания используются при работе с внешними и внутренними устройствами и представляют из себя определенный сервис, который ОС предоставляет разработчику. Все программные прерывания имеют уникальные порядковые номера, вызывается INT, после неё идет номер прерывания и в регистре AL/AH указывается номер функции данного прерывания. Основное отличие вызова прерывания от вызова функции (хотя и те, и другие меняют линейный порядок выполнения программы) является то, что извлекаются из стека три верхние слова и помещаются их в регистры IP, CS и флагов. Некоторые из аппаратных или программных прерываний могут дополнять друг друга. Например, нажатие клавиши – системой генерируется аппаратное прерываний int9h с уровнем IRQ1. При нажатии клавиши scan код нажатой клавиши будет помещен в буфер клавиатуры.

Для отображения символов используется int16h. Все программные прерывания делятся на два вида: прерывания BIOS (9h - клавиатура,10h - таймер,14h – com порт,17h - принтер,13h - HDD) и прерывания DOS (int21h),

Работа с вектором прерываний.

Замена вектора прерываний возможна двумя способами:

  1. использование программного прерывания int21h. Функция 35h позволяет считать нужный вектор прерывания (адрес), а 25h позволяет заменить вектор прерывания на указанный.

  2. прямая запись в таблицу векторов

Обработка прерываний может быть произведена в соответствии с тремя основными схемами:

  1. системная обработка, затем дополнительно наша собственная. Используется в том случае, когда мы хотим дополнить нашу системную обработку системными действиями. Пример: по нажатию клавиши заставить мигать или изменить цвет фона.

Push F

Call SYS

USER

IRET

  1. Сначала пользовательская, затем системная. Используется в том случае, когда хотим изменить какие-либо параметры или значения регистров, передаваемые для системной обработки. Этой схемой пользуются все вирусные программы, которые сначала осуществляют свои действия, а затем передают системе управление, будто они и не работали.

USER

JMP SYS

  1. Пользовательская обработка (полностью заменяет системную)

USER

MOV AL,20h

OUT 20h, AL

IRET

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]