Введение в архитектуру персонального компьютера. Соппа И.В. - 29 стр.

UptoLike

Составители: 

2.4. Обслуживание клавиатуры по прерываниям BIOS и DOS
Как отмечалось ранее, клавиатура располагает символьными и функциональными
клавишами. Каждая клавиша имеет собственный скэн-код, посредством которого программа
может определить нажатие любой клавиши на клавиатуре, независимо от изображенного на ней
символа. Например, скэн-код символа "" над цифрой 8 равен 09Н, а на клавише Рrint Screen –
29H. При запросе ввода одного символа с клавиатуры возможны два типа ответа в зависимости от
того, символьная или функциональная клавиша была нажата.
При нажатии символьной клавиши клавиатура посылает в микропроцессор два
несовпадающих байта информации; соответственно ASCII и скэн-код нажатой клавиши. При
нажатии функциональной клавиши клавиатура также посылает в микропроцессор два байта
информации: код 00Н и скэн-код нажатой клавиши. Таким образом, равенство нулю первого байта
указывает на нажатие функциональной клавиши.
Данный алгоритм взаимодействия между ПК и клавиатурой имел место в первых моделях
персональных компьютеров и в настоящее время практически не используются. Это связано с тем,
что в ПК достаточно передать скэн-код нажатой клавиши, а обработку этого кода поручить BIOS.
Ввод данных с клавиатуры в компьютер может быть осуществлен как по прерыванию
стандартной версии DOS (прерывание INT 21H), так и по прерыванию BIOS (INT 16H). Для ввода,
использующего прерывания DOS, перед выполнением команды INT 21H должен быть определен
полный список параметров для области ввода. В его составе: указатель начального адреса области
ввода в ОЗУ, который заносится в регистр DX микропроцессора, однобайтовый параметр,
определяющий максимально возможную длину вводимого текста, а также помещенный в регистр
АН номер выполняемой функции (в данном случае 0АН).
Ввод текста осуществляется выполнением команды DOS INT 21H. В этом случае
прерывания DOS ожидает, пока пользователь вводит с клавиатуры текст, проверяя при этом,
чтобы количество введенных символов не превышало однобайтовый указатель максимально
возможной длины. Если набран слишком длинный текст, то DOS предупреждает пользователя
включением звукового сигнала, и система ожидает только ввода кода ENTER. Таким образом,
символы, превышающие максимальную длину, игнорируются. Для указания окончания ввода
пользователь нажимает клавишу ENTER, код 0DH которой также заносится в область ввода ОЗУ.
Если, например, пользователь ввел символьную последовательность MILTON, предварительно
указав адрес (DX) и максимальную длину в 10 символов, то список параметров и текст в области
ввода будет выглядеть следующим образом.
Первый адрес области ввода содержит информацию о максимально установленной длине
символов (0AН), следующий за ним (07H) – количество реально введенных символов за
исключением кода 0DH – ENTER, а далее непосредственно занесены коды символьной
последовательности. Поскольку установленная максимальная длина вводимых символов включает
код 0DH, то действительная максимальная длина текста на единицу меньше.
Введенную символьную последовательность можно использовать для различных целей,
например, для печати сообщений, вывода текста на монитор, сохранения в таблице, записи на диск
и т. п. При этом, часто возникает необходимость замены кода символа ENTER на другой код. Это
достаточно легко сделать, используя содержимое ячейки (DX)+1, поскольку код 0DH всегда
находится по адресу, равному адресу этой ячейки плюс ее содержимое плюс единица. Определив
адрес кода 0DH, его заменяют на необходимый.
При последующем вводе информации вводимые символы заменяют предыдущее
содержимое области ввода на новое и остаются там, пока другие символы не заменят их. В связи с
этим часто возникает необходимость в ее принудительной отчистке до ввода следующей
символьной последовательности. Данную процедуру можно выполнить двумя способами: либо
               2.4. Обслуживание клавиатуры по прерываниям BIOS и DOS

        Как отмечалось ранее, клавиатура располагает символьными и функциональными
клавишами. Каждая клавиша имеет собственный скэн-код, посредством которого программа
может определить нажатие любой клавиши на клавиатуре, независимо от изображенного на ней
символа. Например, скэн-код символа "∗" над цифрой 8 равен 09Н, а на клавише Рrint Screen –
29H. При запросе ввода одного символа с клавиатуры возможны два типа ответа в зависимости от
того, символьная или функциональная клавиша была нажата.
        При нажатии символьной клавиши клавиатура посылает в микропроцессор два
несовпадающих байта информации; соответственно ASCII и скэн-код нажатой клавиши. При
нажатии функциональной клавиши клавиатура также посылает в микропроцессор два байта
информации: код 00Н и скэн-код нажатой клавиши. Таким образом, равенство нулю первого байта
указывает на нажатие функциональной клавиши.
        Данный алгоритм взаимодействия между ПК и клавиатурой имел место в первых моделях
персональных компьютеров и в настоящее время практически не используются. Это связано с тем,
что в ПК достаточно передать скэн-код нажатой клавиши, а обработку этого кода поручить BIOS.
        Ввод данных с клавиатуры в компьютер может быть осуществлен как по прерыванию
стандартной версии DOS (прерывание INT 21H), так и по прерыванию BIOS (INT 16H). Для ввода,
использующего прерывания DOS, перед выполнением команды INT 21H должен быть определен
полный список параметров для области ввода. В его составе: указатель начального адреса области
ввода в ОЗУ, который заносится в регистр DX микропроцессора, однобайтовый параметр,
определяющий максимально возможную длину вводимого текста, а также помещенный в регистр
АН номер выполняемой функции (в данном случае 0АН).
        Ввод текста осуществляется выполнением команды DOS INT 21H. В этом случае
прерывания DOS ожидает, пока пользователь вводит с клавиатуры текст, проверяя при этом,
чтобы количество введенных символов не превышало однобайтовый указатель максимально
возможной длины. Если набран слишком длинный текст, то DOS предупреждает пользователя
включением звукового сигнала, и система ожидает только ввода кода ENTER. Таким образом,
символы, превышающие максимальную длину, игнорируются. Для указания окончания ввода
пользователь нажимает клавишу ENTER, код 0DH которой также заносится в область ввода ОЗУ.
Если, например, пользователь ввел символьную последовательность MILTON, предварительно
указав адрес (DX) и максимальную длину в 10 символов, то список параметров и текст в области
ввода будет выглядеть следующим образом.




         Первый адрес области ввода содержит информацию о максимально установленной длине
символов (0AН), следующий за ним (07H) – количество реально введенных символов за
исключением кода 0DH – ENTER, а далее непосредственно занесены коды символьной
последовательности. Поскольку установленная максимальная длина вводимых символов включает
код 0DH, то действительная максимальная длина текста на единицу меньше.
         Введенную символьную последовательность можно использовать для различных целей,
например, для печати сообщений, вывода текста на монитор, сохранения в таблице, записи на диск
и т. п. При этом, часто возникает необходимость замены кода символа ENTER на другой код. Это
достаточно легко сделать, используя содержимое ячейки (DX)+1, поскольку код 0DH всегда
находится по адресу, равному адресу этой ячейки плюс ее содержимое плюс единица. Определив
адрес кода 0DH, его заменяют на необходимый.
         При последующем вводе информации вводимые символы заменяют предыдущее
содержимое области ввода на новое и остаются там, пока другие символы не заменят их. В связи с
этим часто возникает необходимость в ее принудительной отчистке до ввода следующей
символьной последовательности. Данную процедуру можно выполнить двумя способами: либо