Справочник программиста на персональном компьютере фирмы IBM. Клавиатура Страница 6. Прием символа без ожидания
|
Страница 6 из 26
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
|