Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Программирование прерываний



Сигналы внешних аппаратных прерываний (от таймера, клавиатуры, дисков и проч.) поступают в процессор не непосредственно, а через контроллер прерываний, в качестве которого используется микросхема Intel 8259A. Обработка аппаратного прерывания обязательно включает в себя процедуры управления контроллером прерываний. Организация системы аппаратных прерываний заключается в том, что к восьми входным выводам контроллера подключаются выводы устройств, на которых возникают сигналы прерываний. Выход INT контроллера подключается к одноименному входу микропроцессора. При этом, кроме сигнала INT, инициирующего процедуру прерывания в микропроцессоре, контроллер передает в микропроцессор по линиям данных номер вектора, через который должна быть вызвана программа обработки поступившего прерывания. Передаваемый номер вектора образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос. Номер базового вектора заносится в контроллер автоматически в процессе начальной загрузки компьютера. Контроллер программируется через порты 20h и 21h. Поскольку базовый вектор всегда равен 8, то номера векторов, закрепленных за аппаратными прерываниями, лежат в диапазоне 8h, ... , Fh.

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

Сигнал запроса прерывания IRQ от устройства поступает на вход регистра запросов и устанавливает в 1 соответствующий бит этого регистра. Далее на пути сигнала стоит регистр маски, программируемый через порт 21h. Значение в бите маски разрешает прохождение сигнала, значение 1 - запрещает. Пройдя через маску, сигнал поступает на схему анализа приоритетов. При стандартной настройке схемы приоритетов, приоритеты сигналов IRQ снижаются по мере роста номера сигнала. Пройдя через схему анализа приоритетов, сигнал запроса прерывания поступает на вход регистра обслуживаемых запросов и дает разрешение на установку в 1 его бита (однако не устанавливает его).

 

 

Рис. Логическая структура контроллера прерываний

 

Одновременно сигнал поступает на вход INT микропроцессора, который регистрирует поступление сигнала INT лишь в случае, если установлен флаг разрешения прерываний IF в регистре флагов. Сброс флага IF командой CLI запрещает все аппаратные прерывания. Микропроцессор, получив сигнал INT, отзывается на него выходным сигналом INTA, который поступает в контроллер прерывания и выполняет там два действия. Во-первых, он устанавливает бит регистра обслуживаемых запросов, разрешенный сигналом запроса прерывания. Во-вторых, он сбрасывает бит регистра запросов.

Микропроцессор, одновременно с посылкой в контроллер прерываний сигнала INTA сбрасывает флаг IF в регистре флагов, запрещая все аппаратные прерывания. Прерывания останутся запрещенными до выполнения пользователем команды STI или до установки флага IF каким-либо другим способом.

Установка 1 в бите регистра обслуживаемых запросов воздействует на схему анализа приоритетов. Установленный бит блокирует в схеме анализа приоритетов все уровни прерываний, начиная с текущего и ниже. Таким образом, если не принять специальных мер, даже после завершения обработки прерывания все, прерывания данного и более низких приоритетов останутся заблокированными. Сброс бита регистра обслуживаемых запросов осуществляется посылкой кода 20h в порт 20h. Этот код получил название команды или приказа EOI (End Of Interrupt). Команда EOI должна быть в любой программе по обработке прерываний.

Практически структуру программы обработки прерываний выбирают, исходя из конкретных условий. Часто в самом начале программы выполняют команду STI, чтобы не задерживать обработку прерываний от более приоритетных устройств (в частности, таймера). Приказ конца прерывания EOI посылается в контроллер в самом конце программы, перед завершающей командой IRET с тем, чтобы полностью исключить вложенные прерывания от запросов того же уровня. Однако сигнал прерывания того же (или более низкого уровня) может пройти между командами, реализующими приказ EOI, и командой IRET, что вызовет повторный вход в эту же программу. Чтобы избежать этого, перед командой EOI выполняют команду запрета всех прерываний CLI. Команда IRET не только восстанавливает адрес возврата в регистрах CS и IP, но и содержимое регистра флагов на момент прерывания.

Типичные структуры программы обработки прерываний:

а) STI                                               б)

.....

CLI

MOV AL,20h ; Команда         MOV AL,20h ; Команда

OUT 20h,AL  ; EOI                OUT 20h,AL ; EOI

IRET                                           IRET

при разрешенных вложенных прерываниях (а) и при запрещенных вложенных прерываниях (б).

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

Задание к курсовому проектированию

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

КУРСОВАЯ РАБОТА

«Системное Программное Обеспечение»

Студента группы АСОИ-ХХХ

Фамилия Имя Отчество

Вариант №

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

Например, код варианта 14.1.2.2.1 раскрывается следующим образом: задание 14, программа в COM - формате, ввод с клавиатуры средствами BIOS, вывод на экран в графическом режиме, после загрузки программы освободить лишнюю память.

Перечень заданий

а) Основная тема. Программа должна:

1) создать каталог с именем SPO и в нем создать файл с именем KURS_SPO.txt и записать в него символьную строку;

2) вывести на экран содержимое текстового файла FILE_SPO.txt (размером не более 80 байтов) синими символами на желтом фоне;

3) переименовать файл NEWFILE.txt в файл OLDFILE.txt и установить у него атрибут «ReadOnly»;

4) изменить дату и время создания файла MYFILE.txt и вывести их старые и новые значения на экран;

5) переслать файл FILE_SPO.txt из каталога OLDDIR в каталог NEWDIR, изменив его имя на MYFILE.txt;

6) создать на дискете каталог NEWDIR, скопировать в него файлы из каталога  KURS_SPO и удалить каталог  KURS_SPO;

7) вывести на экран параметры командной строки;

8) создать метку тома дискеты, значение которой вводится с клавиатуры;

9) получить из системы текущее время и вывести его значение на экран мерцающими символами;

10) менять при вводе данных с клавиатуры в текстовый файл строчные символы на прописные символы;

11) перехватывать прерывания от системного таймера, уменьшать их частоту путем пересчета и периодически выводить на экран изображение флага России;

12) рисовать на экране шахматную доску и периодически через 2-5 секунд инвертировать цвет квадратов;

13) определять тип символьной строки в текстовом файле (строка букв, десятичное число, 16-ричное число, двоичное число и т.д.);

14) переводить первые символы слов в верхний регистр в текстовом файле и выделяет их красным цветом;

15) распознать нажатие «горячей» комбинации клавиш LeftCtrl+RightShift+F3 и реагировать на него звуковым сигналом;

16) реализовать видеоэффект – «опадание» букв с экрана;

17) выделять английские символы в словах текстового файла зеленым фоном;

18) прочитать текущее время, прибавить к нему заданный интервал (например, 5 сек.) и установить будильник на полученное время;

19) динамически выделять блок памяти объемом 64 Кбайт. Выделенный блок заполнять символьной информацией и переписывать в файл;

20) выводить на экран информацию о числе и типе имеющихся дисковых накопителей;

21) выводить на экран информацию о числе и типе имеющихся адаптеров дисплея;

22) генерировать и выводить на экран случайные числа с помощью системного таймера;

23) моделировать звук сирены, который прекращается при нажатии любой клавиши на клавиатуре;

24) выделять цифры в текстовом режиме цветным полем;

25) изменять цвет границы экрана при последовательном нажатии на клавишу F10;

26) выделять миганием цифры в текстовом режиме;

27) выделять подчеркиванием прописные буквы в текстовом режиме;

28) выводить на экран сообщение о размере свободного пространства на дискете;

29) выводить на экран сообщение о наличии спрятанных файлов на дискете;

30) удалять лишние пробелы в текстовом файле;

31) выводить на экран информацию о размере второго файла на дискете;

32) прятать заданный файл на дискете. Имя файла задается в командной строке;

33) восстанавливать удаленный файл на дискете;

34) выводить информацию о текущих координатах курсора в правый верхний угол экрана;

35) выводить на экран в графическом режиме размер и атрибуты заданного файла на дискете. Имя файла задается в командной строке;

36) выводить на экран имена всех подкаталогов на дискете в алфавитном порядке;

37) выводить на стандартное устройство ввода-вывода порядковые номера кластеров заданного файла на дискете. Имя файла вводится с клавиатуры;

38) выводить на экран имена файлов на дискете в порядке увеличения их размера;

39) удалять все файлы с дискеты, если их имена начинаются с заданного символа. Символ вводится с клавиатуры;

40) форматировать дискету на стандартную емкость 1,44 Мб. Формат программы .ЕХЕ. Предусмотреть все необходимые диагностические сообщения;

41) генерировать звуковой сигнал и выводить на экран вашу фамилию при нажатой клавише F10. Программа должна быть резидентной;

42) генерировать звук изменяющейся частоты при нажатии на клавишу «Esc». Процедуру генерации звука оформить в виде макроса;

43) определять количество установленных в системе портов R232;

44) распознавать нажатие LeftCtrl + RightShift + F3 и реагировать на него звуковым сигналом. Оформить в виде программы обработки прерывания от клавиатуры;

45) выводить на стандартное устройство ввода-вывода символы второй половины кодовой таблицы (коды 128 - 255). Установить программируемую задержку вывода очередного символа в 0,5, 1,0 и 5,0 секунд. Задержку задавать параметром командной строки;

46) вычислять омическое сопротивление двух параллельно соединенных резисторов. Значения сопротивлений резисторов в диапазоне 0,1 ом до 1000 Мом вводятся с клавиатуры;

47) переводить заданные десятичные числа в шестнадцатеричную, восьмеричную и двоичную формы. Ввод числа осуществлять с клавиатуры и выход из программы нажатием клавиш Alt + F4;

48) рисовать на экране в графическом режиме 640х400 прямую линию, проходящую через две точки. Значения координат этих точек задаются с клавиатуры.

б) Формат программы:

1) COM - программа;

2) EXE - программа.

в) Ввод с клавиатуры:

1) средствами DOS;

2) средствами BIOS.

г) Вывод на экран:

1) в текстовом режиме;

2) в графическом режиме.


Поделиться:



Последнее изменение этой страницы: 2019-05-07; Просмотров: 340; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.034 с.)
Главная | Случайная страница | Обратная связь