Иллюстрированный самоучитель по задачам и примерам Assembler

Функции MS DOS для работы с консолью

Прямой ввод с эхом символа с клавиатуры (06h int 21h)

Функция 06h также позволяет ввести один символ с клавиатуры. Но в отличие от функции 01h она не ожидает ввода при отсутствии символа в буфере. Вводимый символ отображается на экране (эхо).

Вход: АН = 06h – чтение символа с эхом без ожидания;

  • DL = 0ffn – признак того, что функция 06h используется для ввода;
  • если DL < > 0ffn, то функция используется для вывода символа (см. ниже).

Выход: если ZF=0, то AL = ASCII-код символа; если ZF-1, то символа в буфере нет.

Результаты работы этой функции необходимо оценивать прежде всего по значению флага ZF. Если ZF=0, то функция поместила в регистр AL ASCII-код символа или 0. Наличие нуля в регистре AL говорит о том, что в буфере клавиатуры находится расширенный ASCII-код и необходимо повторить вызов функции с тем, чтобы прочитать его второй байт.

Функция 06h не проверяет наличие в буфере символов нажатия комбинации CTRL + C (CTRL + Break).

Чтение без эха символа с клавиатуры (07h int 21h)

Функция 07h аналогична функции 01h, за исключением того, что вводит символ с клавиатуры без ожидания его ввода, без эха и без проверки нажатия комбинации CTRL + C (CTRL + Break).

Вход: АН = 07h – чтение символа без эха.

Выход: AL = ASCII-код символа или 0 (см. описание функции 01h int 21h).

Наличие нуля в регистре AL говорит о том, что в буфере клавиатуры находится расширенный ASCII-код и необходимо повторить вызов функции с тем, чтобы прочитать его второй байт.

Чтение без эха символа с клавиатуры (08h int 21h)

Функция 08h аналогична функции 01h, за исключением того, что вводит символ с клавиатуры без отображения его на экране (без эха).

Вход: АН = 08h – чтение символа без эха.

Выход: AL = ASCII-код символа или 0 (см. описание функции 01h int 21h).

Наличие нуля в регистре AL говорит о том, что в буфере клавиатуры находится расширенный ASCII-код и необходимо повторить вызов функции с тем, чтобы прочитать его второй байт.

Функция производит проверку нажатия комбинации CTRL + C (CTRL + Break), при наличии которого вызывается прерывание int 23h.

Ввод строки символов с клавиатуры (0ah int 21h)

Функция 0ah вводит строку символов в буфер памяти специального формата. Если символов в буфере клавиатуры нет, то функция ожидает их ввода. Конец ввода – нажатие клавиши Enter (0dh). Формат буфера:

  • первый байт буфера содержит количество символов для ввода с учетом символа 0dh, завершающего процесс ввода;
  • второй байт содержит реальное число введенных символов, но уже без учета завершающего символа 0dh;
  • начиная с третьего байта содержится строка введенных символов с завершающим символом 0dh, максимальная длина строки – 254 символа.

Вход: АН = 0ah – ввод строки в буфер (до 254 символов);

  • DS:DX – адрес буфера, первый байт которого должен содержать количество символов для ввода.

Выход: введенная строка начиная с третьего байта буфера по адресу в DS:DX, длина строки во втором байте буфера.

Перед вызовом функции 0ah в первый байт буфера необходимо поместить значение максимальной длины строки. Если первый байт равен нулю, то вызов функции игнорируется и программа продолжает выполнение без ожидания ввода строки.

Функция производит проверку нажатия комбинации CTRL + C (CTRL + Break), при наличии которого вызывается прерывание int 23h.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.