Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kratkie_otvety_ekzamen_CP_2011-12.docx
Скачиваний:
19
Добавлен:
14.04.2019
Размер:
132.13 Кб
Скачать

36.Ввод информации с клавиатуры

Система  кодов, используемых клавиатурой, не поддается простой интерпретации. Коды могут иметь длину 1 или 2 байта и нет простого соответствия между длиной кода и тем, служит ли он для обозначения символа или для управления оборудованием. Не все комбинации клавиш даже выдают уникальный код, поэтому необходимы  добавочные усилия, чтобы различить их. Ни коды ASCII, ни расширенные коды не упорядочены таким образом, который бы позволил их простую группировку и проверку ошибок. Другими  словами, процедура ввода с клавиатуры общего назначения требует хлопотливого программирования.   

1. Средства dos

Как и в случае вывода на экран, DOS предоставляет набор функций для чтения данных с клавиатуры, которые используют стандартное устройство ввода STDIN, так что можно использовать в качестве источника данных файл или стандартный вывод другой программы

2. Средства bios

Так же как и для вывода на экран, BIOS предоставляет больше возможностей по сравнению с DOS для считывания данных и управления клавиатурой. Например, функциями DOS нельзя определить нажатие комбинаций клавиш типа Ctrl-Alt-Enter или нажатие двух клавиш Shift одновременно, DOS не может определить момент отпускания нажатой клавиши, и наконец, в DOS нет аналога функции С ungetch(), помещающей символ в буфер клавиатуры, как если бы его ввел пользователь. Все это можно осуществить, используя различные функции прерывания 16h и операции с байтами состояния клавиатуры.

Каждой клавише на клавиатуре соответствует так называемый скан-код, соответствующий только этой клавише. Этот код посылается клавиатурой при каждом нажатии и отпускании клавиши и обрабатывается BIOS (обработчиком прерывания INT 9). Прерывание 16h дает возможность получить код нажатия, не перехватывая этот обработчик. Если нажатой клавише соответствует ASCII-символ, то в АН возвращается код этого символа, а в AL — скан-код клавиши. Если нажатой клавише соответствует расширенный ASCII-код, в AL возвращается префикс скан-кода (например, Е0 для серых клавиш) или 0, если префикса нет, а в АН — расширенный ASCII-код. Функция 00Н обрабатывает только комбинации, использующие клавиши 84-клавишной клавиатуры, l0h обрабатывает все 101 – 105-клавишные комбинации, 20h — 122-клавишные. Тип клавиатуры можно определить с помощью функции 09h прерывания 16h, если она поддерживается BIOS (поддерживается ли эта функция, можно узнать с помощью функции C0h прерывания 15h).

37. Использование функций Int 21h (01h, 06h, 07h) для ввода информации.

- INT 21h, функция 0lh. Ввод символа с эхом.

Вводит символ из устройства стандартного ввода и отображает его на устройстве стандартного вывода. При отсутствии символа ждет ввода. Выполняет обработку <Ctrl>/C. Для чтения расширенного кода ASCII требуется повторное выполнение функции.

При вызове: AH=01h. При возврате: АL=байт входных данных.

- INT 21h, функция 06h. Прямой ввод - вывод.

Вводит из устройства стандартного ввода и выводит на устройство стандартного вывода все коды символов без вмешательства DOS. Для чтения расширенного кода ASCII требуется повторное выполнение функции. При отсутствии символа не ждет его ввода, а возвращает управление в программу.

При вызове: AH=06h DL=код символа (00h - FEh) (при выводе) DL=FFh (при вводе).

При возврате: АL=код символа (при вводе); если символа нет, то ZF=1.

- INT 21h, функция 07h. Нефильтрованный ввод без эха.

Вводит символ из устройства стандартного ввода без его отображения. При отсутствии символа ждет ввода. Не выполняет обработку <Ctrl>/C. Для чтения расширенного кода ASCII требуется повторное выполнение функции.

При вызове: AH=07h. При возврате: АL=байт входных данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]