рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Работа сделанна в 2000 году

Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика - Курсовой Проект, раздел Программирование, - 2000 год - Системы программирования и операционные системы Резидентный Обработчик Прерываний От Клавиатуры С Подключением До Системного ...

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

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

Настоящая и несколько последующих статей посвящены этому важному для прикладного программиста вопросу. Для того чтобы написать, обработчик прерываний от клавиатуры, необходимо хорошо представлять, каким образом вводятся, куда попадают и как обрабатываются символы, вводимые с клавиатуры. Процесс взаимодействия системы с клавиатурой показан на рис. 2.3. IRQ INT Адрес системного Аппаратное Контроллер Микро- обработчика int09h прерывание прерываний Вектор09 процессор из вектора 09 на IRQ1 IRQ7 Запуск систем Нажатие или обработчика int09h отпускание Байт флагов любой клавиши Системный клавиатуры Контроллер Порт 60h обработчик 40h17h клавиатуры Скэн-код int09h 7 6 5 4 3 2 1 0 Клавиатура Ins Скэн-код Код Caps Lock Кольцевой буфер ASCII Num Lock 40h1Eh ввода Scroll Lock 40h1Ah Alt Адрес головного Скэн ASCII Ctrl символа Скэн ASCII Shift левый Скэн ASCII Shift правый Программа Скэн ASCII пользователя Адрес хвостового символа Запрос на ввод 40h3Ch с клавиатуры Ввод самого старого символа Рис. 2.3. Процесс взаимодействия системы с клавиатурой.

Работой клавиатуры управляет специальная электронная схема - контроллер клавиатуры.

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

Скэн-код однозначно указывает на нажатую клавишу, однако, по нему нельзя определить, работает ли пользователь на нижнем или верхнем регистре. С другой стороны, скэн-коды присвоены всем клавишам клавиатуры, в том числе управляющим клавишам Shift , Ctrl , Alt , Caps Lock и др. Таким образом, очевидно, что определение введенного символа должно включать в себя не только считывание скэн-кода нажатой клавиши, но и выяснение того, не были ли перед этим нажаты, например, клавиши Shift верхний регистр или Caps Lock фиксация верхнего регистра.

Всем этим анализом занимается программа обработки прерываний от клавиатуры. Как нажатие, так и отпускание любой клавиши вызывает сигнал аппаратного прерывания, заставляющий процессор прервать выполняемую программу и перейти на программу системного обработчика прерываний от клавиатуры, входящего в систему BIOS. Поскольку обработчик вызывается через вектор 09h, его иногда называют программой int09h. Программа int09h, помимо порта 60h, работает еще с двумя областями оперативной памяти кольцевым буфером ввода, располагаемым по адресам от 40hlEh до 40h3Dh, куда в конце концов помещаются коды ASCII нажатых клавиш, и битом флагов клавиатуры, находящимся по адресу 40h17h, где фиксируется состояние управляющих клавиш Shift , Caps Lock , Num Lock и др Программа int09h, получив управление в результате прерывания от клавиатуры, считывает из порта 60h скэн-код и анализирует его значение.

Если скэн-код принадлежит одной из управляющих клавиш, и, к тому же, представляет собой код нажатия, в байте флагов клавиатуры устанавливается бит флаг, соответствующий нажатой клавише.

Например, при нажатии правой клавиши Shift в байте флагов устанавливается бит 0, при нажатии левой клавиши Shift - бит 1, при нажатии любой клавиши Ctrl - бит 2 и т.д. Биты флагов сохраняют свое состояние, пока клавиши по одиночке или в любых комбинациях остаются нажатыми.

Если управляющая клавиша отпускается, программа int09h получает скэн-код отпускания и сбрасывает соответствующий бит в байте флагов. Кроме состояния указанных клавиш, в байте флагов фиксируются еще режимы Scroll Lock , Num Lock , Caps Lock и Insert см. рис. 2.3. Компьютеры PCAT имеют второй байт флагов клавиатуры, находящийся по адресу 40h18h, и отражающий состояние управляющих клавиш на расширенной 101-клавишной клавиатуре.

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

Поскольку за каждой клавишей закреплено, как правило, не менее двух символов а и А, 1 и , 2 и и т.д то каждому скэн-коду соответствуют, как минимум, два кода ASCII. В процессе трансляции программа int09h анализирует состояние флагов, так что если нажата, например, клавиша Q скэн-код 10h, код ASCII буквы Q - 51h, а буквы q - 7lh, то формируется двухбайтовый код 1071h, но если клавиша Q нажата при нажатой клавише Shift смена регистра, то результат трансляции составит 1051h. Тот же код 1051h получится, если при нажатии клавиши Q был включен режим Caps Lock заглавные буквы, однако при включенном режиме Caps Lock и нажатой клавише Shift образуется код 1071h, поскольку в такой ситуации клавиша Shift на время нажатия переводит клавиатуру в режим нижнего регистре строчные буквы.

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

Объем буфера составляет 16 слов, при этом коды символов извлекаются из него в том же порядке, в каком они в него поступали. За состоянием буфера следят два указателя. В хвостовом указателе слово по адресу 40lCh хранится адрес первой свободной ячейки, в головном указателе 40 1Ah - адрес самого старого кода, принятого с клавиатуры и еще не востребованного программой. Оба адреса представляют собой смещения относительно начала области данных BIOS, т.е. числа от 1Eh до 3Ch. В начале работы, когда буфер пуст, оба указателя - и хвостовой, и головной, указывают на первую ячейку буфера.

Программа int09h, сформировав двухбайтовый код, помещает его в буфер по адресу, находящемуся в хвостовом указателе, после чего этот адрес увеличивается на 2, указывая опять на первую свободную ячейку. Каждое последующее нажатие на какую-либо клавишу добавляет в буфер очередной двухбайтовый код и смещает хвостовой указатель. Выполняемая программа, желая получить код нажатой клавиши, должна обратиться для этого к каким-либо системным средствам - функциям ввода с клавиатуры DOS прерывание 21h или BIOS прерывание 16h. Системные программы с помощью драйвера клавиатуры точнее говоря, объединенного драйвера клавиатуры и экрана, так называемого драйвера консоли с именем CON считывают из кольцевого буфера содержимое ячейки, адрес которой находится в головном указателе, и увеличивает этот адрес на 2. Таким образом, программный запрос на ввод с клавиатуры фактически выполняет прием кода не с клавиатуры, а из кольцевого буфера.

Хвостовой указатель, перемещаясь по буферу в процессе занесения в него кодов, доходит, наконец, до конца буфера адрес 40h3Ch. В этом случае при поступлении очередного кода адрес в указателе не увеличивается, а, наоборот, уменьшается на длину буфера.

Тем самым указатель возвращается в начало буфера, затем продолжает перемещаться по буферу до его конца, опять возвращается в начало и так далее по кольцу. Аналогичные манипуляции выполняются и с головным указателем.

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

Если компьютер не выполняет никакой программы, то активной является программа командного процессора COMMAND.COM. Активность COMMAND.COM заключается в том, что он, поставив запрос к DOS на ввод с клавиатуры с помощью функции 0Ah прерывания 21h ожидает ввода с клавиатуры очередной команды пользователя. Как только в кольцевом буфере ввода появляется код символа, функция 0Ah переносит его во внутренний буфер DOS, очищая при этом кольцевой буфер ввода, а также выводит символ на экран.

При получении кода клавиши Enter 0Dh функция 0Ah завершает свою работу, а командный процессор предполагает, что ввод команды закончен, анализирует содержимое буфера DOS и приступает к выполнению введенной команды. При этом командный процессор работает практически лишь с младшими половинами двухбайтовых кодов символов, именно, с кодами ASCII. Если компьютер выполняет какую-либо программу, ведущую диалог с оператором, то, как ухе отмечалось, ввод данных с клавиатуры а точнее из кольцевого буфера ввода и вывод их на экран с целью эхо контроля организует эта программа, обращаясь непосредственно к драйверу BIOS int 16h или к соответствующей функции DOS int 21h. Может случиться, однако, что выполняемой программе не требуется ввод с клавиатуры, а оператор нажал какие-то клавиши.

В этом случае вводимые символы накапливаются с помощью программы int09h в кольцевом буфере ввода и, естественно, не отображаются на экране.

Так можно ввести до 15 символов. Когда программа завершится, управление будет передано COMMAND. СОМ, который сразу же обнаружит наличие символов в кольцевом буфере, извлечет их оттуда и отобразит на экране. Такой ввод с клавиатуры называют вводом с упреждением. До сих пор речь шла о символах и кодах ASCII, которым соответствуют определенные клавиши терминала и которые можно отобразить на экране. Это буквы прописные и строчные, цифры, знаки препинания и специальные знаки, используемые в программах и командных строках, например и др. Однако имеется ряд клавиш, которым не назначены отображаемые на экране символы.

Это, например, функциональные клавиши F1 , F2 F10 клавиши управления курсором Home , End , PgUp , PgDn , Стрелка вправо , Стрелка вниз и др. При нажатии этих клавиш в кольцевой буфер ввода засылается расширенный код ASCII, в котором младший байт равен нулю, а старший является скэн-кодом нажатой клавиши.

Расширенный коды ASCII поступают в буфер ввода и в случае нажатия комбинаций управляющих и функциональных клавиш, например, Shift FI , Ctrl Home на дополнительной цифровой клавиатуре, Alt Insert и др. В этом случае, однако, в старший байт расширенного кода ASCII помещается уже не скэн-код клавиши, а некоторый код, специально назначенный этой комбинации клавиш. Естественно, этого кода нет среди обычных скэн-кодов. Например, клавиша F1 , скэн-код которой равен 3Bh, может генерировать следующие расширенные коды ASCII F1 ЗB00h Ctrl F1 5E00h Alt F1 6800h Shift F1 5400h Итак, прерывание, возникающее при нажатии или отпускании любой клавиши, обрабатывается по относительно сложному алгоритму с системным обработчиком, содержащимся в BIOS. Рассмотрим примеры вмешательства в этот процесс.

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

– Конец работы –

Эта тема принадлежит разделу:

Системы программирования и операционные системы

Обработчик должен иметь механизм выгрузки из оперативной памяти встроенный в него самого. Также программа должна иметь защиту от повторной установки в оперативную… Такие программы носят названия программ, резидентных в памяти Terminate and Stay Resident, TSR, или просто резидентных…

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Краткие теоретические сведенья
Краткие теоретические сведенья. Резидентный обработчик прерываний Большой класс программ, обеспечивающих функционирование вычислительной системы драйверы устройств, программы шифрации и защиты данн

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

Выгрузка резидентной программы из памяти
Выгрузка резидентной программы из памяти. Следует заметить, что в DOS отсутствуют средства выгрузки резидентных программ. Единственный предусмотренный для этого механизм - перезагрузка компь

Перехват прерываний
Перехват прерываний. В архитектуре процессоров 80х86 предусмотрены особые случаи, когда процессор прекращает прерывает выполнение текущей программы и немедленно передает управление программе-обрабо

Описание для пользователя
Описание для пользователя. Приведнная ниже программа осуществляет перехват прерывания от клавиатуры, и производит запись скэн-кодов клавиш и байта флагов клавиатуры в файл с именем scodef.txt. При

Описание для программиста
Описание для программиста. Программа пишется в формате СОМ, поэтому в ней предусматривается только один сегмент, с котором связываются сегментные регистры CS и DS в начале сегмента резервируется 25

Рекомендации по улучшению
Рекомендации по улучшению. Главным недостатком этой программы является неудобное визуальное восприятие записей в файле. Т.е. мы видим не ASCII-код который образовался в результате нажатия кл

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги