Шаг 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 символов.

    На следующем шаге мы рассмотрим вывод одного символа на экран.


Предыдущий шаг Содержание Следующий шаг