lb_8

advertisement
Лабораторная работа №8
Графические операции в текстовом режиме дисплея.
1. Цель работы.
Практическое использование системных прерываний
BIOS и DOS для создания графических изображений на экране
дисплея.
2. Рекомендуемая литература.
2.1.Абель П. Язык Ассемблера для IBM PC и
программирования/Пер. с англ. –М.: Высш. Шк.,1992, с.134-143.
2.2. Скэнлон Л. Персональные ЭВМ
IBM PC и XT.
Программирование на языке Ассемблера.-М.: Радио и связь,
1989, с.179-182, 188-193.
3. Контрольные вопросы.
3.1. Что такое системные прерывания?
3.2 Какие системные прерывания используются для
вывода информации на экран дисплея?
3.3. Каким образом задаются функции системного
прерывания?
3.4. Чем отличаются между собой разные режимы
экрана?
3.5. Какие операции необходимо произвести для вывода
некоторого символа в определенном месте экрана?
3.6. Чем отличаются процедуры изображения на экране
горизонтальной и вертикальной цепочки символов?
3.7. Как задается цвет экрана и символов?
3.8. В какой части программы и как задается текстовая
строка, подлежащая выводу на экран?
3.9.
Какие
основные
операции
обеспечивают
изображение графика функции, значения которой хранятся в
памяти?
2
ЧАСТЬ 1. Формирование
текстовой надписи на экране дисплея
изображения
и
4. Подготовка к работе.
4.1. Изучить методические указания к лабораторной
работе.
4.2. Подготовить ответы на контрольные вопросы.
4.3. Разработать программу для изображения на экране
прямоугольной рамки размером в 15 строк по вертикали и 40
элементов по горизонтали, расположение которой выбирается в
соответствии с последней цифрой номера студенческого билета:
1 – в левой верхней части экрана;
2 – по центру в верхней части экрана;
3 – в правой верхней части экрана;
4 – по центру в левой части экрана;
5 – по центру в правой части экрана;
6 – в центральной части экрана;
7 – в левой нижней части экрана;
8 – по центру в нижней части экрана;
9 – в правой нижней части экрана.
Если номер студенческого билета заканчивается на нуль,
используйте предпоследнюю цифру.
Для четных номеров рамка изображается с помощью
одинарных горизонтальных и вертикальных линий, для
нечетных- залитыми точками.
Коды символов: горизонтальная черточка 5FH,
вертикальная черточка
7СН,
залитая точка
07Н.
Внутри рамки сформировать изображение
*
елочки, примерно как показано слева,исполь***
зуя символ «звездочка» ( код 2АН).
*****
На вершине елочки поместить мигающий
******* яркий символ «солнышко» (код 0FH). Вне
*
рамки на свободном пространстве экрана
3
в трех строках разместить поздравительную надпись, причем в
каждой строке текст должен иметь другой цвет.
5. Порядок выполнения работы.
5.1. Используя текстовый редактор DOS, создать
исходный модуль программы ELOCHKA.TXT.
5.2. Оттранслировать и скомпоновать программу для
получения исполняемого файла.
5.3.
Запустить
программу
и
проверить
ее
работоспособность.
5.4. При необходимости вносить в программу
необходимые
коррективы
до
получения
ожидаемого
изображения.
ЧАСТЬ 2. Вывод графика функции.
4. Подготовка к работе.
4.1. Изучить методические указания к лабораторной
работе.
4.2. Подготовить ответы на контрольные вопросы.
4.3. Проанализировать пример программы GRAFIC ,
приведенной ниже и реализующей вывод графика функции,
последовательность значений которой определена в сегменте
данных в виде массива MAS.
4.4. Разработать новую программу для вывода графика
функции, заданной в сегменте данных массивом значений
FUNC.
Заметим, что значения функции следует
пронормировать путем деления на некоторый коэффициент с
тем, чтобы максимальное значение не превышало допустимого
отклонения координаты Y на экране дисплея в обе стороны от
начала координат.
4.5. Кроме того, в новой программе следует:
- перенести начало осей координат в центр экрана;
- обеспечить, чтобы значению Х=0 соответствовало
значение седьмого (центрального) элемента массива;
4
- сформировать стрелочки на концах осей
координат и вывести их наименование символами X и Y ;
- задать другой цвет осей и графика.
Коды символов: 1АН – горизонтальная стрелка вправо;
18Н – вертикальная стрелка вверх.
5. Порядок выполнения работы
5.1. Используя текстовый редактор, создать текстовый
файл, получить исполняемый файл сначала для программы
GRAFIC , а затем для программы, разработанной в соответствии
с домашним заданием.
5.2. Проверить работоспособность обеих программ.
6. Пример программы.
Title GRAFIC
datasg
segment
para
MAS
db
0,1,5,8,9,8,5,1,0,-1,-5,-8,-9,-5,-1
FUNC
dw -450, -350, 0, 250, 375, 400, 420, 360,
dw
325, 300, 285, 200, 0 –200, -275
datasg
ends
stacksg
db
stacksg
segment
128 dup (?)
ends
codesg
segment
ASSUME
start:
para
para
stack
'stack'
'code'
SS: stacksg, CS: codesg, DS: datasg
MOV AX, DATASG
MOV DS, AX
; ЗАДАНИЕ РЕЖИМА ЭКРАНА С ОЧИСТКОЙ
MOV AH, 00H
MOV AL, 03H
; цветной, 25 Х 80
INT 10H
5
; ИЗОБРАЖЕНИЕ ВЕРТИКАЛЬНОЙ ОСИ
MOV BH, 00H
MOV DL, 5 ;координаты верхней точки Х=5,
MOV DH, 1 ;
Y =1.
met1: MOV AH, 02H
INT 10H
; установка курсора
MOV CX, 1
MOV AL, 7CH; символ вертикальной черточки
MOV BL, 07H; яркобелый по черному
MOV AH, 09H
INT 10H
; вывод символа
INC DH
;переход к координате Y+1
CMP DH, 24 ;сравнение с нижней позицией
JB met1
; цикл вывода символа
; ИЗОБРАЖЕНИЕ ГОРИЗОНТАЛЬНОЙ ОСИ
MOV BH, 00H
MOV DL, 5 ; координаты левой позиции Х=5,
MOV DH, 12 ;
Y=12.
MOV AH, 02H
INT 10H
; установка курсора
MOV CX, 50 ; длина цепочки символов
MOV AL,5FH ; символ горизонтальной черточки
MOV BL, 07H; яркобелый по черному
MOV AH, 09H
INT 10H
; вывод символа
; ВЫВОД ТОЧЕК ГРАФИКА
LEA SI, MAS ; адрес массива значений
MOV DI, 15 ; счетчик циклов
MOV CX, 1 ; вывод по одному символу
MOV BH, 00H
MOV DL, 5 ; координаты первой точки X=5,
cikl: MOV DH, 12 ;
Y=12.
SUB DH, [SI] ; вычисление Y(i)
MOV AH, 02H
INT 10H
; установка курсора
MOV AL, 2AH; символ (*)
6
MOV BL, 0CH; яркокрасный по черному
MOV AH, 09H
INT 10H
; вывод символа
ADD DL,3
; следующая координата по Х
INC SI
; адрес следующего значения
DEC DI
;изменение счетчика циклов
JNZ cikl
; цикл вывода
;ЗАВЕРШЕНИЕ ПРОГРАММЫ
MOV AX, 4C00H
INT 21H
CODESG ENDS
END start
7. ОБЩИЕ ПОЛОЖЕНИЯ
Экран монитора можно представить себе
в виде
двумерного пространства с адресуемыми позициями, в любой из
которых может быть воспроизведен некоторый символ.
Количество позиций, возможные цвета фона и символов
задаются режимом экрана. Набор воспроизводимых символов
определяется используемой системой кодировки символов.
Задача создания графических изображений средствами
Ассемблера включает в себя следующие процедуры:
- очистка экрана с заданием цвета фона и воспроизводимых
символов;
- установка курсора в нужную позицию;
- вывод символа;
- вывод горизонтальной цепочки любых символов (в том
числе и текстовой строки).
Для реализации указанных процедур программы на языке
Ассемблера используют команды системных прерываний.
Множество функций, связанных с операциями ввода-вывода,
реализует команда системного прерывания INT 10H,
передающая управление в BIOS (базовая система вводавывода), а также INT 21H, передающая управление в DOS.
Код требуемой функции загружается в регистр АН.
7
В начале программы следует задать режим экрана. Для
этого используется INT 10H с АН=00Н, а в AL помещается
код режима. Так, код AL=03Н обеспечивает текстовый цветной
режим с набором из 16 цветов и разрешающей способностью
25Х80 (25 строк по 80 элементов в каждой строке). Этот режим
рекомендуется использовать при выполнении данной
лабораторной работы. Другие режимы см. в [2].
ПРИМЕР 1. Задание режима экрана.
MOV AH, 00H
MOV AL, 03H
INT 10H
Данная функция вместе с заданием режима обеспечивает
очистку экрана с установкой по умолчанию черного фона и
белых символов.
Для задания иного цвета фона и изображаемых символов
используется байт-атрибут.
7
BL
6
R
Ф
5
G
О
4
B
Н
3
I
С
2
1
0
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) –черный по черному - неотображаемый символ
(для пароля),
8
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- байтатрибут символа , обычно такой же, какой был определен при
9
очистке этого участка экрана (если он не был по умолчанию
черно-белым). Если задать другой атрибут, то он будет
определять цвет фона и символов только в пределах
прямоугольничка - знакоместа символа.
ПРИМЕР 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
обеспечивают перевод строки и возврат каретки печатающего
10
устройства, если следующее сообщение должно начинаться с
новой строки.
Вывод слова SAMARA на экран реализуется следующим
фрагментом программы:
LEA DX, CITY
MOV AH, 09H
INT 21H
Цвет фона и выводимой надписи соответствует атрибуту,
установленному при очистке этого участка экрана.
Прерывание INT 16H c AH=00H обеспечивает ожидание
ввода символа с клавиатуры без его отображения на экране и
может быть полезно для организации некоторой паузы между
фрагментами программы. Никаких других параметров не
требуется.
ПРИМЕР 6. Формирование паузы
MOV AH, 00H
INT 16H
Если после какого-то фрагмента программы нужна пауза,
следует вывести текст «Нажмите любую клавишу», затем
вставить две строки программы ожидания. Тогда после нажатия
клавиши программа будет продолжена.
Download