Главная Рефераты по сексологии Рефераты по информатике программированию Рефераты по биологии Рефераты по экономике Рефераты по москвоведению Рефераты по экологии Краткое содержание произведений Рефераты по физкультуре и спорту Топики по английскому языку Рефераты по математике Рефераты по музыке Остальные рефераты Рефераты по авиации и космонавтике Рефераты по административному праву Рефераты по безопасности жизнедеятельности Рефераты по арбитражному процессу Рефераты по архитектуре Рефераты по астрономии Рефераты по банковскому делу Рефераты по биржевому делу Рефераты по ботанике и сельскому хозяйству Рефераты по бухгалтерскому учету и аудиту Рефераты по валютным отношениям Рефераты по ветеринарии Рефераты для военной кафедры Рефераты по географии Рефераты по геодезии Рефераты по геологии Рефераты по геополитике Рефераты по государству и праву Рефераты по гражданскому праву и процессу Рефераты по делопроизводству Рефераты по кредитованию Рефераты по естествознанию Рефераты по истории техники Рефераты по журналистике Рефераты по зоологии Рефераты по инвестициям Рефераты по информатике Исторические личности Рефераты по кибернетике Рефераты по коммуникации и связи |
Курсовая работа: Реалізація функцій бібліотеки графіки для виводу тексту у графічному режимі (OutTextXY, SetTextStyle)Курсовая работа: Реалізація функцій бібліотеки графіки для виводу тексту у графічному режимі (OutTextXY, SetTextStyle)Міністерство освіти та науки України Кіровоградський Національний Технічний Університет Факультет автоматики, енергетики та програмування Кафедра програмного забезпечення Дисципліна: “Програмування на мові ASM-86” Курсова робота на тему: “Реалізація функцій бібліотеки графіки для виводу тексту у графічному режимі (OutTextXY, SetTextStyle)” Виконав: ст. гр. ПЗ 02 - 1 Антипенко П.С. Перевірив: викладач Приходькін Н.А. Кіровоград 2004 р. Зміст Вступ 1. Призначення та область використання програми 1.1 Постановка задачі 1.2 Обґрунтування вибору методів розв’язання задачі 1.3 Алгоритм програми 2. Системні вимоги 3. Інструкція користувача 4. Висновок 5. Використана література Додатки ВступСтановлення високоефективної світової економіки, неможливо без розвиненого ринку програмних засобів і засобів зв’язку. Тепер комп’ютери відіграють у житті людини велику роль, бо в ті часи коли ще не було комп’ютерів, людина витрачала свій час на ручну роботу, в той час щоб робити щось інше. На сучасному етапі комп’ютери, комп’ютерні засоби є найбільш розвиненні та найпродуктивніші машини. Зараз з їх допомогою ми можемо проводити числові розрахунки, створювати фільми, музику, проводимо управління заводами та космічними кораблями, пишемо нові корисні програми. Комп’ютери отримали широке розповсюдження, стали універсальним засобом для обробки усіх видів інформації, які використову людина. Тому розробка програмних засобів для комп’ютерів стала актуальною проблемою сучасності. Одним із засобів створення програмного забезпечення мова ASM - 86. Ассемблер є мовою низького рівня програмування, тому він дуже придатний до роботи з операційними функціями MS-DOS, та BIOS. Користуючись цією мовою програмування, програміст повинен: добре знати систему, вміти користуватися системними функціями, перериваннями. Щоб добре вміти програмувати на ASM-86, не достатньо застосовувати функції певного переривання. Потрібно добре знати систему команд, потрібно чітко уявляти призначення кожної команди та роботу з нею. Також необхідно удосконалити знання по регістрам, адже їх у процесор достатньо: регістри загального призначення, регістри вказівники, індексн регістри, регістр прапорців та інші. Потрібно вміти правильно відкомпілювати задану програму, знайти в ній помилку, виправити її та знову запустити. У порівнянні з іншими мовами програмування, ASM-86 є більш складним для розуміння, адже він є мовою низького рівня. Але така мова, як ASM-86, да високі знання системному програмісту. 1. Призначення та область використання програмиДана програма призначена для виводу тексту на екран. Вона здатна змінювати матрицю, за якою будується літера, розмір літери та напрямок виводу літер. Також вона здатна змінювати колір тексту. Гама кольорів є досить широкою і склада 256 кольорів. Ця програма може використовуватись у комп’ютерному дизайні при оформленні текстових повідомлень, об’яв тощо. 1.1 Постановка задачіПеред програмістом постала досить складна та цікава задача - написати аналог функцій OutTextXY та SetTextStyle. Перша функція виводить в довільне місце екрану текст заданого стилю та кольору, а інша змінює шрифт, розмір літер та напрямок їх виводу. Як видно перелік функцій, які повинна виконувати програма, є досить широким. 1.2 Обґрунтування вибору методів розв’язання задачіСпектр функцій, які повинна виконувати програма є досить широким. Саме цей фактор спонукав до вибору стандартного відео режиму номер 13h. Він має 320 пікселів по горизонталі та 200 по вертикалі і здатен виводити 256 кольорів одночасно. Саме остання обставина і зумовила його вибір. Крім того, вивід однієї точки на екран зводиться лише до простого запису номеру кольору у відеобуфер, що суттєво спрощує вивід на екран. Загальна кількість точок на екрані складає 64000, що позбавляє необхідності перемикати банки пам’яті відео карти (вікна). Це також є однією з причин вибору даного режиму. Крім того цей режим є доступним майже для всіх ЕОМ, навіть для дуже старих, так як він стандартним і підтримується навіть найдавнішими відеоадаптерами, що забезпечу сумісність програми з великою кількістю типів ЕОМ. Програма використовує переривання 10h для ініціалізації відеорежиму. Номер функції - 00h. Вхід: АН - 00h AL - 13h (номер режиму) Вихід: немає Також програма використовує такі функції переривання 10h, як 02h - позиціювання курсору, 01h - задання форми курсору. Вони використовуються у текстовому режимі для забезпечення інтерфейсу програми. Ще програма використовує функції переривання 21h для вводу координат та номерів дій. 1.3 Алгоритм програмиПрограма вирішує поставлену задачу за допомогою використання підпрограм: vvod - процедура вводу з клавіатури. Повертає у регістр AL введену цифру; vvodvsego - процедура виводу інструкцій для користувача та вводу даних; vvkoor - процедура введення координати; probeli - процедура виводу на екран заданої кількості синіх проміжків у заданому місці екрану; vivstr - процедура виводу на екран строки у задане місце екрану; priglash - процедура виводу запрошення до роботи на екран; ramka - процедура виводу на екран зафарбованого прямокутника з рамкою з заданими атрибутами символів; Як видно з переліку, майже всі функції програми призначені для забезпечення діалогу з користувачем. Сам вивід літер виконується у головній програмі. Для створення образів символів на екрані програма використову стандартні шрифти BIOS: 8*8, 8*16 та 8*14. Вибір матриці виконує користувач у процесі діалогу з програмою. Маштабування літер відбувається за допомогою множення матриці на розмір шрифту, який вводиться користувачем. 2. Системні вимогиЯк зазначалося вище, вимоги до комп’ютеру є досить низькими: процесор 80286 ОЗУ 640 кб. ОС MS-DOS 4.0 і вище 3. Інструкція користувачаДля запуску програми необхідно набрати її ім’я у командній строц MS-DOS або клікнути на ній у OC Windows. Після цього на екрані з’явиться запрошення до роботи. Спочатку треба вибрати дію, яку повинна виконати програма. Якщо вибрано вивід тексту, то потім слід дотримуватись інструкцій, які будуть з’являтися на екрані. Після введення тексту відбудеться перехід у графічний режим і на екрані з’явиться введений текст з заданими кольором, шрифтом, розміром та напрямком. Після перегляду необхідно натиснути будь-яку клавішу. В результаті виконання цієї д відбудеться перехід у текстовий режим і на екрані з’явиться запрошення до роботи. 4. ВисновокДана програма має досить широке коло використання завдяки широкому спектру дій, які вона виконує. Вона здатна змінювати матрицю, за якою будується літера, розмір літери та напрямок виводу літер. Також вона здатна змінювати колір тексту. Гама кольорів є досить широкою і складає 256 кольорів. Ця програма може використовуватись у комп’ютерному дизайні при оформленні текстових повідомлень, об’яв тощо. 5. Використана література1. Том Сван "Освоение Turbo Assembler" 2. Роберт Журден "Справочник программиста на персональном компьютере фирмы IBM" 3. Бредлі Д. "Програмування на мові Асемблер". 4. Абель П. "Мова Асемблера для IBM PC та програмування" 5. Зубков С.В. “Assembler для DOS, Windows и Unix” Додаткиа). Лістинг програми dseg segment hor dw 0 ver dw 0 y dw 0 x dw 0 razm db 0 sdvig dw 0 stroka db 9 buf db 5 dup (0) koord dw 5 dup (0) buftxt db 22 dup (?) mes1 db 'Введите номер действия: $' mes3 db '1 - Вывод текста$' mes4 db '2 - Выход в DOS$' mes5 db 'Введите координату X $' mes6 db 'Введите координату Y $' mes7 db 'Введите рaзмер матрицы: $' mes8 db '1 - 8 X 14$' mes9 db '2 - 8 X 8$' mes10 db '3 - 8 X 16$' mes11 db ' Введите текст $' mes12 db ' Введите номер цвета$' mes13 db ' Введите размер шрифта$' mes14 db 'Введите направление вывода: $' mes15 db '1 - Cлева - напрво (_) $' mes16 db '2 - Cверху - вниз (_) $' r1 db 'г=======================================¬$' r2 db '¦ ¦$' r3 db '¦ ¦$' r4 db '¦ ¦$' r5 db '¦ ¦$' r6 db '¦ ¦$' r7 db 'L=======================================-$' indeks dw 0 dseg ends sseg segment stack db 256 dup (?) sseg ends cseg segment stack assume cs: cseg,ds: dseg,ss: sseg vvod proc lea dx,buf mov ah,3fh mov cx,3 mov bx,0 int 21h mov al,buf sub al,'0' ret vvod endp vvodvsego proc call ramka mov dx,0b1eh lea cx,mes5 call vivstr call vvkoor mov dx,0b1eh lea cx,mes6 call vivstr call vvkoor call ramka mov dx,0a1ch lea cx,mes7 call vivstr mov dx,0c23h; поз. курсора mov cx,1 call probeli; вывод синего пробела lea cx,mes8 call vivstr mov dx,0d23h; поз. курсора mov cx,1 call probeli; вывод синего пробела lea cx,mes9 call vivstr mov dx,0e23h; поз. курсора mov cx,1 call probeli; вывод синего пробела lea cx,mes10 call vivstr mov dx,0a35h; поз. курсора mov cx,1 call probeli; вывод синего пробела call vvod rcl al,1 mov byte ptr koord+4,al rcr al,1 cmp al,1 je dal2 cmp al,2 je dal3 mov razm,16 jmp kon1 dal3: mov razm,8 mov byte ptr koord+4,3 jmp kon1 dal2: mov razm,14 kon1: inc indeks inc indeks call ramka mov dx,0b1ch lea cx,mes12 call vivstr call vvkoor; ввод цвета call ramka mov dx,0b1dh lea cx,mes13 call vivstr call vvkoor; ввод размера шрифта call ramka mov dx,0b1ah lea cx,mes14 call vivstr mov dx,0c1eh; поз. курсора mov cx,1 call probeli; вывод синего пробела lea cx,mes15 call vivstr mov dx,0d1eh; поз. курсора mov cx,1 call probeli; вывод синего пробела lea cx,mes16 call vivstr mov dx,0b37h; поз. курсора mov cx,1 call probeli; вывод синего пробела call vvod cmp al,1 je dal mov hor,0 mov al,razm add al,2 mov byte ptr ver,al jmp kon2 dal: mov hor,10 mov ver,0 kon2: ret vvodvsego endp vvkoor proc mov dx,0d26h mov cx,3 call probeli mov ah,3fh mov bx,0 mov cx,6 lea dx,buf int 21h mov dx,ax XOR AX, AX MOV AL, buf; AL - ASCII-код старшой цифры числа SUB AL, '0'; выделение старшой цифры числа cmp dx,3; введено 3 символа? je vse; если да, то прыжок cmp dx,4 je dva jmp tri dva: mov bx,10; занесение 10 в DX mul bx; умножение стар. цифры на 10 xor bx,bx; обнуление BX mov bl,buf+1; BL - ASCII-код младшой цифры sub bx,'0'; выделение младшей цифры числа add ax,bx; получение введеного числа jmp vse tri: mov bx,100; занесение 100 в DX mul bx; умножение стар. цифры на 10 mov cx,ax; сохранение промеж. результата xor ax,ax; обнуление AX mov al,buf+1; AL - ASCII-код 2-й цифры sub ax,'0'; получение цифры десятков mov bx,10 mul bx; умножение кол-ва 10 - в на 10 add cx,ax; получение сотни+десятки xor ax,ax mov al,buf+2; AL - ASCII-код 2-й цифры sub ax,'0'; получение цифер единиц add cx,ax; получение сотни+десятки+единицы mov ax,cx vse: xor bx,bx mov bx, indeks mov koord+bx,ax; сохранеие координаты inc indeks inc indeks ret vvkoor endp probeli proc mov ah,02 int 10h mov ax,0920h; вывод пробела с атрибутом mov bx,009fh int 10h ret probeli endp vivstr proc mov bh,00h mov ah,02 int 10h mov dx,cx mov ah,9 int 21h ret endp vivstr priglash proc mov dx,0b1ch lea cx,mes1 call vivstr mov dx,0c21h mov cx,1 call probeli lea cx,mes3 call vivstr mov dx,0d21h mov cx,1 call probeli lea cx,mes4 call vivstr ret endp priglash ramka proc mov cx,0914h; установка атрибутов области mov dx,0f3ch mov ax,0600h mov bh,01fh int 10h mov cx,0a15h; изм. атрибутов внутри области mov dx,0e3bh mov ax,0600h mov bh,01bh int 10h ; вывод рамки lea ax,r1; загрузка смещения mov sdvig,ax; в пер. sdvig mov cx,7; кол-во рядков рамки next1: push cx mov cx,sdvig mov dh,stroka mov dl,14h call vivstr inc stroka; переход на след. строку add sdvig,42; переход на адрес след. строки pop cx loop next1 mov stroka,9 ret endp ramka begin: mov ax,dseg mov ds,ax mov es,ax opyat: mov ax,03h ; очистка экрана int 10h mov ax,1003h; выкл. бита мерцания mov bl,0 int 10h mov cx, 2000h; выкл. курсор mov ah,01h int 10h call ramka; вывод рамки call priglash; вывод приглашения mov dx,0b35h; поз. курсора mov cx,1 call probeli; вывод синего пробела mov ah,3fh; ввод номера действия mov bx,0 mov cx,3 lea dx,buf int 21h mov al,buf; определение номера действия cmp al,'1' je text jmp kon text: call vvodvsego; ввод координат и цвета call ramka mov dx,0b1fh lea cx,mes11 call vivstr ; вывод приглашения о вводе строки mov dx,0d1fh mov cx, 20 call probeli; вывод синих пробелов mov ah,3fh mov bx,0 mov cx,22 lea dx,buftxt int 21h; ввод строки символов dec ax dec ax push ax mov dx,koord+8 mov ax,hor mul dx mov hor,ax mov dx,koord+8 mov ax,ver mul dx mov ver,ax mov ax,13h int 10h mov ax,1130h; \ mov bh,byte ptr koord+4; - получение адреса матрицы символов; / int 10h; / mov di,0 pop cx vivodvs: ; цикл вывода символов push cx; сохранение параметра цикла mov al,buftxt+di; загрузка символа push di; сохранение номера символа в; введённом массиве mov cl,razm; \ mul cl; - получение величины сдвига в массиве матриц mov si,ax; / mov ah,0 mov bx,koord mov x,bx mov bx,koord+2 mov y,bx mov cl,razm glavn: ; цикл вывода линии образа символа push cx; параметра цикла mov cx,koord+8 cikl: push cx push es; сохранение регистра mov bx,x; загрузка координаты Х mov ax,y; загрузка координаты Y mov dx,320 mul dx add ax,bx mov di,ax; загрузка абс. адреса dec di mov dx,koord+4; загрузка цвета mov al,es: [bp+si] ; загрузка байта образа символа mov cx,0a000h; - загрузка адреса видеобуфера mov es,cx; / mov cx,8; загрузка параметра цикла zdvig: rol al,1; сдвиг влево на 1 бит jnc n4; если CF=0, то прыжок push cx mov cx,koord+8 n7: ; цикл вывода точки add bx,1; - определение признака выхода за экран cmp bx,317; / ja n8; если есть, то прыжок inc di; приращение координаты mov es: [di],dl; вывод точки loop n7 n8: pop cx jmp n6 n4: add di,koord+8 n6: loop zdvig pop es; восстановление сегмента образов символов pop cx inc word ptr y; увеличение коорд. Y loop cikl inc si; переход на след. байт образа символа pop cx loop glavn pop di; восстановление номера символа в массиве inc di; переход на след. символ mov ax,koord add ax,hor mov koord,ax mov ax,koord+2 add ax,ver mov koord+2,ax cmp koord,319; определение признака выхода за экран ja zaderg; если есть, то прыжок cmp koord+2, 199; определение признака выхода за экран ja zaderg; если есть, то прыжок pop cx; восстановление параметра цикла loop vivodvseh jmp zaderg vivodvseh: jmp vivodvs zaderg: mov ah,00 int 16h mov indeks,0 jmp opyat kon: mov ax,4c00h int 21h cseg ends end begin б). Блок – схема алгоритму.
з стор. до стор. 28. 28 з стор. до стор. 28 28 з стор. до стор. 28 28 до стор. 27 з стор.26 ні так до стор. 28 ні так з стор. зі стор. 27 26 до стор. 26 з стор. 26 до стор. 26 з стор. 26 так так до стор. 26 так ні ні так
з стор. до стор. 32 31
до стор. 33 з стор. 32 |
|