Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_lab__rab_spo.doc
Скачиваний:
14
Добавлен:
05.09.2020
Размер:
433.66 Кб
Скачать

2.2.2.2 Ввод символа без ожидания

Некоторые программы, работающие в реальном времени, не могут останавливаться и ждать нажатия клавиши. Такие программы принимают символ из буфера, только тогда, когда это им удобно, например, это игровые программы.

Функция 6 прерывания 21h – единственный способ получить введенный символ без ожидания. Эта функция не дает эха на экране и не распознает Ctrl-Break. Перед вызовом прерываний в DL должно быть помещено FFh. Иначе функция 6 будет печатать символ, находящийся в DL в текущую позицию курсора. Если символ принят, то он помещается в AL. Нулевое значение говорит о расширенном коде, и прерывание должно быть повторено.

MOV AH,6 ; номер функции

MOV DL,FFh ; запрос ввода с клавиатуры

INT 21H ; получение символа

JZ NO_CHAR ; переход, если нет символа

CMP AL,0 ; проверка на расширенный код

JE EXT_COD ; переход,если расширенный код

...........

EXT_COD: INT 21h

2.2.2.3. Прямой ввод с клавиатуры без эхо

Функции 7 и 8 прерывания 21h ожидают ввода символа, если буфер клавиатуры пуст. Появление символа на экране не отображается. При этом функция 8 распознает Ctrl-Break, а функция 7 не реагирует на него. В обоих случаях символ возвращается в AL. Когда в AL содержится 0, получен расширенный код. Нужно повторить прерывание, и в AL появится второй байт расширенного кода.

MOV AH,7 ; номер функции

INT 21h ; ожидаем ввод символа

CMP AL,0 ; проверка на расширенный код

JE EXT_COD ; переход на процедуру, иначе код

символа в AL

2.2.2.4. Проверка состояния клавиатуры

Функция 0B помещает значение FF в регистр AL, если буфер клавиатуры содержит один или более символов, и значение 0, когда буфер пуст.

MOV AH,0Bh ; номер функции

INT 21h ; вызываем прерывание

CMP AL,FFh ; сравниваем с FF

JE GET_KEY ; переход, если буфер не пуст

2.2.2.5. Получение строки символов

Функция 0A позволяет вводить строку длиной до 254 символов, выдавая эхо на экран. Эта функция продолжает ввод поступающих символов до тех пор, пока не нажата клавиша Enter. DS:DX указывает на адрес памяти, куда должна быть помещена строка. Первый байт в этой позиции должен содержать число байтов, отводимых для этой строки. После того как строка введена, второй байт даст число реально введенных символов. Сама строка начинается с третьего байта.

MOV AX,5000h ; указываем адрес области данных

MOV DS,AX ;

MOV DX,0 ;

MOV BX,DX ;

MOV AL,51 ; указываем длину строки

MOV [BX],AL ; заполняем первый байт

MOV AH,0Ah ; номер функции

INT 21h ; получаем строку

Эта функция выполняет команды редактирования строки. Нажатие клавиши Backspace или "стрелка-влево" удаляет символ с экрана без помещения его в память. Расширенные коды игнорируются, пустые строки допускаются (имеется в виду клавиша Enter, которой не предшествует другой символ). Когда вводится больше символов, чем отведено места для строки, лишние символы игнорируются, и включается гудок динамика.

Соседние файлы в предмете Системное программное обеспечение