ПРОГРАМУВАННЯ ВИВОДУ ІНФОРМАЦІЇ НА ЕКРАН НА ЕОМ З МІКРОПРОЦЕСОРОМ Intel 8086(80286).

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Системи автоматизованого проектуваня

Інформація про роботу

Рік:
2006
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютери і мікропроцесорні системи
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР Звіт про виконання лабораторної роботи №10 на тему: “ПРОГРАМУВАННЯ ВИВОДУ ІНФОРМАЦІЇ НА ЕКРАН НА ЕОМ З МІКРОПРОЦЕСОРОМ Intel 8086(80286)” з курсу: “ Комп’ютери та мікропроцесорні системи ” Виконав студент групи КН-3 Львів - 2006 МЕТА РОБОТИ Вивчити основні можливості керування екраном в текстовому та графічному режимах. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Однією з основних складових будь-якого персонального компьютера є монітор. Усі дисплеї можна розділити на монохромні та кольорові (графічні). Для роботи монохромного монітора задіяно 4 кбайти оперативної пам`яті, яка розміщена з адреси В0000Н. Дану область пам`яті називають дисплейним буфером. Два кбайти з 4-х використано для збереження кодів символів (25 стрічок по 80 позицій в кожній) і 2 кбайти для байтів-атрибутів, які забезпечують підкреслення, виділення яскравістю, інвертування та мигання. Для роботи стандартного кольорового графічного монітора використано 16 кбайт пам`яті, яка починається з адреси В8000. Такий дисплей може працювати в кольоровому чи чорно-білому режимі. Дисплейний буфер забезпечує екранні сторінки (0-3) для екрана на 80 стовпчиків та 8 сторінок (0-7) для екрана на 40 стовпчиків. Байт-атрибут містить таку інформацію для символа, який відображається на дисплеї: Фон Текст Атрибут: BL R G B I R G B Номер бітів: 7 6 5 4 3 2 1 0 де R, G, B - бітові позиції, які керують відповідно червоним, зеленим та синім променем в кольоровому моніторі. Біт 7 (BL) - встановлює мигання, а біт 3 (І) - інтенсивність світіння. Дана структура байта-атрибута справедлива для монограмного та графічного дисплея в текстовому режимі. Усі екранні операції виконуються за допомогою команди переривання INT 10H, яка передає керування BIOS. При використанні цього переривання в регістр АН заноситься код, який визначає функцію переривання. АН=00: Встановлення режиму. Вміст регістра AL може бути таким: 00 - 40х25 чорно-білий текстовий режим; 01 - 40х25 стандартний 16-кольоровий текстовий режим; 02 - 80х25 чорно-білий текстовий режим; 03 - 80х25 стандартний 16-кольоровий текстовий режим; 04 - 320х200 стандартний 4-кольоровий графічний режим; 05 - 320х200 чорно-білий графічний режим; 06 - 640х200 чорно-білий графічний режим; 07 - 80х25 чорно-білий стандартний монохромний; 0D - 320х200 16-кольоровий графічний режим (EGA); 0E - 640х200 16-кольоровий графічний режим (EGA); 0F - 640х350 чорно-білий графічний режим (EGA); 10 - 640х350 64-кольоровий графічний режим (EGA); Наступний приклад встановлює чорно-білий стандартний монохромний режим 80х25: MOV AH, 00 MOV AL, 07 INT 10H АН=01: Встановлення розміру курсора. Біти 4-0 в регістрі СН визначають розмір у вертикальному напрямку, а біти 4-0 у регістрі CL - для горизонтального напрямку. Можна встановити будь-який розмір курсора по вертикалі: від 0 до 14 для монохромних та від 0 до 7 для більшості кольорових моніторів. АН=02: Встановлення позиції курсора. Ця функція встановлює курсор на екрані у відповідності з координатами стрічки та стовпчика. В регістр ВН - номер сторінки (0-3) DH - стрічка, DL - стовпчик. Наведемо приклад: MOV AH, 02 MOV BH, 01 MOV DH, 10 MOV DL, 10 INT 10H AH=03: Читання теперішнього місця знаходження курсора. Функція повертає в DH - номер стрічки, а в DL - номер стовпчика. (Виконуючи цю функцію, необхідно в регістр ВН занести номер сторінки.) АН=04: Читання місцезнаходження світлового пера. АН=05: Вибір активної сторінки. Приклад: MOV AH, 05 MOV AL, сторінка INT 10H АН=06: Прокрутка екрана вверх. В регістр AL заносять кількість стрічок, ВН - атрибут, DX - координати. Подальші команди виконують прокрутку всього екрана на одну стрічку вверх: MOV AH, 06 02 H MOV BH, 07 MOV CX, 0000 MOV DX,184FH INT 10H AH=07: Прокрутка екрана вниз. АН=08: Читання атрибута/символа в біжучій позиції курсора. Приклад: MOV AH, 09 MOV AL, символ MOV BH, cторінка MOV BL, атрибут MOV CX, повторення INT 10H АН=ОА: Вивід символа в біжучу позицію курсора. Приклад: MOV AH, 0АН MOV AL, символ MOV BH, cторінка MOV CX, повторення INT 10H АН=13: Вивід символьної стрічки (лише для АТ). Дана функція дозволяє виводити на екран символьні стрічки з встановленням і переміщенням курсора: MOV AH, 13Н MOV AL, сервіс MOV BH, cторінка MOV BР, адреса MOV CX, довжина MOV DX, екран INT 10H Значення в регістрі AL вказують: 0 - використати атрибут і не перемістити курсор; 1 - використати атрибут і перемістити курсор; 2 - вивести символ, потім атрибут і не перемістити курсор; 3 - вивести символ, потім атрибут і перемістити курсор. Організувати вивід на екран, окрім використання десятого пере-ривання BIOS, можна за допомогою двадцять першого переривання DOS. Для цього необхідно в регістрі АН записати 09 та присвоїти ім`я масиву даних, який необхідно вивести на термінал. В кінці стрічки даних необхідно записати знак долара $, цей знак дасть змогу припинити вивід. Наведемо приклад виводу на екран стрічки даних: NAME DB ‘IIIIII?’, ‘$’ MOV AH, 09 LEA DX, NAME При середній роздільчій здатності кожний байт забезпечує чотири пікселі, які пронумеровані від 0 до 3: Кожний піксел може бути зафарбований в один з чотирьох кольорів. Дане обмеження зумовлене тим, що у двох бітах можна розмістити чотири комбінації з нулів та одиниць. Для комбінації 00 можна вибрати будь-який колір фону з 16 можливих або вибрати 01, 10 та 11 для однієї з двох можливих палітр. Кожна палітра може мати три кольори: С1 С0 Палітра 0 Палітра 1 0 0 фон фон 0 1 зелений голубий 1 0 червоний бузковий 1 1 коричневий білий Для вибору кольору палітри та фону використовують переривання INT 10H. Для прикладу, якщо вибрати колір фону синій і палітру 1, то можливі кольори для піксела будуть синій, голубий, бузковий та білий. Байт, який містить значення 00011011, відображає синю, голубу, бузкову та білу точки. Якщо необхідно задати колір палітри, то можна використати 10Н BIOS переривання. Наведемо приклад: MOV AH,0BH встановлення коду палітри MOV BH,01 вибір палітри MOV BL,00 (зелений, червоний, коричневий) INT 10H ВН=00 визначає колір фону і бордюра у відповідності з вмістом регістра BL. Колір фону від 1 до 16 відповідає шістнадцятковим значенням від 0 до F; BH=01 вибирає палітру відповідно до вмісту регістра BL (0 або 1); Функція ОСН - виводить точку на екран. Приклад: MOV AH,0СH INT 21H Розглянемо детальніше текстовий та графічний режими для кольорового монітора. Текстовий режим призначений для звичайних обчислень з виводом букв та цифр на екран. Цей режим однаковий для чорно-білих та кольорових моніторів. Текстовий режим забезпечує роботу з повним набором ASCII-кодів (256 символів). Кожний символ на екрані може відображатися в одному з 16 кольорів на одному з восьми кольорів фону. Бордюр екрана може мати також один з 16 кольорів. Для побудови 16 кольорів використовують три основні (червоний, зелений, синій) та два однакові яскравості: I R G B I R G B Чорний 0 0 0 0 Сірий 1 0 0 0 Синій 0 0 0 1 Яскраво-синій 1 0 0 1 Зелений 0 0 1 0 Яскраво-зелений 1 0 1 0 Голубий 0 0 1 1 Яскраво-голубий 1 0 1 1 Червоний 0 1 0 0 Яскраво-червоний 1 1 0 0 Бузковий 0 1 0 1 Яскраво-бузковий 1 1 0 1 Коричневий 0 1 1 0 Яскраво-коричнев. 1 1 1 0 Білий 0 1 1 1 1 Яскраво-білий 1 1 1 1 Отже, будь-які символи можна відобразити на екрані в одному з 16-кольорів. Фон будь-якого символа може мати один з перших восьми кольорів. Окрім того, використовуючи байт-атрибут можна отримати мигаючі символи. Для прикладу, наведено типові значення атрибутів: Текст по фону: Біт: 7 6 5 4 3 2 1 0 BL R G B I R G B Чорний по білому 0 0 0 0 0 0 0 0 Синій по чорному 0 0 0 0 0 0 0 1 Червоний по синьому 0 0 0 1 0 1 0 0 Голубий по зеленому 0 0 1 0 0 0 1 1 Світло-бузковий по білому 0 1 1 1 1 1 0 1 Сірий по зеленому 1 0 1 0 1 0 0 0 Текст програми (шестикутник, який можна переміщати по екрану) .186 sseg segment stack db 256 dup(?) sseg ends dseg segment 'data' x1 dw 80 y1 dw 10 x2 dw 200 y2 dw 10 x3 dw 270 y3 dw 125 x4 dw 200 y4 dw 240 x5 dw 80 y5 dw 240 x6 dw 10 y6 dw 125 pochx dw ? pochy dw ? zbily dw ? zbilx dw ? col db 1 dseg ends cseg segment 'code' assume ss:sseg,cs:cseg,ds:dseg start: jmp main main: mov ax,dseg mov ds,ax mov ax,12h ;640x480x16 int 10h call shestuk m1: call read cmp al,1bh je endpr cmp al,4bh ;a je m2 cmp al,4dh ;d je m3 cmp al,50h ;s je m4 cmp al,48h ;w je m5 jmp m1 m2: mov col,0 call shestuk mov si,-10 call inc_ad mov col,1 call shestuk jmp m1 m3: mov col,0 call shestuk mov si,10 call inc_ad mov col,1 call shestuk jmp m1 m4: mov col,0 call shestuk mov si,10 call inc_ws mov col,1 call shestuk jmp m1 m5: mov col,0 call shestuk mov si,-10 call inc_ws mov col,1 call shestuk jmp m1 endpr: mov ax,0003h int 10h mov ax,4c00h int 21h line proc near pusha mov pochx,bx mov pochy,ax mov ax,cx sub ax,pochx jns dx_pos ;Якщо додатнє(SF=0) neg ax mov zbilx,1 jmp dx_neg dx_pos: mov zbilx,-1 dx_neg: mov bx,dx sub bx,pochy jns dy_pos neg bx mov zbily,1 jmp dy_neg dy_pos: mov zbily,-1 dy_neg: shl ax,1 shl bx,1 call tochka cmp ax,bx jna dx_le_dy mov di,ax shr di,1 neg di add di,bx cycle: cmp cx, pochx je exit_bres cmp di,0 jl fractlt0 add dx, zbily sub di,ax fractlt0: add cx, zbilx add di,bx call tochka jmp cycle dx_le_dy: mov di,bx shr di,1 neg di add di,ax cycle2: cmp dx, pochy je exit_bres cmp di,0 jl fractlt02 add cx, zbilx sub di,bx fractlt02: add dx,zbily add di,ax call tochka jmp cycle2 exit_bres: popa ret line endp tochka proc near pusha mov ah,0ch mov al,col mov bh,0 int 10h popa ret tochka endp shestuk proc near pusha mov cx,x1 mov dx,y1 mov bx,x2 mov ax,y2 call line xchg cx,bx xchg dx,ax mov bx,x3 mov ax,y3 call line xchg cx,bx xchg dx,ax mov bx,x4 mov ax,y4 call line xchg cx,bx xchg dx,ax mov bx,x5 mov ax,y5 call line xchg cx,bx xchg dx,ax mov bx,x6 mov ax,y6 call line xchg cx,bx xchg dx,ax mov bx,x1 mov ax,y1 call line popa ret shestuk endp read proc near ;Вхід 0 вихід-al ASCII -код цифри mov ah,8 int 21h ret read endp inc_ad proc near add x1,si add x2,si add x3,si add x4,si add x5,si add x6,si cmp x3,640 jg m6 cmp x6,0 jl m7 ret inc_ad endp inc_ws proc near add y1,si add y2,si add y3,si add y4,si add y5,si add y6,si cmp y1,0 jl m8 cmp y5,480 jg m9 ret inc_ws endp m6: jmp m2 m7: jmp m3 m8: jmp m4 m9: jmp m5 cseg ends end start Текст програми (рисування синьо-жовтого прапору) .model small .stack 64 .286 ; директива процесора (для інструкцій popa і pusha) .data color db ? x1 dw 64 y1 dw 70 fon dw 0007h x2 dw 526 y2 dw 170 y3 dw 270 s1 dw 60 p2 dw 69 s2 dw 400 .code main proc far mov ax,@data ; ініціалізуємо ds mov ds,ax ; адресою сегменту даних mov es,ax ; ініціалізуємо екстрасегмент даних mov ah,0fh ; отримуємо поточний int 10h ; відеорежим push ax ; і зберігаємо його mov ax,0012h ; встановлення графічного режиму int 10h ; 640 стовпців і 480 стрічок mov ah,0bh ; запит на встановлення фону mov bx,fon ; сірий фон int 10h ; переривання Bios call paint ; виклик процедури рисування прапору mov ah,10h ; очікування натиску int 16h ; будь-якої клавіші pop ax ; відновлення mov ah,00h ; початкового відеорежиму int 10h ; переривання Bios mov ax,4c00h ; запит на завершення програми (передача управління ОС) int 21h main endp ; Процедура рисування прапору paint proc near pusha ; зберігаємо значення всіх регістрів mov bx,00 ; встановлення сторінки mov cx,x1 ; задаємо стовпчик mov dx,y1 ; задаємо строку label1: mov color,1h ; встановлення голубого кольору mov ah,0ch ; запит на рисування пікселя mov al,color ; голубим кольором int 10h ; переривання Bios inc cx ; перейти до наступного стовпця cmp cx,x2 ; перевіряємо чи дійшли до стовпця 576 jne label1 ; ні - повторюємо mov cx,x1 ; так - переходимо на початок стрічки (стовпець 64) inc dx ; переходимо на наступну стрічку cmp dx,y2 ; перевіряємо чи дійшли до строки 170 jne label1 ; ні - повторюємо jmp label2 ; так - переходимо на мітку label2 label2: mov color,0eh ; встановлення жовтого кольору mov ah,0ch ; запит на рисування пікселя mov al,color ; жовтим кольором int 10h ; переривання Bios inc cx ; перейти до наступного стовпця cmp cx,x2 ; перевіряємо чи дійшли до стовпця 576 jne label2 ; ні - повторюємо mov cx,x1 ; так - переходимо на початок стрічки (стовпець 64) inc dx ; переходимо на наступну стрічку cmp dx,y3 ; перевіряємо чи дійшли до строки 270 jne label2 ; ні - повторюємо mov cx,x1 ; встановлюємо 64 стовпець mov dx,s1 ; і 60 строку label3: mov color,06h ; встановлення коричневого кольору mov ah,0ch ; запит на рисування пікселя mov al,color ; коричневим кольором int 10h ; переривання Bios inc cx ; перейти до наступного стовпця cmp cx,p2 ; перевіряємо чи дійшли до стовпця 69 jne label3 ; ні - повторюємо mov cx,x1 ; так - переходимо на початок стрічки (стовпець 64) inc dx ; переходимо на наступну стрічку cmp dx,s2 ; перевіряємо чи дійшли до строки 400 jne label3 ; ні - повторюємо popa ; відновлюємо значення всіх регістрів ret ; повернення з процедури paint endp end main Висновок: на цій лабораторній роботі я вивчив основні можливості керування екраном в текстовому та графічному режимах.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!