Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Обзор системных функций ввода с клавиатуры




Ввод с клавиатуры обслуживается прерываниями 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 фактическое число введенных байтов

Для ввода пароля можно использовать любые функции, описанные выше. Для ввода скрытого пароля используются функции ввода с клавиатуры, которые не отображают вводимые символы на экране.


Поделиться:

Дата добавления: 2015-09-15; просмотров: 78; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты