Поволжский Государственный Университет Телекоммуникаций и Информатики Архитектура ЭВМ и систем Отчёт по лабораторной работе №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