- •Лабораторная работа №8
- •1. Цель работы.
- •2. Рекомендуемая литература.
- •3. Контрольные вопросы.
- •Часть 1. Формирование изображения и текстовой надписи на экране дисплея
- •4. Подготовка к работе.
- •5. Порядок выполнения работы.
- •Часть 2. Вывод графика функции.
- •4. Подготовка к работе.
- •4.1. Изучить методические указания к лабораторной работе.
- •5. Порядок выполнения работы
- •6. Пример программы.
- •7. Общие положения
7. Общие положения
Экран монитора можно представить себе в виде двумерного пространства с адресуемыми позициями, в любой из которых может быть воспроизведен некоторый символ. Количество позиций, возможные цвета фона и символов задаются режимом экрана. Набор воспроизводимых символов определяется используемой системой кодировки символов.
Задача создания графических изображений средствами Ассемблера включает в себя следующие процедуры:
очистка экрана с заданием цвета фона и воспроизводимых символов;
установка курсора в нужную позицию;
вывод символа;
вывод горизонтальной цепочки любых символов (в том числе и текстовой строки).
Для реализации указанных процедур программы на языке Ассемблера используют команды системных прерываний. Множество функций, связанных с операциями ввода-вывода, реализует команда системного прерывания INT 10H, передающая управление в BIOS (базовая система ввода-вывода), а также INT 21H, передающая управление в DOS. Код требуемой функции загружается в регистр АН.
В начале программы следует задать режим экрана. Для этого используется INT 10H с АН=00Н, а в AL помещается код режима. Так, код AL=03Н обеспечивает текстовый цветной режим с набором из 16 цветов и разрешающей способностью 25Х80 (25 строк по 80 элементов в каждой строке). Этот режим рекомендуется использовать при выполнении данной лабораторной работы. Другие режимы см. в [2]. ПРИМЕР 1. Задание режима экрана.
MOV AH, 00H
MOV AL, 03H
INT 10H
Данная функция вместе с заданием режима обеспечивает очистку экрана с установкой по умолчанию черного фона и белых символов.
Для задания иного цвета фона и изображаемых символов используется байт-атрибут.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
BL |
R |
G |
B |
I |
R |
G |
B |
Ф О Н С И М В О Л
Отдельные биты кодируют следующие признаки:
Бит 7 (BL) при установке в 1 обеспечивает эффект мигания символа.
Бит 3 (I) при установке в 1 обеспечивает повышенную яркость символа.
Биты 6,5,4 и 2,1,0 определяют цвет фона и символов соответственно. При этом R – красный, G – зеленый, B – синий цвет. Значения 1 обеспечивают наличие соответствующего цвета, 0 - его отсутствие. Можно заметить, что комбинация 000 соответствует черному, а 111 – белому цвету.
R+G дает желтый цвет, R+B – пурпурный (сиреневый), G+B – голубой.
Примеры байтов – атрибутов:
00000000 (0H) –черный по черному - неотображаемый символ (для пароля),
00000111 (07Н) – белый по черному нормальной яркости,
10001111 (8FН) –ярко белый по черному с миганием;
01110000 (70Н) – черный по белому;
00101110 (2ЕН) – яркожелтые символы на зеленом фоне;
10001100 (8СН)-мигающие яркокрасные символы на черном фоне.
Очистка с заданием цвета фона и символов всего экрана или части строк экрана производится так называемой прокруткой вверх или вниз, которая реализуется с помощью
INT 10H с АН=06Н (вверх) или АН=07Н (вниз), что для задания цвета равнозначно.
ПРИМЕР 2. Очистка экрана прокруткой вверх.
MOV AH, 06H; функция прокрутки вверх.
MOV AL, 00H; очистка всего экрана.
MOV BH, 07H; атрибут пробела-ЧБ нормальной яркости.
MOV CX, 0000H; верхняя левая позиция.
MOV DX, 184FH; нижняя правая позиция (Y=24, X=79).
INT 10H
Для задания цвета фона и символов только на нескольких последовательных строках необходимо в AL загрузить количество строк, в СХ – координаты начала первой строки из этой группы , а в DX – координаты конца последней строки.
Процедура установки курсора в нужную позицию реализуется командой INT 10H с АН=02Н. В регистр BH заносится номер экранной страницы ( обычно 00Н), а в регистр DX – кординаты курсора: в DH – номер строки, в DL – номер столбца (элемента по строке).
ПРИМЕР 3. Установка курсора в заданную позицию.
MOV AH, 02H ; функция перемещения курсора.
MOV BH, 00H ; страница 0.
MOV DH, 05H ; строка 5.
MOV DL, 0CH ; столбец 12.
INT 10H
Вывод отдельного символа реализуется INT 10H с АН=09Н. В регистр AL заносится код символа, в BL- байт-атрибут символа , обычно такой же, какой был определен при очистке этого участка экрана (если он не был по умолчанию черно-белым). Если задать другой атрибут, то он будет определять цвет фона и символов только в пределах прямоугольничка - знакоместа символа.
ПРИМЕР 4. Вывод символа на экран.
MOV AH, 09H ; функция вывода символа.
MOV AL, 2AH ; символ ‘ ’.
MOV BH, 00H ; страница 0.
MOV BL, 0FH ;белый по черному, яркий.
MOV CX, 01H ;один символ.
INT 10H
Последовательность одинаковых символов в одной строке (горизонтальную цепочку) можно получить, если в Примере 4 задать содержимое СХ отличным от единицы. Для получения вертикальной цепочки одинаковых символов (например, вертикальная сторона рамки) следует организовать цикл, включающий процедуры установки курсора и вывода одиночного символа с меняющейся координатой Y в каждом цикле. Поскольку регистр СХ содержит количество выводимых символов, для организации циклов нельзя использовать команду LOOP , которая по умолчанию обращается к СХ как к счетчику циклов. Для проверки условия окончания циклов необходимо использовать какие-либо другие признаки. Пример реализации этого положения можно найти в примере программы вывода графика (раздел 6).
Системное прерывание INT 21H с AH=09H позволяет вывести на экран сразу целую символьную строку (например, текст), заданную как переменная в сегменте данных. В регистр DX загружается смещение этой переменной.
ПРИМЕР 5. Вывод символьной строки
Пусть в сегменте данных имеется переменная:
CITY db ‘SAMARA’, 0DH, 0AH, ‘$’
Следует отметить, что символ $ обязателен и является ограничителем области вывода, а коды 0DH и 0AH обеспечивают перевод строки и возврат каретки печатающего устройства, если следующее сообщение должно начинаться с новой строки.
Вывод слова SAMARA на экран реализуется следующим фрагментом программы:
LEA DX, CITY
MOV AH, 09H
INT 21H
Цвет фона и выводимой надписи соответствует атрибуту, установленному при очистке этого участка экрана.
Прерывание INT 16H c AH=00H обеспечивает ожидание ввода символа с клавиатуры без его отображения на экране и может быть полезно для организации некоторой паузы между фрагментами программы. Никаких других параметров не требуется.
ПРИМЕР 6. Формирование паузы
MOV AH, 00H
INT 16H
Если после какого-то фрагмента программы нужна пауза, следует вывести текст «Нажмите любую клавишу», затем вставить две строки программы ожидания. Тогда после нажатия клавиши программа будет продолжена.