Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода

с клавиатуры.

ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ BIOS INT 16H

________________________________________________________________

Команда BIOS INT 16H выполняет специальную операцию, которая в

соответствии с кодом в регистре AH обеспечивает следующие три функции

ввода с клавиатуры.

AH=00: Чтение символа. Данная функция помещает в регистр AL oчередной

ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в регистре

AH. (Скэн-коды объясняются в следующем разделе). Если на клавиатуре нажата

одна из специальных клавишей, например, Номе или F1, то в регистр AL

заносится 00. Автоматическое эхо символа на экран по этой функции не

происходит.

AH=01: Определение наличия введенного символа. Данная функция

сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с клавиатуры;

очередной символ и скэн-код будут помещены в регистры AL и AH

соответственно и данный элемент останется в буфере.

AH=02: Определение текущего состояния клавиатуры. Данная функция

возвращает в регистре AL состояние клавиатуры из адреса памяти шест.417:

Бит

7 Состояние вставки активно (Ins)

6 Состояние фиксации верхнего регистра (Caps Lock) переключено

5 Состояние фиксации цифровой клавиатуры (Num Lock) переключено

4 Состояние фиксации прокрутки (Scroll Lock) переключено

3 Нажата комбинация клавишей Alt/Shift

2 Нажата комбинация клавишей Ctrl/Shift

1 Нажата левая клавиша Shift

0 Нажата правая клавиша Shift

ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ

________________________________________________________________

Клавиатура располагает тремя основными типами клавишей:

1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z,

цифры от 0 до 9, символы %, $, # и т.д.

2. Функциональные клавиши: Номе, End, Возврат на позицию,

стрелки, Return, Del, Ins, PgUp, PgDn и программно-функциональные

клавиши.

3. Управляющие клавиши: Alt, Ctrl и Shift, которые работают

совместно с другими клавишами.

Функциональная клавиша не вырабатывает какой-либо символ, но чаще

формирует запрос на некоторые действия. Аппаратная реализация не требует

от функциональных клавишей выполнения каких-либо специфических действий.

Задачей программиста является определить, например, что нажатие клавиши

Номе должно привести к установке курсора в верхний левый угол экрана, или

нажатие клавиши End должно установить курсор в конец текста на экране.

Можно легко запрограммировать функциональные клавиши для выполнения самых

различных действий.

Каждая клавиша имеет собственный скэн-код от 1 (Esc) до 83 (Del) или

от шест.01 до шест.53. Посредством этих скэн-кодов программа может

определить нажатие любой клавиши. Например, запрос на ввод одного символа

с клавиатуры включает загрузку 00 в регистр AH и обращение к BIOS через

INT 16H:

MOV AH,00 ;Функция ввода с клавиатуры

INT 16H ;Вызвать BIOS

Данная операция имеет два типа ответов в зависимости от того, нажата

символьная клавиша или функциональная. Для символа (например, буква A)

клавиатура посылает в компьютер два элемента информации:

1. ASCII-код символа A (шест.41) в регистре AL;

2. Скэн-код для клавиши A (шест.1E) в регистре AH.

Если нажата функциональная клавиша (например, Ins) клавиатура также

передает два элемента:

1. Нуль в регистре AL;

2. Скэн-код для клавиши Ins (шест.52) в регистре AH.

Таким образом, после выполнения команды INT 16H необходимо прежде

проверить содержимое регистра AL. Если AL содержит нуль, то была нажата

функциональная клавиша, если не нуль, то получен код символьной клавиши.

Ниже приведен пример такой проверки:

MOV AH,00 ;Функция ввода

INT 16H ;Вызвать BIOS

CMP AL,00 ;Функциональная клавиша?

JZ exit ; да - выйти

Скэн-коды

-----------

На рис.9.2 приведены скэн-коды для некоторых функциональных клавишей.

Клавиатура имеет по две клавиши для таких символов как *, + и -. Нажатие

"звездочки", например, устанавливает код символа шест.2A в регистре AL и

один из двух скэн-кодов в регистре AH в зависимости от того, какая из

клавишей была нажата: шест.09 для звездочки над цифрой 8 или шест.29 для

звездочки на клавише PrtSc.

Ниже приведена логика проверки скэн-кода для звездочки:

CMP AL,2AH ;Звездочка?

JNE EXIT1 ; нет - выйти

CMP AH,09H ;Какой скэн-код?

JE EXIT2

__________________________________________________________________________

Функциональные клавиши Скэн-коды

Alt/A - Alt/Z 1E - 2C

F1 - F10 3B - 44

Home 47

Стрелка вверх 48

PgUp 49

Стрелка влево 4B

Стрелка вправо 4D

End 4F

Стрелка вниз 50

PgDn 51

Ins 52

Del 53

__________________________________________________________________________

Рис.9.2. Скэн-коды некоторых функциональных клавишей

Приведем пример программы для установки курсора в строку 0 и cтолбец