3.1.5 Прием символа без ожидания.

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

  Некоторые  программы,  работающие в реальном времени не  могут
останавливаться и ждать нажатия клавиши;  они принимают символ из
буфера клавиатуры только в те моменты, когда это удобно для прог-
раммы. Например, бездействие процессора во время ожидания ввода с
клавиатуры  остановило бы все действия на экране в игровой  прог-
рамме. Напомним, что легко проверить пуст или нет буфер клавиату-
ры, используя методы, описанные в [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

 

Вы находитесь в разделе: 

Добавить коментарий