Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Другие операции ввода/вывода
Ниже перечислены другие функции DOS, которые могут оказаться полезными в работе. Код функции устанавливается в регистре AH и, затем, выдается команда INT 21H.
AH=01 Ввод с клавиатуры с эхо отображением. Данная функция возвращает значение в регистре AL. В случае, если содержимое AL не равно нулю, то оно представляет собой стандартный ASCII-cимвол, например, букву или цифру. Нулевое значение в регистре AL свидетельствует о том, что на клавиатуре была нажата специальная функциональная клавиша, например, Номе, F1 или PgUp. Для определения скэн-кода клавиш, необходимо повторить вызов функции. Данная функция реагирует на запрос Ctrl/Break. AH=02 Вывод символа. Для вывода символа на экран в текущую позицию курсора необходимо поместить код данного символа в pегистр DL. Коды табуляции, возврата каретки и конца строки действуют обычным образом. AH=07 Прямой ввод с клавиатуры без эхо отображения. Данная функция работает аналогично функции 01 с двумя отличиями: введенный символ не отображается на экране, то есть, нет эхо, и oтсутствует реакция на запрос Ctrl/Break. AH=08 Ввод с клавиатуры без эхо отображения. Данная функция действует аналогично функции 01 с одним отличием: введенный символ не отображается на экран, то есть, нет эхо. AH=0B Проверка состояния клавиатуры. Данная функция возвращает шест. FF в регистре AL, если ввод с клавиатуры возможен, в противном случае — 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 состояние клавиатуры из адреса памяти: Бит Состояние вставки активно ( Ins ) Состояние фиксации верхнего регистра ( Caps Lock ) переключено Состояние фиксации цифровой клавиатуры ( Num Lock ) переключено Состояние фиксации прокрутки ( Scroll Lock ) переключено Нажата комбинация клавишей Alt/Shift Нажата комбинация клавишей Ctrl/Shift Нажата левая клавиша Shift Нажата правая клавиша Shift
Функциональные клавиши Клавиатура располагает тремя основными типами клавишей: 1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z, цифры от 0 до 9, символы %, $, # и так далее. 2. Функциональные клавиши: Номе, End, Возврат на позицию, стрелки, Enter, 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 содержит нуль, то была нажата функциональная клавиша, если не нуль, то получен код символьной клавиши. Скэн-коды Клавиатура имеет по две клавиши для таких символов как *, + и -. Нажатие «звездочки», например, устанавливает код символа шест.2A в регистре AL и один из двух скэн-кодов в регистре AH в зависимости от того, какая из клавишей была нажата: шест.09 для звездочки над цифрой 8 или шест.29 для звездочки на клавише PrtSc. Функциональные клавиши Скэн-коды Alt/A — Alt/Z 1E — 2C F1 — F10 3B — 44 Home 47 Стрелка вверх 48 PgUp 49 Стрелка влево 4B Стрелка вправо 4D End 4F Стрелка вниз 50 PgDu 51 Ins 52 Del 53 Приведем пример программы для установки курсора в строку 0 и cтолбец 0 при нажатии клавиши Номе (скэн-код 47): MOV AH, 00; Выполнить ввод с клавиатуры INT 16H; CMP AL, 00; Функциональная клавиша? JNE EXIT1; нет — выйти CMP AH, 47H; Скэн-код для клавиши Home? JNE EXIT2; нет — выйти MOV AH, 02; MOV BH, 00; Установить курсор MOV DX, 00; по координатам 0, 0 INT 10H; Вызвать BIOS
Функциональные клавиши F1—F10 генерируют скэн-коды от шест.3B до шест.44. Следующий пример выполняет проверку на функциональную клавишу F10: CMP AH, 44H; Клавиша F10? JE EXIT1; Да! По адресу EXIT1 программа может выполнить любое необходимое действие. Цвет и графика Текстовой режим Текстовой режим предназначен для обычных вычислений с выводом букв и цифр на экран. Данный режим одинаков для черно-белых (BW) и для цветных мониторов за исключением того, что цветные мониторы не поддерживают атрибут подчеркивания. Текстовой режим обеспечивает работу с полным набором ASCII кодов (256 символов), как для черно-белых (BW), так и для цветных мониторов. Каждый символ на экране может отображаться в одном из 16 цветов на одном из восьми цветов фона. Бордюр экрана может иметь также один из 16 цветов. Цвета Тремя основными цветами являются красный, зеленый и синий. Комбинируя основные цвета друг с другом, можно получить восемь цветов, включая черный и белый. Используя два уровня яркости для каждого цвета, получим всего 16 цветов: I R G B Черный 0 0 0 0 Серый 1 0 0 0 Синий 0 0 0 1 Ярко-синий 1 0 0 1 Зеленый 0 0 1 0 Ярко-зеленый 1 0 1 0 Голубой 0 0 1 1 Ярко-голубой 1 0 1 1 Красный 0 1 0 0 Ярко-красный 1 1 0 0 Сиреневый 0 1 0 1 Ярко-сиреневый 1 1 0 1 Коричневый 0 1 1 0 Желтый 1 1 1 0 Белый 0 1 1 0 Ярко-белый 1 1 1 1 Таким образом любые символы могут быть отображены на экране в oдном из 16 цветов. Фон любого символа может иметь один из первых восьми цветов. В случае, если фон и текст имеют один и тот же цвет, то текст получается невидимым. Используя байт атрибута, можно получить также мигающие символы. Байт-атрибут Текстовой режим допускает использование байта атрибута. Цвет на экране сохраняется до тех пор, пока другая команда не изменит его. Для установки цвета можно использовать в команде INT 10H функции AH=06, AH=07 и AH=09. Например, для вывода пяти мигающих звездочек светло-зеленым цветом на сиреневом фоне возможна следующая программа: MOV AH, 09; Функция вывода на экран MOV AL, '*'; Выводимый символ MOV BH, 00; Страница 0 MOV BL, 0DAH; Атрибут цвета MOV CX, 05; Число повторений INT 10H; Вызвать BIOS Графический режим Для генерации цветных изображений в графическом режиме используются минимальные точки растра — пикселы или пэлы (pixel). Цветной графический адаптер (CGA) имеет три степени разрешения: 1. Низкое разрешение. 2. Среднее разрешение. 3. Высокое разрешение.
Лекция 8. Популярное:
|
Последнее изменение этой страницы: 2017-03-08; Просмотров: 742; Нарушение авторского права страницы