- •Клавиатура
- •2.1. Принципы работы клавиатуры
- •2.2. Порты для работы с клавиатурой
- •2.3. Аппаратное прерывание клавиатуры
- •2.4. Средства bios для работы с клавиатурой
- •2.4.1. Чтение символа с ожиданием
- •2.4.2. Проверка буфера на наличие в нем символов
- •2.4.3. Получение состояния переключающих клавиш
- •2.4.4. Установка временных характеристик клавиатуры
- •2.4.5. Запись символов в буфер клавиатуры
- •2.4.6 Чтение символа с ожиданием для 101-клавишной клавиатуры
- •2.4.7. Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- •2.4.8. Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •2.5. Средства ms-dos для работы с клавиатурой
- •2.5.1. Буферизованный ввод с эхо-выводом
- •2.5.2. Буферизованный ввод без эхо-вывода
- •2.5.3. Нефильтрованный ввод без эхо-вывода
- •2.5.4. Ввод/вывод на консоль
- •2.5.5. Ввод строки символов
- •2.5.6. Проверка состояния стандартного ввода
- •2.5.7. Сброс буфера клавиатуры
- •2.6. Клавиатурные функции библиотеки Microsoft c
2.5.1. Буферизованный ввод с эхо-выводом
На входе: AH = 01h.
На выходе: AL = ASCII-код символа или 0. Если регистр
содержит 0, то следующий вызов этой же
функции возвратит в регистре AL
расширенный ASCII-код символа.
Функция проверяет комбинации клавиш
Ctrl-C и Ctrl-Break.
Функция читает символы со стандартного устройства ввода. Если стандартным устройством ввода является клавиатура, и буфер клавиатуры пуст, выполнение программы задерживается до нажатия на любую клавишу.
Введенный символ выводится на стандартное устройство вывода.
Если программа в качестве ASCII-кода получила 0, она должна вызвать эту функцию еще один раз. Во второй раз регистр AL будет содержать расширенный ASCII-код нажатой клавиши.
2.5.2. Буферизованный ввод без эхо-вывода
На входе: AH = 08h.
На выходе: AL = ASCII-код символа или 0. Если регистр
содержит 0, то следующий вызов этой же
функции возвратит в регистре AL
расширенный ASCII-код символа.
Функция проверяет комбинации клавиш
Ctrl-C и Ctrl-Break.
Функция аналогична предыдущей. Она читает символы со стандартного устройства ввода. Если стандартным устройством ввода является клавиатура, и буфер клавиатуры пуст, выполнение программы задерживается до нажатия на любую клавишу.
Эту функцию необходимо использовать в тех случаях, когда не требуется автоматически дублировать на экране вводимые с клавиатуры символы. Например, с ее помощью можно организовать ввод паролей.
2.5.3. Нефильтрованный ввод без эхо-вывода
На входе: AH = 07h.
На выходе: AL = ASCII-код символа или 0. Если регистр
содержит 0, то следующий вызов этой же
функции возвратит в регистре AL
расширенный ASCII-код символа.
Функция не проверяет комбинации клавиш
Ctrl-C и Ctrl-Break.
Если буфер клавиатуры пуст, выполнение программы задерживается до нажатия на любую клавишу.
Эту функцию удобно использовать в тех случаях, когда завершение программы по нажатию комбинаций клавиш Ctrl-C или Ctrl-Break по тем или иным причинам нежелательно. Например, программа держит в оперативной памяти буфера для данных, которые перед завершением работы обязательно должны быть записаны на диск. Если оператор в неподходящий момент времени нажал Ctrl-C и программа аварийно завершила работу, содержимое буферов будет потеряно.
2.5.4. Ввод/вывод на консоль
На входе: AH = 06h;
DL = 0FFh - для ввода символа с консоли;
или:
DL = код символа, не равный 0FFh - для
вывода символа на консоль.
На выходе: ZF = 0, если в буфере имеется код нажатой
на клавиатуре клавиши;
ZF = 1, если буфер клавиатуры пуст;
AL = ASCII-код символа или 0, если AH содержит
расширенный ASCII-код символа.
Функция проверяет комбинации клавиш
Ctrl-C и Ctrl-Break.
Функция 06h может использоваться как для ввода с консоли, так и для вывода символов на консоль. Режим работы функции зависит от содержимого регистра DL при вызове функции. Если этот регистр содержит значение 0FFh, функция выполняет ввод с консоли, в противном случае символ, код которого записан в этот регистр, выводится на консоль.
Очевидно, что с помощью этой функции нельзя вывести на консоль символ с кодом 0FFh.
Основное отличие функции 06h от всех описанных ранее заключается в том, что эта функция не ожидает, пока оператор нажмет на клавишу. Если буфер клавиатуры пуст, функция просто устанавливает флаг процессора ZF в 1.
Если в буфере клавиатуры имеются символы, флаг ZF сбрасывается и в регистр AL функция записывает ASCII-код символа.