Реферат: Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)

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 секунды, то есть половину времени между прерываниями, вся система станет работать в два раза медленнее. А если еще одна программа с таким же долгим обработчиком перехватит это прерыва­ние, система остановится совсем. Именно поэтому обработчики прерываний при­нято писать исключительно на ассемблере.

2.7. Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика

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

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

IRQ INT Адрес системного

Аппаратное Контроллер Микро- обработчика int09h

прерывание прерываний Вектор09 процессор из вектора 09

на IRQ1

IRQ7 Запуск систем

Нажатие или обработчика int09h

отпускание Байт флагов

любой клавиши Системный клавиатуры

Контроллер Порт 60h обработчик [40h:17h]

клавиатуры Скэн-код int09h | 7 | 6| 5| 4| 3| 2| 1| 0|

Клавиатура

Ins

Скэн-код Код Caps Lock

Кольцевой буфер ASCII Num Lock

40h:1Eh ввода Scroll Lock

К-во Просмотров: 270
Бесплатно скачать Реферат: Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)