Ассемблер и программирование для IBM PC



       

ГЛАВА 9. Экранные операции II: Расширенные возможности - часть 11


Ассемблер для IBM PC. Глава 9 210

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

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

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.

Ассемблер для IBM PC. Глава 9 211

Таким образом, после выполнения команы INT 16H необходимо прежде проверить содержимое регистра AL. Если AL содержит нуль, то была нажата функциональная клавиша, если не нуль, то получен код символьной клавиши. Ниже приведен пример такой проверки:




Содержание  Назад  Вперед