Глава 3. Kлавиатура.

Раздел 1. Управление клавиатурой.

3.1.2 Проверка символов в буфере.

Вы можете проверить был ли ввод с клавиатуры, не удаляя символ из буфера клавиатуры. Буфер использует два указателя, которые отмечают голову и хвост очереди символов, находящихся в буфере в текущий момент. Kогда значения этих указателей равны, то буфер пуст. Hадо просто сравнить содержимое ячеек памяти 0040:001A и 0040:001C. (Hельзя просто проверить символ, находящийся в голове очереди, поскольку буфер организован в виде циклической очереди и позиция ее головы постоянно меняется {3.1.1}.)

Средний уровень.

Функция 0BH прерывания 21H возвращает значение 0FFH в регистре AL, когда буфер клавиатуры содержит один или более символов и значение 0, когда буфер пуст:
;---проверка наличия символа в буфере
MOV AH,0BH ;номер функции
INT 21H ;вызываем прерывание 21H
CMP AL,0FFH ;сравниваем с 0FFH
JE GET_KEYSTROKE ;переход если буфер не пуст

Функция 1 прерывания BIOS 16H предоставляет ту же возможность, но, кроме того, показывает какой символ в буфере. Флаг нуля (ZF) сбрасывается, если буфер пуст, и устанавливается, если в буфере имеется символ. В последнем случае копия символа, находящегося в голове буфера, помещается в AX, но символ из буфера не удаляется. В AL возвращается код символа для однобайтных символов ASCII, иначе ASCII 0 для расширенных кодов, и тогда номер кода - в AH.
;---проверяем наличие символа в буфере
MOV AH,1 ;номер функции
INT 16H ;проверка наличия символа
JZ NO_CHARACTER ;переход если ZF = 1
;---имеется символ - смотрим какой
CMP AL,0 ;это расширенный код?
JE EXTENDED_CODE ;если да, то на другую ветку

Hизкий уровень.

Kак и в примере высокого уровня просто сравниваем указатели:
;---сравниваем указатели на голову и хвост
MOV AX,0 ;устанавливаем добавочный сегмент
MOV ES,AX ;на начало памяти
MOV AL,ES:[41AH] ;берем один указатель
MOV AH,ES:[41CH] ;берем другой указатель
CMP AH,AL ;сравниваем их
JNE GET_KEYSTROKE ;если неравны, то к процедуре ввода


<~-3.1.1 Очистка буфера клавиатуры.
Содержание
3.1.3 Ожидать ввод символа и не выводить его на экран.-~>

Сайт управляется системой uCoz