Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППУ_KP.doc
Скачиваний:
32
Добавлен:
26.08.2019
Размер:
134.66 Кб
Скачать

Взаимодействие обработчиков прерываний с основной программой

Так или иначе, обработчик прерывания производит модификацию каких-либо данных для основной программы. При разработке программ с прерываниями следует не забывать, что обработчик прерываний – это параллельный процесс, который может прервать программу в любом ее месте. Особое внимание необходимо обращать на участки алгоритмов, которые используют операции чтения/модификация/запись переменных, которые также изменяются в прерывании, а также на обработку переменных, разрядность которых превышает разрядность вычислительной машины. Это связано с тем, что эти операции не могут быть выполнены за одну команду, а следовательно, существует вероятность, что между ними может возникнуть перывание, которое произведет модификацию переменной, что может привести к ситуации, когда часть значения окажется новым, а часть старым. Например, при сложении 32х разрядных чисел на 16-ти разрядном процессоре требуется выполнение двух последовательных команд сложения, одна из которых с учетом переноса, в этом случае прерывание может произойти между этими командами. Для защиты от таких ситуаций используется механизм запрещения прерываний на уровне процессора или контроллера прерываний перед началом выполнения операции и разрешения после окончания ее выполнения. В случае блокировки прерываний для конкретного устройства на его уровне или уровне контроллера прерываний необходимо учитывать задержку выработки запроса прерывания. Данная задержка выражается в том, что сигнал запроса и вход в обработчик прерывания осуществляется не мгновенно, а с некоторой задержкой, следовательно, существует вероятость того, что после запрещения прерывания вызов данного обработчика произойдет в критической секции. Для исключения этой ситуации между запрещением прерываний и кодом, отвечющим за модификацию переменных, ставится задержка достатотчная для обработки уже прешедшего запроса, если он был.

Пример:

cli

nop

add AX , BX

adc CX , DX

sti

Задание на выполнение лабораторной работы

  1. Написать программу («com» файл), последовательно выполняющую:

  2. Очистку экрана.

  3. Чтение и вывод на экран содержимого регистра маски прерываний (адрес 21h) в двоичном или шестнадцатиричном формате.

  4. Запрет аппаратных прерываний от клавиатуры.

  5. Чтение готовности клавиатуры по изменению соответствующего бита в регистре запросов прерывания (IRR).

  6. По готовности клавиатуры, если нажата клавиша “Esc” восстановить прерывания от клавиатуры и выйти из программы.

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

  • Программа полностью замещающая системный обработчик прерывания.

  • Программа, дополняющая системный и выполняемая до системного.

  • Программа, дополняющая системный и выполняемая после системного.

  • Системный обработчик в теле пользовательского. Пользовательский выполняется до и после системного.

Рекомендации:

  1. Данная программа может правильно работать только под управлением операционной системы MS DOS.

  2. Для контроля работы программы в циклах опроса готовности и для функций задержки на время обмена с контроллером прерываний использовать вывод фиксированных символов на экран с переводом строки в конце каждой строки.

Литература:

1. В. Юров Ассемблер/учебник для вузов -:СПб, Питер

2. Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC, том 2 .- М: ДИАЛОГ-МИФИ, 1992.-208 с.