Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Новая_Арх.комп.обезано(ПМ).doc
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
707.58 Кб
Скачать

1 Лабораторные работы № 1, 2 «Работа клавиатуры»

Цель: изучение основ ввода информации с помощью клавиатуры.

Содержание работы. Первые две лабораторных работы посвящены вводу информации с клавиатуры. Клавиатура компьютера представляет собой унифицированное устройство со стандартным разъемом и последовательным интерфейсом связи с системной платой. Клавиатура содержит внутренний контроллер, осуществляющий сканирование матрицы клавиш, управление индикаторами, внутреннюю диагностику и связь с системной платой. При нажатии на одну из клавиш и ее отпускании контроллер клавиатуры генерирует скан-коды, которые показывают местоположение нажатой клавиши на матрице клавиш клавиатуры. Размер скан-кода составляет один байт. При нажатии клавиши байт скан-кода содержит число от 1 до 83 (для стандартной клавиатуры PC). При отпускании клавиши генерируется число на 128 большее скан-кода, после чего полученный скан-код преобразуется подпрограммой BIOS, ответственной за работу клавиатуры с учетом таблицы символов и байта состояния клавиатуры в ASCII-код. Скан- и ASCII-коды помещаются в буфер клавиатуры – область оперативной памяти в BIOS Data Area, служащей для связи процессора и клавиатуры. Клавиатура обычно поддерживается аппаратным прерыванием IRQ1 (вектор 09h), по которому обрабатываются коды клавиатуры.

Порядок выполнения работы: разработать алгоритм программы; составить исходный текст программы на Ассемблере; создать исполняемый файл программы; исследовать скан- и ASCII- коды для различных сочетаний клавиш; защитить программу.

Лабораторная работа разбивается на две части:

Задание № 1. В лабораторной работе № 1 необходимо написать программу, которая выдает на экран скан- и ASCII-коды нажимаемых клавиш в шестнадцатеричной системе счисления. Для считывания кодов используется программно-вызываемое прерывание BIOS – INT 16h (см. Приложение А). Номер функции задается в регистре ah, если ah = 0, то BIOS производит чтение из буфера клавиатуры скан-кода (помещается в ah) и ASCII-кода (помещается в al), при этом компьютер ожидает нажатия клавиши.

Рекомендации к выполнению. Наиболее простым способом перевода является разбиение байта с помощью логических операций. Байт разбивается на две половины: старшие и младшие четверки бит. Одному шестнадцатеричному числу соответствует 4 бита, следовательно, код можно представить двумя шестнадцатеричными числами. Для вывода на экран необходимы ASCII-коды цифр шестнадцатеричной системы. Их нужно предварительно задать в сегменте данных в виде последовательности от «0» до «f». Полученные четверки бит будут являться смещением для определения необходимого ASCII-кода при использовании индексной адресации со смещением. Для вывода на экран можно воспользоваться функциями DOS.

Задание № 2. В лабораторной работе № 2 изучается байт состояния клавиатуры – ячейка памяти, отображающая состояние специальных клавиш клавиатуры (таблица 2). Байт построен по принципу регистра флагов, т.е. каждый бит отвечает за нажатие определенной клавиши, если она нажата, то бит равен 1, если нет – 0. Предлагается создать программу, которая выводит текущее значение байта состояния клавиатуры в двоичной системе счисления и постоянно перерисовывает его, для того чтобы было возможно отследить нажатие специальных клавиш в режиме реального времени.

Таблица 2 – Структура байта состояния клавиатуры:

Номер бита

Клавиша (1 нажата; 0 отжата)

0

правый Shift

1

левый Shift

2

Ctrl

3

Alt

4

Scroll Lock

5

Num Lock

6

Caps Lock

7

Insert

Считывание байта состояния необходимо произвести двумя способами: обращением к BIOS клавиатуры (прерывание INT 16h) и непосредственным обращением к ячейке оперативной памяти в BIOS data area c абсолютным адресом 417h. Байты, полученные обоими способами, должны одновременно отображаться на экране.