Шаг 15.
Экранные и клавиатурные операции в базовой версии DOS. Ввод данных с клавиатуры
На этом шаге мы рассмотрим способ ввода строки с клавиатуры.
Область, где будут размещаться вводимые значения, имеет специальную структуру. Во-первых,
должна быть определена максимальная длина вводимого текста. Символы, превышающие максимальную
длину, не сохраняются. Во-вторых, в списке параметров должно быть определенное поле,
куда команда помещает действительную длину введенного текста в байтах.
Ниже приведен пример, в котором определен список параметров для области ввода.
Здесь LABEL представляет собой директиву с атрибутом BYTE. Первый байт
содержит максимальную длину вводимых данных. Так как это однобайтовое поле, то возможное
максимальное значение его - шестнадцатеричное FF или 255. Второй байт необходим DOS
для занесения в него действительного числа введенных символов. С третьего байта начинается
поле, которое будет содержать введенные символы:
NAMEPAR LABEL BYTE ;Список параметров:
MAXLEN DB 20 ;максимальная длина;
ACTLEN DB ? ;реальная длина;
NAMEFLD DB 20 DUP (?) ;введенные символы.
Так как в списке параметров директива LABEL не занимает места, то NAMEPAR и
MAXLEN указывают на один и тот же адрес памяти. В трансляторе MASM для определения
списка параметров в виде структуры может использоваться также директива STRUC.
Таким образом, в памяти под эту конструкцию будет отведено 22 байта:

Рис.1. Размещение структуры в памяти
Для запроса на ввод необходимо поместить в регистр AH номер функции - 10 (0AH),
загрузить адрес списка параметров (NAMEPAR в нашем примере) в регистр DX и
выполнить INT 21H:
MOV AH,0AH ;Запрос функции ввода.
LEA DX,NAMEPAR ;Загрузить адрес списка параметров.
INT 21H ;Вызвать DOS-прерывание.
Команда INT ожидает, пока пользователь не введет с клавиатуры текст, проверяя
при этом, чтобы число введенных символов не превышало максимального значения, указанного
в списке параметров (20 в нашем примере). Для указания конца ввода пользователь нажимает клавишу
Enter. Код этой клавиши (0DH) также заносится в поле ввода (NAMEFLD в
нашем примере). Если, например, пользователь ввел имя BROWN и нажал клавишу Enter, то
список параметров будет содержать следующую информацию:

Рис.2. Размещение в структуре значения BROWN
Во второй байт списка параметров (ACTLEN в нашем примере) команда заносит длину
введенного имени - 05. Код клавиши Enter находится по адресу NAMEFLD+5.
Символ "#" использован здесь для индикации конца данных, так как 0DH не имеет отображаемого
символа. В скобках указаны шестнадцатеричные значения. Поскольку максимальная длина в
20 символов включает 0DH, то действительная длина вводимого текста может быть только
19 символов.
На следующем шаге мы рассмотрим вывод одного символа на экран.
Предыдущий шаг
Содержание
Следующий шаг