Отчет 8

advertisement
Поволжский Государственный Университет
Телекоммуникаций и Информатики
Архитектура ЭВМ и систем
Отчёт по лабораторной работе №8
Графические операции в текстовом режиме дисплея
Выполнил студент группы ИТ-71
Горцунов В.В.
Самара 2008
Выполнение работы
Задание
1.
Разработать программу для изображения на экране прямоугольной рамки
размером в 15 строк по вертикали и 40 элементов по горизонтали, расположение которой
выбирается в соответствии с последней цифрой номера студенческого билета:
4 – по центру в левой части экрана;
2.
Разработать новую программу для вывода графика
сегменте данных массивом значений FUNC.
Создадим файл 81.asm. Программа для изображения прямоугольной рамки
Title ramka VARIANT 4
DATASG SEGMENT PARA
MES1 DB 'MESSAGE_1', 13, 10, '$'
MES2 DB 'Message_2', 13, 10, '$'
MES3 DB 'Message_3', 13, 10, '$'
DATASG ENDS
STACKSG SEGMENT PARA STACK 'STACK'
db 128 dup (?)
STACKSG ENDS
CODESG SEGMENT PARA 'CODE'
ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
START:
MOV AX, DATASG
MOV DS, AX
; ЗАДАНИЕ РЕЖИМА ЭКРАНА С ОЧИСТКОЙ
MOV AH, 00H
MOV AL, 03H
INT 10H
; цветной, 25 Х 80
; Левая часть рамки ---------------------------MOV BH, 00H
MOV DL, 0
MOV DH, 6
M1:
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 7CH
MOV BL, 07H
MOV AH, 09H
INT 10H
INC DH
CMP DH, 19
JB M1
; X=0
; Y=6
; установка курсора
; По 1 символу
; Символ вертикальной черты
; Белый на черном фоне
; вывод символа
; переход к координате Y+1
; Сравнение с нижней позицией
; цикл вывода символа
; Верхняя часть рамки ----------------------------
2
функции, заданной в
MOV DL, 0
MOV DH, 5
MOV AH, 02H
INT 10H
MOV CX, 40
MOV AL, 5FH
MOV BL, 07H
MOV AH, 09H
INT 10H
; X=0
; Y=5
; Установка курсора
; 40 символов
; Символ горизонтальной черты
; Белый на черном фоне
; Вывод символа
; Правая часть рамки ----------------------------
MOV DL, 39
MOV DH, 6
M3:
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 7CH
MOV BL, 07H
MOV AH, 09H
INT 10H
INC DH
CMP DH, 19
JB M3
; X=39
; Y= 6
; установка курсора
; По 1 символу
; Символ вертикальной черточки
; яркобелый по черному
; вывод символа
; переход к координате Y+1
; сравнение с нижней позицией
; цикл вывода символа
; Нижняя часть рамки ----------------------------
MOV DL, 1
MOV DH, 18
MOV AH, 02H
INT 10H
MOV CX, 38
MOV AL, 5FH
MOV BL, 07H
MOV AH, 09H
INT 10H
INC DL
; X= 1
; Y=18
; установка курсора
; По 1 символу
; Символ горизонтальной черты
; яркобелый по черному
; вывод символа
; переход к координате X+1
; Вывод Ёлочки
MOV DL, 20
MOV DH, 7
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 0FH
MOV BL, 8CH
MOV AH, 09H
INT 10H
MOV DL, 19
MOV DH, 8
MOV AH, 02H
INT 10H
MOV CX, 3
MOV AL, 2AH
MOV BL, 0AH
MOV AH, 09H
INT 10H
; X=20
; Y= 7
; установка курсора
; по 1 символу
; Символ
; Мигающий яркобелый символ
; вывод символа
; Х=19
; Y= 8
; установка курсора
; Выводить 3 символа
; Символ *
; яркозеленый на черном фоне
; вывод символа
3
MOV DL, 18
MOV DH, 9
MOV AH, 02H
INT 10H
MOV CX, 5
MOV AH, 09H
INT 10H
MOV DL, 17
MOV DH, 10
MOV AH, 02H
INT 10H
MOV CX, 7
MOV AH, 09H
INT 10H
MOV DL, 20
MOV DH, 11
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AH, 09H
INT 10H
; X=18
; Y= 9
; установка курсора
; Выводить 5 символов
; вывод символа
; X=17
; Y=10
; установка курсора
; Выводить 1 символ
; вывод символа
; X=20
; Y=11
; установка курсора
; Выводить 1 символ
; вывод символа
; Вывод 3-ёх Строк
MOV DL, 16
MOV DH, 13
MOV AH, 02H
INT 10H
MOV AH, 09H
MOV BH, 00H
MOV BL, 0BH
MOV CX, 9
INT 10H
LEA DX, MES1
MOV AH, 09h
INT 21H
; X=16
; Y= 1
; установка курсора
; функция вывода символа.
; страница 0.
; сине-зеленый по черному, яркий.
; один символ.
; адрес MES1 в DX
; вывод
; на экран
MOV DL, 16
MOV DH, 14
MOV AH, 02H
INT 10H
MOV AH, 09H
MOV BL, 0DH
MOV CX, 9
INT 10H
LEA DX, MES2
MOV AH, 09h
INT 21H
; X=16
; Y=14
MOV DL, 16
MOV DH, 15
MOV AH, 02H
INT 10H
MOV AH, 09H
MOV BL, 0EH
MOV CX, 9
INT 10H
LEA DX, MES3
MOV AH, 09h
INT 21H
; X=16
; Y=15
; установка курсора
; функция вывода символа.
; фиолетовый по черному, яркий.
; один символ.
; адрес MES2 в DX
; вывод
; на экран
; установка курсора
; функция вывода символа.
; желтый по черному, яркий.
; один символ.
; адрес MES3 в DX
; вывод
; на экран
4
MOV AH, 00h
INT 16h
MOV AX, 4C00h
INT 21h
CODESG ENDS
END START
; пауза,
; ожидание нажатия любой клавиши
; корректный
; выход в DOS
; окончание сегмента кода
; выход из метки START
Скомпилируем файл 81.asm с помощью tasm.exe и создадим файл exe с помощью tlink.exe
tasm /z /zi /n 81 81 81
tlink /v 81
Создадим файл 82.asm. Вывод графика функций с элементами массива FUNC и применением коэффициента
TITLE GRAFIC func_2
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, 325, 300, 285, 200, 0, -200, -275
FUNC_2
DB 15 dup (?)
; массив для элементов с учетом коэффициента
A DB 50
; коэффициент
DATASG ENDS
STACKSG SEGMENT PARA STACK 'STACK'
DB 128 dup (?)
STACKSG ENDS
CODESG SEGMENT PARA 'CODE'
ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
START:
MOV AX, DATASG
MOV DS, AX
; Задание режима экрана с очисткой
MOV AH, 00H
MOV AL, 03H
INT 10H
; цветной, 25 Х 80
5
; Изображение горизонтальной оси
MOV BH, 00H
MOV DL, 18
MOV DH, 12
MOV AH, 02H
INT 10H
MOV CX, 50
MOV AL, 0C4H
MOV BL, 0EH
MOV AH, 09H
INT 10H
MOV DL, 68
MOV DH, 12
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 1AH
MOV BL, 0EH
MOV AH, 09H
INT 10H
MOV DL, 70
MOV DH, 12
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 58H
MOV BL, 0EH
MOV AH, 09H
INT 10H
; X=18
; Y=12
; установка курсора
; длина цепочки символов
; символ горизонтальной черточки
; яркожелтый по черному
; вывод символа
; X=68
; Y=12
; установка курсора
; длина цепочки символов
; символ горизонтальной стрелки
; яркожелтый по черному
; вывод символа
; X=70
; Y=12
; установка курсора
; длина цепочки символов
; символ X
; яркожелтый по черному
; вывод символа
; Изображение вертикальной оси
MOV BH, 00H
MOV DL, 40
MOV DH, 2
MET1: MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 0B3H
MOV BL, 0EH
MOV AH, 09H
INT 10H
INC DH
CMP DH, 24
JB MET1
; Х=40
; Y=1
; установка курсора
; вывод по 1 символу
; символ вертикальной черты |
; яркожелтый по черному
; вывод символа
; Y := Y+1
; сравнение с нижней позицией
; переход к метке MET1
MOV DL, 40
MOV DH, 1
MOV AH, 02H
INT 10H
MOV CX, 1
MOV AL, 18H
MOV BL, 0EH
MOV AH, 09H
INT 10H
; X=40
; Y= 1
MOV DL, 38
MOV DH, 1
MOV AH, 02H
INT 10H
MOV CX, 1
; X=38
; Y= 1
; установка курсора
; длина цепочки символов
; символ вертикальной стрелки
; яркожелтый по черному
; вывод символа
; установка курсора
; длина цепочки символов
6
MOV AL, 59H
MOV BL, 0EH
MOV AH, 09H
INT 10H
; символ Y
; яркожелтый по черному
; вывод символа
; ВЫВОД ТОЧЕК ГРАФИКА
MOV CX, 15
MOV SI, 00h
MOV DI, 00h
RE:
cikl:
MOV AX, FUNC[SI]
idiv A
MOV FUNC_2[DI], AL
ADD SI, 2
ADD DI, 1
LOOP RE
; поместить SI-ый элемент массива FUNC в AX
; FUNC[SI] / A
; помещаем частное в DI-ый элемент массива FUNC_2
; SI := SI+2 (для перехода к след. элементу FUNC)
; DI := DI+2 (для перехода к след. элементу FUNC_2)
; Если CX не равен нулю, перейти к метке RE
LEA SI, FUNC_2
MOV DI, 15
MOV CX, 1
MOV BH, 00H
MOV DL, 22
MOV DH, 12
SUB DH, [SI]
MOV AH, 02H
INT 10H
MOV AL, 2AH
MOV BL, 0BH
MOV AH, 09H
INT 10H
ADD DL, 3
INC SI
DEC DI
JNZ cikl
; адрес массива значений
; счетчик циклов
; вывод по одному символу
; X=22
; Y=12
; FUNC_2[SI] с учетом Y
; установка курсора
; символ (*)
; яркокрасный по черному
; вывод символа
; следующая координата по Х
; адрес следующего значения
; изменение счетчика циклов
; цикл вывода
; Завершение программы
MOV AX, 4C00H
INT 21H
CODESG ENDS
END start
7
Скомпилируем файл 82.asm с помощью tasm.exe и создадим файл exe с помощью tlink.exe
tasm /z /zi /n 82 82 82
tlink /v 82
8
Download