2.4. Перехват прерываний

В архитектуре процессоров 80х86 предусмотрены особые случаи, когда процессор прекращает (прерывает) выполнение текущей программы и немедленно передает управление программе-обработчику, специально написанной для обработки подобной ситуации. Такие особые ситуации делятся на два тина: прерывания и исключения, в зависимости от того, вызвало ли эту ситуацию какое-нибудь внешнее устройство или выполняемая процессором команда. Исключения делят­ся далее на три типа: ошибки, ловушки и остановы, в зависимости от того, когда по отношению к вызвавшей их команде они происходят. Ошибки появляются перед выполнением команды, поэтому обработчик такого исключения получит в качестве адреса возврата адрес ошибочной команды (начиная с процессоров 80286). Ловушки происходят сразу после выполнения команды, так что обработчик получает в качестве адреса возврата адрес следующей команды. И наконец, остановы могут возникать в любой момент и вообще не предусматривать средств возврата управления в программу.

Команда INT (а также INTO и INT3) используется в программах как раз для того, чтобы вызывать обработчики прерываний (или исключений). Фактически они являются исключениями ловушки, поскольку адрес возврата, который передастся обработчику, указывает на следующую команду, но так как эти команды были введены до разделения особых ситуаций на прерывания и исключения, их практически всегда называют командами вызова прерываний. Ввиду того, что обработчики прерываний и исключений в DOS обычно не различают механизм вызова, с помощью команды INT можно передавать управление, как на обработчики прерываний, так и исключений. Как показано в главе 4, программные прерывания, то есть передача управле­ния при помощи команды INT, являются основным средством вызова процедур DOS и BIOS, потому что в отличие от вызова через команду CALL здесь не нужно знать адреса вызываемой процедуры - достаточно только номера. С другой сторо­ны интерфейса рассмотрим, как строится обработчик программного прерывания.

2.5. Обработчики прерываний

Когда в реальном режиме выполняется команда INT, управление передается по адресу, который считывается из специального массива, таблицы векторов пре­рываний, начинающегося в памяти по адресу 0000h:0000h. Каждый элемент тако­го массива представляет собой дальний адрес обработчика прерывания в форма­те сегмент:смещение или 4 нулевых байта, если обработчик не установлен. Команда INT помещает в стек регистр флагов и дальний адрес возврата, поэтому, чтобы завершить обработчик, надо выполнить команды popf и retf или одну ко­манду iret, которая в реальном режиме полностью им аналогична.

После того как обработчик написан, следующий шаг - привязка его к выбран­ному номеру прерывания. Это можно сделать, прямо записав его адрес в таблицу векторов прерываний.

Хотя прямое изменение таблицы векторов прерываний и кажется достаточно удобным, все-таки это не лучший подход к установке обработчика прерывания, и пользоваться им следует только в исключительных случаях, например, внутри обработчиков прерываний. Для обычных программ DOS предоставляет две сис­темные функции: 25h и 35h - установить и считать адрес обработчика прерыва­ния, которые и рекомендуются к использованию в обычных условиях.

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

2.6. Прерывания от внешних устройств

Прерывания от внешних устройств или аппаратные прерывания, - это то, что понимается под термином «прерывание». Внешние устройства (клавиатура, дисковод, таймер, звуковая карта и т. д.) подают сигнал, по которому процессор прерывает выполнение программы и передает управление на обработчик прерывания. Всего на персональных компьютерах используется 15 аппаратных прерываний, хотя теоретически возможности архитектуры позволяют довести их число до 64.

IRQ1 (INT 9) - прерывание клавиатуры, вызывается при каждом нажатии и отпускании клавиши на клавиатуре. Стандартный обработчик этого преры­вания выполняет довольно много функций, начиная с перезагрузки по Ctrl-Alt-Del и заканчивая помещением кода клавиши в буфер клавиатуры BIOS.

Самые полезные для программ аппаратные прерывания — прерывания систем­ного таймера и клавиатуры. Так как стандартные обработчики этих прерываний выполняют множество функций, от которых зависит работа системы, их нельзя заменять полностью.

прерванной программе. Этот способ применяют, если нужно, чтобы сначала отработал новый обработчик, а потом он передал управление старому

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

Разумеется, обработка прерываний не должна занимать много времени: если прерывание происходит достаточно часто (например, прерывание последователь­ного порта может происходить 28 800 раз в секунду), его обработчик обязательно должен выполняться за более короткое время. Если, например, обработчик пре­рывания таймера будет выполняться 1/32,4 секунды, то есть половину времени между прерываниями, вся система станет работать в два раза медленнее. А если еще одна программа с таким же долгим обработчиком перехватит это прерыва­ние, система остановится совсем. Именно поэтому обработчики прерываний при­нято писать исключительно на ассемблере.


Информация о работе «Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)»
Раздел: Информатика, программирование
Количество знаков с пробелами: 62234
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
43417
1
0

... персональном компьютере есть одна из версий этой программы. Одна из последняя версия обнаружи­вает более 1100 вирусов. Aidstest для своего нормального функционирования требует, чтобы в памяти не было резидентных антивирусов, блокирующих запись в программные файлы, поэтому их следует выгрузить, либо указав опцию выгрузки самой резидентной программе, либо воспользоваться соответствующей утилитой ( ...

Скачать
219671
1
4

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

Скачать
173906
11
0

... интервал времени. В этом случае поведение АСОД может быть представлено только в дискретных точках (группа динамических моделей с дискретным временем). 6 Описание программы автоматизации учета исполнения бюджета Краснодарского края 6.1 Средства разработки 6.1.1 Компилятор BORLAND PASCAL 7.0 Программа написана на языке Turbo Pascal версии 7.0. Турбо Паскаль появился на рынке программных ...

Скачать
374863
43
0

... интерфеса и интерфейса локольной сети ·     Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...

0 комментариев


Наверх