Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования на Ассемблере. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
607 Кб
Скачать

Вуказывается адрес буфера, в указывается дескриптор стандартного ввода.

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

Если ввести больше символов, чем затребовано функцией 3F, то в буфер пользователя пересылается точное число символов, а оставшиеся будут в буфере ОС, готовые к вводу.

Если не принять специальных мер к очистке буфера, символы поступят в программу при очередном прерывании ОС с функцией 3F, даже если оператор не начал вводить очередную порцию данных. Схема ввода данных с клавиатуры приведена на рис. 15.1.

 

 

 

 

 

 

 

МП

 

 

 

 

Адрес ПОП

 

 

 

 

Аппаратное

 

 

 

 

 

 

из вектора

 

 

 

 

 

 

 

 

 

 

прерывания 09h

 

 

 

 

прерывание 09h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Порт 60h

 

 

 

 

 

 

 

 

 

 

 

 

 

Скэн-код

 

 

 

 

 

 

 

 

 

 

 

Контроллер

 

 

 

 

 

 

 

Слово флагов

 

 

 

 

 

 

 

 

 

 

 

 

Клавиатура

 

 

клавиатуры

 

 

ПОП

 

 

 

клавиатуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int 09h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Скэн-код

 

 

 

Кольцевой

 

 

 

ASCII код

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

буфер ввода

 

 

 

 

 

 

 

 

 

 

Голова Скэн | ASCII

Скэн | ASCII

Программа

пользователя

 

 

 

 

 

int 16h

 

 

 

Хвост

 

 

 

 

 

Рис. 15.1. Структурная схема ввода данных с клавиатуры

71

Работой клавиатуры управляет контроллер клавиатуры.

В его функции входит распознавание нажатой клавиши и помещение закрепленного за ней кода в свой выходной регистр с номером 60h. Код клавиши (скэн-код) является порядковым номером клавиши. Каждой клавише присваивается два скэн-кода – нажатия (меньший) и отжатия клавиши.

Определение введенного символа включает в себя не только считывание скэн-кода нажатой клавиши, но и выяснение того, были ли при этом нажаты Shift или Caps Lock. Этим анализом занимается Программа Обработки Прерывания от клавиатуры.

Нажатие и отпускание клавиши вызывает аппаратное прерывание IRQ1 и запуск Программы Обработки Прерывания (INT 09h). Эта программа хранится по фиксированному адресу в BIOS. За клавиатурой закреплен вектор с номером 09h, адрес ПОП располагается в словах по

адресу 24h и 26h. Программа работает с двумя областями памяти: кольцевым буфером ввода, куда помещаются ASCII-коды нажа-

тых клавиш; словом состояния клавиатуры, где фиксируется состояние управ-

ляющих клавиш.

ПОП считывает из порта 60h скэн-код и анализирует его значение. Если это управляющая клавиша и код нажатия, то в слове флагов кла-

виатуры устанавливается бит, который сбросится при отпускании клавиши.

При нажатии любой другой клавиши скэн-код нажатия по таблице

трансляции кодов формируется в ASCII-код и сохраняется в двух байтах: скен-код и ASCII-код.

Полученный 2-байтовый код засылается программой в кольцевой буфер ввода (из 15 слов), который служит для синхронизации ввода данных с клавиатуры и программы пользователя. Коды символа извлекаются из него в том порядке, как поступали. У него есть два указателя: хвостовой хранит адрес свободной ячейки, головной – адрес самого старого кода, еще не востребованного программой.

Выполняемая программа, желая получить код нажатой клавиши,

должна вызвать прерывание INT 16H, которое активизирует драйвер клавиатуры BIOS. Драйвер считывает из кольцевого буфера содержи-

мое ячейки, адрес которой находится в головном указателе и увеличивает этот адрес на два.

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

72

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]