Справочник программиста на персональном компьютере фирмы IBM. Клавиатура - Прием символа без ожидания
ОГЛАВЛЕНИЕ
3.1.5 Прием символа без ожидания.
Некоторые программы, работающие в реальном времени не могут
останавливаться и ждать нажатия клавиши; они принимают символ из
буфера клавиатуры только в те моменты, когда это удобно для прог-
раммы. Например, бездействие процессора во время ожидания ввода с
клавиатуры остановило бы все действия на экране в игровой прог-
рамме. Напомним, что легко проверить пуст или нет буфер клавиату-
ры, используя методы, описанные в [3.1.2].
Высокий уровень.
Надо просто использовать INKEY$, не помещая его в цикл:
100 C$=INKEY$ 'получение символа
110 IF C$ <> "" THEN...'если символ введен, то ...
120 ... 'иначе нет символа в буфере
Средний уровень.
Функция 6 прерывания 21H - это единственный способ получить
введенный символ без ожидания. Эта функция не дает эха на экран и
не распознает Ctrl-Break. Перед вызовом прерывания в DL должно
быть помещено 0FFH. В противном случае функция 6 служит совершен-
но противоположной цели - печатает в текущей позиции курсора
символ, находящийся в DL. Флаг нуля устанавливается в 1, если
буфер клавиатуры пуст. Если символ принят, то он помещается в AL.
Код ASCII 0 индицирует расширенный код и для получения номера
кода прерывание должно быть повторено.
MOV AH,6 ;номер функции DOS
MOV DL,0FFH ;запрос ввода с клавиатуры
INT 21H ;получение символа
JZ NO_CHAR ;переход если нет символа
CMP AL,0 ;проверка на расширенный код
JE EXTENDED_CODE ;если да, то на спец. процедуру
... ;иначе в AL код ASCII
EXTENDED_CODE: INT 21H ;получаем номер расширенного кода
... ;номер кода в AL