Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



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



 

Интерфейсом программ в персональном компьютере с кла­виатурой является прерывание 16h BIOS. Далее приводится описание его функций.

АН = 00h - чтение с ожиданием двухбайтового кода из буфера клавиатуры. Прочитанный код возвращается в реги­стре АХ: младший байт - в регистре AL, старший - в АН. Если нажата ASCII-клавиша, в AL помещается ASCII-код символа, в АН - скэн-код. При нажатии специальных клавиш AL равен 0, а в АН возвращается расширенный скэн-код.

АН = 0lh - чтение без ожидания двухбайтового кода из бу­фера клавиатуры. Если буфер пуст, в 1 выставляется флаг нуля ZF. В противном случае в АХ возвращается двухбайтовый код из буфера клавиатуры, но продвижение указателя "головы" бу­фера не производится, т.е. код "остается" в буфере.

АН = 02h - определение состояния шифт- и триггерных клавиш. В регистре AL возвращается содержимое байта по ад­ресу 40:17h (см. табл. 3.1).

Описанные далее функции прерывания 16h поддержива­ются только BIOS, дата которого - 15.11.85 и позже.

Функция АН = 05h не имеет аналогов в библиотеке Turbo С и может использоваться для имитации нажатии клавиш в демонст­рационных программах, программах переноса текста и т.д.

Функции АН = 10 - 12h являются аналогами функций 00 - 02h, но предназначены для использования в компьютерах с клавиатурой 101 /102 клавиши.

Функции АН = 00 - 02h прерывания 16h BIOS положены в основу функции bioskey() библиотеки Turbo С. Далее следует описание этой функции.

 

#include <bios.h>

Int bioskey(int cmd)

 

Обращается в зависимости от значения в cmd к функциям АН = 00 - 02h прерывания 16h. Возвращаемое функцией значение повторяет значение реги­стра АХ при выходе из прерывания.

 

Порядок выполнения работы

  1. Разработать, написать и отладить программу управления пе­ремещением символа (например, "*") в пределах заданного на экране окна. Для управления использовать клавиши из набора: "стрелка вверх" (СтВВ), "стрелка вниз" (СтВН), "стрелка вправо" (СтВП), "стрелка влево" (СтВЛ) или функциональные клавиши Fl - F12 (вари­анты см. в таблице). Для ввода использовать стандартные функции языка C++. Сохранить отлаженную программу.
  2. Изменить программу, заменив стандартные функции библиоте­ки C++ своими. Для написания функций используйте заданное преры­вание (см. таблицу), если его возможностей достаточно. Если его возможностей не достаточно, то замените его по своему усмотрению. Сохраните отлаженную программу.
  3. Отлаженные программы предъявить преподавателю.
№ варианта X1 Y1 X2 Y2 Вид движения Клавиши управления Номер прерывания
Постоянное СтВВ, СтВН INT 21h
Пошаговое СтВП, СтВЛ INT 21h
Постоянное F1, F2 INT 21h
Пошаговое Все направления INT 21h
Постоянное F5, F6 INT 16h
Пошаговое F1-F4 INT 16h
Постоянное F9-F12 INT 16h
Пошаговое СтВВ, СтВН INT 16h
Постоянное СтВП, СтВЛ INT 21h
Пошаговое Все направления INT 21h
Постоянное F3, F4 INT 21h
Пошаговое F7, F8 INT 21h
Постоянное СтВВ, СтВН INT 16h
Пошаговое СтВП, СтВЛ INT 16h
Постоянное F9, F10 INT 16h
Пошаговое F11, F12 INT 16h
Постоянное СтВВ, СтВН INT 21h
Пошаговое СтВП, СтВЛ INT 21h
Постоянное F5, F10 INT 21h
Пошаговое F6, F12 INT 21h
                             

Содержание отчета

  1. Краткие сведения о подсистеме ввода информации с клавиатуры, используемых прерываниях, буфере клавиатуры и функциях обслуживания ввода с клавиатуры.
  2. Алгоритмы и тексты отлаженных программ.
  3. Выводы.

 

Контрольные вопросы

 

  1. Что относится к устройствам ввода информации в ЭВМ?
  2. Как можно классифицировать устройства ввода?
  3. Назовите основные характеристики устройств ввода информации.
  4. Зачем нужен буфер клавиатуры?
  5. Почему существует ввод с буферизацией и без нее?
  6. Какие бывают прерывания?
  7. Зачем для ввода данных с клавиатуры используют прерывания?
  8. Какое прерывание вырабатывается при нажатии клавиши?
  9. Назовите основные характеристики системы прерываний.
  10. Почему нужны программные прерывания?
  11. Почему для организации ввода с клавиатуры используются два программных прерывания INT 21h и INT 16h?
  12. Какие функции библиотеки C++ для ввода с клавиатуры Вы знаете?
  13. Какие функции прерывания INT 16h Вы знаете?
  14. Какие функции прерывания INT 21h Вы знаете?
  15. Можно ли в прикладной программе обойтись без ввода с клавиатуры?

 

ПРЕРЫВАНИЯ

Понятия прерывания и обработчика прерывания. Таблица векторов прерываний

Микропроцессоры 8086/88 поддерживают механизм пре­рываний. В самом общем виде это наличие в аппаратуре спе­циальных средств, с помощью которых выполнение текущей программы приостанавливается и процессор переходит к так называемой программе обслуживания прерывания (Interrupt Servise Routine - ISR). Механизм прерываний позволяет организовать выполнение тех или иных функций ядра и быструю реакцию процессора на возникновение каких-то внешних со­бытий: ошибок в арифметических операциях, активизации пе­риферийных устройств и пр.

Микропроцессоры 8086/88 поддерживают 256 прерываний. Каждое из них имеет свой номер и ISR. Адрес точки входа в ISR называется вектором прерывания и хранится в специ­альной таблице, называемой таблицей векторов прерывания (ТВП). Код ISR может располагаться в любом месте памяти. Поэтому вектор прерывания занимает 4 байта: 2 байта отво­дится на значение сегментного регистра, устанавливаемое в CS (старшее слово), 2 байта - на значение смещения, уста­навливаемое в IP (младшее слово). Вся ТВП занимает 256 * 4 = 1024 байт и располагается в оперативной памяти, начиная с адреса 0000:0000.

При возникновении прерывания процессор помешает в стек 6 байт: текущее значение CS, текущее значение IP (пара этих регистров определяет точку, с которой выполнение прерывае­мой программы возобновится), а также 2 байта флагов процес­сора. В CS и IP устанавливаются значения из ТВП, которые задают адрес начала ISR. Прерыванию 0 соответствует вектор прерывания по адресу 0000:0000, прерыванию 1 - по адресу 0000:0004h, прерыванию 2 - по адресу 0000:0008h и т.д.

Сама ISR - это программа, построенная с соблюдением спе­циальных правил:

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

2) перед завершением измененные регистры восстанавли­ваются в свое исходное значение;

3) последней инструкцией ISR, как правило, является инс­трукция возврата из прерывания IRET. Выполняя IRET, про­цессор извлекает из стека шесть слов информации, которые последовательно помещает в регистры IP, CS и регистр фла­гов, возвращаясь к исполнению прерванной программы.

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

Некоторые векторы прерывания в ТВП на самом деле за­дают не точки входа в ISR, а используются для хранения важ­ной системной информации: адресов данных и таблиц. Кроме того, за некоторые векторы "зацеплены" ISR, не выполняю­щие никаких действий. Они служат заглушками для подклю­чения дополнительных обработчиков. Так, например, в нор­мальном состоянии обработчик прерывания 1Ch не выполня­ет никаких действий и содержит единственную инструкцию возврата из прерывания IRET. Прерывание 1Ch вызывается из пределов ISR таймера (обработчик прерывания 8). Преры­вание от таймера, в свою очередь, генерируется 18.2 раза в секунду аппаратурой системного таймера. Есть и другие обра­ботчики - заглушки, вызываемые при функционировании ISR BIOS и MS-DOS.

 

Аппаратные прерывания

 

В процессе функционирования персонального компьютера могут встретиться четыре типа прерываний:

1) аппаратные;

2) программные;

3) исключительные ситуации процессора (processor exceptions);

4) немаскируемые.

Аппаратные прерывания возникают как результат неко­торых внешних событий и в их генерации принимает участие специальная микросхема персонального компьютера - програм­мируемый контроллер прерываний, или PIC (Programmable Interrupt Controller). Наиболее часто для этих целей исполь­зуется одна или несколько микросхем 8259А либо их функци­ональные эквиваленты. В архитектуре IBM PC и IBM PC XT используется PIC на одной микросхеме 8259А (рис. 4.1), ком­пьютеры IBM PC AT и PS/2 используют PIC, построенный на двух микросхемах 8259А (рис. 4.2).

Микросхема 8259А рассчитана на 8 входов запросов пре­рываний, обозначаемых IRQ (Interrupt Request). Сигналы на них возбуждают внешние устройства: адаптеры асинхронной последовательной и параллельной связи, плата системного тай­мера и др. Контроллер прерываний имеет в своем составе ряд программируемых внутренних регистров, определяющих особенности обработки запросов прерываний.

Рис. 4.1. Однокаскадная схема построения контроллера прерываний

Рис 4.2. Двухкаскадная схема построения контроллера прерываний

 

Выход ведущей (единственной в однокаскадной схеме) мик­росхемы 8259А контроллера прерываний подается на специ­альный вход процессора (INTR). Этот вход процессора явля­ется маскируемым: если флаг маскирования прерываний IF равен единице, процессор способен "ощущать" изменение со­стояния линии INTR (прерывания разрешены); если же IF сброшен в 0, изменения на линии INTR не влияют на работу центрального процессора. Поэтому часто аппаратные преры­вания, в формировании которых принимает участие PIC, на­зывают маскируемыми. Если прерывания разрешены и уста­навливается высокий потенциал на линии INTR, процессор завершает исполнение текущей инструкции и отвечает двумя циклами сигнала INTA.

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

Процессор сохраняет в стеке текущее значение регистров флагов CS и IP, затем устанавливает в 0 флаг IF, а в CS и IP - значения из вектора прерывания. В результате управление передается в ISR.

Для того чтобы различать сигналы прерываний от различ­ных внешних устройств, система прерываний IBM PC постро­ена следующим образом. Каждое внешнее устройство подклю­чено к собственной линии запроса прерываний IRQ. При пол­учении сигнала на линии IRQ контроллер прерываний пере­дает в процессор уникальный для данной IRQ байт номера прерывания. Соответствие линий IRQ и номеров прерывания задается программированием контроллера прерываний. Такое про­граммирование выполняется в ходе начальной загрузки системы специальной процедурой BlOSa и в дальнейшем обычно не из­меняется. В принципе, перепрограммирование PIC может вы­полняться в любой момент и некоторые программы (Windows, OS/2) используют это при своей загрузке. В ходе программи­рования PIC задаются старшие 5 бит номера прерывания, а младшие 3 бита генерирует микросхема 8259А, определяя дво­ичный код номера линии IRQ. Ведущая (единственная) мик­росхема программируется BIOSом так, чтобы передавать в про­цессор прерывания от 08h до 0Fh. Ведомая 8259А в IBM PC AT настраивается на передачу номеров прерываний от 70h до 77h.

Кроме отображения IRQ на номера прерывания, PIC вы­полняет упорядочивание по приоритету одновременно воз­никающих запросов. Обычно наивысший приоритет имеет за­прос на линии IRQ0, затем в порядке убывания IRQI, IRQ2, ..., IRQ7. Вход процессора INTR является так называемым "уровнечувствительным". Это значит, что если процессор ощу­щает высокий уровень, он всегда начинает цикл обработки прерывания. Если начатая ISR устанавливает IF в единицу (а это, как правило, так и бывает), сохранение сигнала на линии INTR вызовет повторное вхождение в ту же самую ISR, a затем вхождение в третий, четвертый и далее раз до тех пор, пока не переполнится стек. Для того чтобы этого не происхо­дило, контроллер прерываний блокирует генерацию сигнала INTR для текущей активной линии IRQ до тех пор, пока ис­полняемая ISR не даст явного указания сделать это. Обычно так ISR обозначают свое завершение, посылая в PIC команду завершения прерывания, или EOI (End Of Interrupt). Если ISR не сделает этого, контроллер продолжает блокировать вы­работку сигнала INTR для всех последующих запросов пре­рывания как по данной линии, так и по другим, менее при­оритетным линиям.

Любая из линий запросов IRQi может быть маскирована. Специальный внутренний регистр PIC хранит битовую маску входов IRQi: бит 0 регистра маски управляет IRQ0 (IRQ8 в ведомой микросхеме 8259А), бит 1 - IRQI (IRQ9), ..., бит 7 - IRQ7 (IRQ15). Если бит равен нулю контроллер генерирует сигнал на линии INTR, если бит равен единице, контроллер не "чувствует" запрос на маскированной битом линии IRQi.

Использование двухкаскадной схемы для построения кон­троллера прерываний расширяет до 15 чисто обслуживаемых внешних устройств. Для двухкаскадной схемы выход INTR ведомой микросхемы 8259А подается на линию LRQ2 ведущей микросхемы. В результате линии запросов упорядочиваются по приоритету следующим образом: максимальный приоритет имеет IRQ0, затем в порядке убывания IRQI, IRQ8, ..., IRQ15, IRQ3, ..., IRQ7. Как правило, PIC в ходе начальной загрузки настраивается так, что для линий IRQ0 - IRQ7 генерируются прерывания с номерами 08h - 0Fh соответственно, а для линий IRQ8 - IRQ15 - прерывания с номерами 70h - 77h. Под­ключение внешних устройств персональных компьютеров к линиям IRQ и, следовательно, закрепление аппаратных пре­рываний для большинства персональных компьютеров типа IBM PC фактически стандартизовано. В табл. 4.1 приводится закрепление внешних устройств и аппаратных прерываний для IBM PC AT.

 

Табл.4.1. Использование прерываний в IBM PC AT

Линия запроса прерыва­ния Номер преры­вания Обычное использование
IRQO 8h Системный таймер
IRQ1 9h Клавиатура
IRQ2 0Ah Переадресация от ведомой 8259А
IRQ3 0Bh COM2 (или COM4)
IRQ4 0Ch СОМ1 (или COM3)
IRQ5 0Dh LPT2
IRQ6 0Eh Контроллер накопителей на гибком диске
IRQ7 0Fh LPT1
IRQ8 70h Таймер реального времени
IRQ9 71h Прерывание обратного хода луча EGA- и VGA-адаптера  
IRQ 10 72h Свободно
IRQ11 73h Свободно
IRQ12 74h Свободно
IRQ13 75h Сопроцессор математики с плавающей точкой
IRQ 14 76h Контроллер накопителя на жестком диске
IRQ 15 77h Свободно

Немаскируемые прерывания

 

Процессор, кроме входа INTR, использует еще один вход -вход немаскируемого прерывания, или NMI (NonMaskable Interrupt). Название входа говорит о том, что программное обеспечение не может блокировать восприятие сигнала. Когда на входе NMI появляется сигнал, процессор без помощи PIC генерирует байт номера прерывания, равный двум. В отли­чие от входа INTR, NMI является "чувствительным к фрон­ту сигнала" (edge sensitive). Генерацию прерывания 2 вызы­вает изменение состояния линии: с логического нуля на логи­ческую единицу. После того, как прерывание сгенерировано, высокий потенциал линии не способен вызвать очередную ге­нерацию прерываний. Только возврат сигнала в нуль, а затем - в единицу заставит процессор генерировать очередное нема­скируемое прерывание.

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

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

Когда в программе встречается инструкция INT, процес­сор исполняет действия, рассмотренные ранее для аппаратно­го прерывания. Отличие состоит в том, что байт номера пре­рывания задается самой инструкцией. В этой связи не требу­ется выполнение циклов INTA. Инструкция INT имеет более высокий приоритет, чем аппаратные и немаскируемые пре­рывания: если процессор начинает исполнение инструкции INT, он не прерывается сигналами на линиях NMI и INTR. Многие из программных прерываний используются для до­ступа к ISR BIOSa, операционной системы или инсталлируе­мых драйверов. Кратко правила взаимодействия с ISR (номер прерывания, описание функции, значения регистров на входе в ISR и после ее завершения, индикация ошибок и т.п.) называют интерфейсом прикладной программы или API (Application Program Interface).

Исключительные ситуации

 

Исключительные ситуации - это генерация внутренних прерываний процессором при возникновении необычных ус­ловий во время исполнения машинных инструкций. Приме­ром таких ситуаций для микропроцессора Intel 8086/88 явля­ется "деление на нуль" (генерируется прерывание 0) и "поша­говое исполнение" (генерация прерывания 1 после заверше­ния текущей инструкции). Число исключительных ситуаций, генерируемых процессорами 80286 и 80386, значительно боль­ше. Для них используются прерывания с номерами 05h и боль­ше (например, для 80386 от 05h до 10h включительно). Мно­гие из этих исключительных ситуаций могут генерироваться только при переключении в защищенный режим работы и свя­заны с нарушением защиты памяти. Для того чтобы избе­жать "столкновения" прерываний с одинаковыми номерами, за­крепленных за аппаратными прерываниями и исключитель­ными ситуациями защищенного режима, операционная сис­тема может выполнить перепрограммирование контроллера прерываний.



Просмотров 2173

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!