Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lb_8.DOC
Скачиваний:
2
Добавлен:
17.11.2019
Размер:
71.68 Кб
Скачать

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

Если после какого-то фрагмента программы нужна пауза, следует вывести текст «Нажмите любую клавишу», затем вставить две строки программы ожидания. Тогда после нажатия клавиши программа будет продолжена.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]