КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Обзор системных функций ввода с клавиатурыВвод с клавиатуры обслуживается прерываниями BIOS (INT 16h) и прерываниями DOS (INT 21h) функции 1, 7, 8, 0Ah, 3Fh). Функция 0h INT 16h ожидает нажатия клавиши. После нажатия клавиши в регистр AL (если нажата символьная клавиша, имеющая ASCII-код) заносится ASCII-код клавиши или 0 (если нажата функциональная клавиша), в регистр AH заносится скан-код клавиши. По содержимому регистра AL можно определить, какая нажата клавиша, символьная или функциональная. key: mov ah, 0 ; ожидание нажатия клавиши int 16h ; вызов bios cmp al, 0 ; проверка нажатия je m1 ; функциональной клавиши jmp key ; не функциональная клавиша m1: ....; да, функциональная клавиша Функция 1h INT 16h осуществляет чтение информации о состоянии буфера клавиатуры; если буфер пуст, возвращает во флаге нуля 1; если буфер не пуст, возвращает во флаге нуля 0; в AX - очередной символ, остальные - в буфере. Функция 1h INT 21h выполняет ввод символа с клавиатуры, отображает его на экране и выполняет проверку на Ctrl-Break. После ввода символа в AL будет ASCII-код символа. mov AH, 1h int 21h Функция 7h INT 21h выполняет ввод символа с клавиатуры без отображения на экране. После выполнения функции в регистре AL будет ASCII-код символа. mov AH, 7h int 21h Функция 8h INT 21h аналогична функции 7h, но, кроме того, выполняет проверку на Ctrl-break. mov AH, 8h int 21h Для считывания функциональной клавиши с помощью функций 1, 7, 8 нужно выполнять две операции считывания кода клавиши. Первая операция заносит в регистр AL 0, вторая операция считывания - в регистр AL скан-код (расширенный код). key: mov AH, 8 ; ждать нажатия клавиши int 21h cmp AL, 0 ; расширенный код? jmp error ; нет, выдать сообщение об ошибке mov AH, 8 ; считать скан-код int 21h cmp AL, 33h ; нажата клавиша f1? je f1 ; да jmp key ; нет error: ... Функция 0Ah INT 21h выполняет ввод строки с клавиатуры в буфер. Адрес буфера загружается в регистр DX. В сегменте данных нужно описать буфер и указать его размер. Первый байт буфера и должен содержать размер. После выполнения функции второй байт будет содержать фактическую длину вводимой строки, которая заканчивается кодом возврата каретки. ; в сегмент данных buf db 22, 21 dup(?) ; в сегмент кода mov AH, 0ah lea DX, buf int 21h Введенная строка начинается в памяти с адреса BUF+2. Функция 3Fh INT 21h выполняет ввод данных с устройства. В качестве дескриптора устройства нужно задать 0 (стандартный ввод - клавиатура). В регистре CX указывается количество вводимых байтов, в регистр DX загрузить адрес буфера. После выполнения функции в AX будет фактическое число введенных байтов. ; в сегмент данных buf db 20 dup (?) ; в сегмент кода mov AH, 3fh mov BX, 0 ; дескриптор клавиатуры mov CX, 20 lea DX, buf int 21h mov CX, AX ; запомнить в CX фактическое число введенных байтов Для ввода пароля можно использовать любые функции, описанные выше. Для ввода скрытого пароля используются функции ввода с клавиатуры, которые не отображают вводимые символы на экране.
|