Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Другие операции ввода/вывода



Ниже перечислены другие функции 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.036 с.)
Главная | Случайная страница | Обратная связь