Функции 7 и 8 прерывания 21H ожидают ввода символа, если буфер клавиатуры пуст; появление символа на экране не отображается.
Основные функции для ввода символов с клавиатуры
Разница между этими функциями в том, что функция 8 распознаёт специальное сочетание клавиш "Ctrl+Break"(при активизации Ctrl+Break выполняется прерывание INT 23h – останов программы), а функция 7 игнорирует это сочетание клавиш.
Функции 7 и 8 возвращают введённый символ в регистр AL. Если AL содержит ASCII 0, то получен расширенный код. При этом необходимо повторить вызов прерывания с теми же параметрами, и в AL появится второй байт расширенного кода.
Вход:
АН
07h
Выход:
AL
код символа
Вход:
АН
08h
Выход:
AL
код символа
;--- получаем введённый символMOV AH,8 ; номер функцииINT 21HCMP AL,0 ; проверяем на расширенный кодJE EXT_COD ; если да, то переход на анализ кода иначе – ; обработка символа анализ расширенного кодаEXT_COD: INT 21H ; берём второй байт кода CMP AL, 75 ; проверяем на "стрелка влево" JE CUR_LEFT ; переход к обработчику CMP AL, 77 ; проверяем на "стрелка вправо" JE CUR_RIGHT ; переход к обработчику
Функция 01h – ожидание ввода символа с эхопечатью
Вход:
АН
01h
Выход:
AL
символ, полученный из STDIN
Функция 1 прерывания 21H ожидает ввода символа с клавиатуры, если её буфер пуст, а затем выводит его на экран в текущую позицию курсора.
Функция обрабатывает нажатие "Ctrl+Break". Введённый символ сохраняется в регистре AL. Если содержимое AL равно ASCII 0, то для получения расширенного кода необходимо повторить прерывание.
Функция 02h – вывод символа на STDOUT с проверкой на Ctrl+Break
Вход:
АН
02h
DL
символ, выводимый на устройство стандартного вывода
Выход:
Нет
---
В DL можно записать как ASCII-код символа, так сам символ. В последнем случае символ заключается в одинарные кавычки. Если при выполнении этой функции была нажата комбинация клавиш Ctrl+Break, то выполняется прерывание INT 23h, которое по умолчанию осуществляет выход из программы.
Данная функция обрабатывает некоторые управляющие символы:
Выводимый символ
Действие
BEL (07h)
появляется звуковой сигнал
BS (08h)
курсор перемещается на одну позицию влево
НТ (09h)
используется для замены на несколько пробелов
LF (0Ah)
перевод курсора на одну позицию вниз
CR (0Dh)
переход на начало текущей строки
Функция 0AH – получение строки символов
Функция 0AH прерывания 21H позволяет вводить строку длиной до 254 символов, выдавая эхо на терминал. Эта функция продолжает ввод символов до тех пор, пока не нажата клавиша "Enter". DS:DX указывает на строку, куда помещаются вводимые символы.