- •Исследование программно управляемого обмена по готовности внешнего устройства и работы с прерываниями
- •1. Краткие теоретические положения
- •1.1. Состав рассматриваемой системы
- •2.2. Режимы обмена с периферийными устройствами
- •2.3. Реализация программного обмена между центральным процессором и контроллером клавиатуры посредством контроллера прерываний
- •3. Программирование таймера
- •Микросхема таймера 8254
- •Программирование таймера на уровне портов
- •Обработка прерываний
- •Взаимодействие обработчиков прерываний с основной программой
- •Задание на выполнение лабораторной работы
Взаимодействие обработчиков прерываний с основной программой
Так или иначе, обработчик прерывания производит модификацию каких-либо данных для основной программы. При разработке программ с прерываниями следует не забывать, что обработчик прерываний – это параллельный процесс, который может прервать программу в любом ее месте. Особое внимание необходимо обращать на участки алгоритмов, которые используют операции чтения/модификация/запись переменных, которые также изменяются в прерывании, а также на обработку переменных, разрядность которых превышает разрядность вычислительной машины. Это связано с тем, что эти операции не могут быть выполнены за одну команду, а следовательно, существует вероятность, что между ними может возникнуть перывание, которое произведет модификацию переменной, что может привести к ситуации, когда часть значения окажется новым, а часть старым. Например, при сложении 32х разрядных чисел на 16-ти разрядном процессоре требуется выполнение двух последовательных команд сложения, одна из которых с учетом переноса, в этом случае прерывание может произойти между этими командами. Для защиты от таких ситуаций используется механизм запрещения прерываний на уровне процессора или контроллера прерываний перед началом выполнения операции и разрешения после окончания ее выполнения. В случае блокировки прерываний для конкретного устройства на его уровне или уровне контроллера прерываний необходимо учитывать задержку выработки запроса прерывания. Данная задержка выражается в том, что сигнал запроса и вход в обработчик прерывания осуществляется не мгновенно, а с некоторой задержкой, следовательно, существует вероятость того, что после запрещения прерывания вызов данного обработчика произойдет в критической секции. Для исключения этой ситуации между запрещением прерываний и кодом, отвечющим за модификацию переменных, ставится задержка достатотчная для обработки уже прешедшего запроса, если он был.
Пример:
cli
nop
add AX , BX
adc CX , DX
sti
Задание на выполнение лабораторной работы
Написать программу («com» файл), последовательно выполняющую:
Очистку экрана.
Чтение и вывод на экран содержимого регистра маски прерываний (адрес 21h) в двоичном или шестнадцатиричном формате.
Запрет аппаратных прерываний от клавиатуры.
Чтение готовности клавиатуры по изменению соответствующего бита в регистре запросов прерывания (IRR).
По готовности клавиатуры, если нажата клавиша “Esc” восстановить прерывания от клавиатуры и выйти из программы.
В программе должен формироваться короткий звуковой сигнал при нажатии на любую клавишу клавиатуры. Программа должна использовать для формирования звука и длительности звукового сигнала прерывания таймера с его заменой на новый обработчик в следующих вариантах:
Программа полностью замещающая системный обработчик прерывания.
Программа, дополняющая системный и выполняемая до системного.
Программа, дополняющая системный и выполняемая после системного.
Системный обработчик в теле пользовательского. Пользовательский выполняется до и после системного.
Рекомендации:
Данная программа может правильно работать только под управлением операционной системы MS DOS.
Для контроля работы программы в циклах опроса готовности и для функций задержки на время обмена с контроллером прерываний использовать вывод фиксированных символов на экран с переводом строки в конце каждой строки.
Литература:
1. В. Юров Ассемблер/учебник для вузов -:СПб, Питер
2. Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC, том 2 .- М: ДИАЛОГ-МИФИ, 1992.-208 с.