МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет Львівська політехніка
Кафедра CАПР
До лабораторної роботи №9
З курсу “Архітектура комп’ютерів”
На тему:
На тему: «Програмування виводу на екран на ЕОМ з мікропроцесором Intel 8086 (80286)»..
Львів – 2007
Тема роботи: Програмування виводу на екран на ЕОМ з мікропроцесором Intel 8086 (80286).
Мета роботи: Вивчити основні можливості керування екраном в текстовому та графічному режимах.
ТЕОРЕТИЧНІ ВІДОМОСТІ
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Вивести на екран три лінії (синього,зеленого та червоного) кольорів.
Реалізувати керування лініями за допомогою клавіш ‘’w,’s’,’a’,’d’. Відстань між лініями та початкове положення задати самостійно
Для реалізації поставленого завдання була розроблена наступна програма
dat1 SEGMENT PARA public "DATA"
x dw 130 ; початкові координати X та Y
y dw 70
ENDS dat1
dat2 SEGMENT PARA public "DATA"
video db 64000 dup (1);копія єкрану
ENDS dat2
stk segment para public "stack"
dw 500h dup(0) ;стек
ends stk
prog segment PARA public "code"
assume cs:prog, ds:dat1, ss:Stk
start:
mov ax,seg stk ;ініціалізація сегментів
mov ss,ax
mov ax,seg dat1
mov ds,ax
call InitDisplay ;ініціалізуємо графічний режим
lp:
call ClearScr ;очищаємо екан
call Draw ;і рисуємо 3 лінії з координатами в X,Y
call SwapPage ;швидко копіюємо память у відеопамять
call readch ;і перевіряємо клавіатуру до натиснення ESC
jmp lp
readch:
mov ax,1100h ;перевіряємо чи натиснута клавіша
int 16h
jz re2 ;якщо ні, то переходимо на кінець підпрограми
mov ax,1000h
int 16h ;зчитуємо символ клавіші
mov bx,word ptr ds:[x]
mov dx,word ptr ds:[y]
cmp al,64h ;і порівнюємо з кодом стрілки вліво
je akp ;якщо дорівнює, то переходимо на зміну координат
cmp al,61h ;порівнюємо з кодом стрілки вправо
je dkp ;якщо дорівнює, то переходимо на зміну координат
cmp al,77h ;порівнюємо з кодом стрілки вверх
je wkp ;якщо дорівнює, то переходимо на зміну координат
cmp al,73h ;порівнюємо з кодом стрілки вниз
je skp ;якщо дорівнює, то переходимо на зміну координат
cmp ah,01h ;порівнюємо з кодом ESC
je exitprog ;якщо дорівнює, то вихід з програми
jmp re1
akp:
add bx,4 ;x=x+4
jmp re1
dkp:
sub bx,4 ;x=x-4
jmp re1
wkp:
sub dx,4 ;y=y-4
jmp re1
skp:
add dx,4 ;y=y+4
jmp re1
exitprog:
mov ax,04c00h ;нормальний вихід в операційну систему
int 21h
re1:
call correct_coord ;корекція координат x, y
mov word ptr ds:[x],bx ;і зберігаємо їх
mov word ptr ds:[y],dx
re2:
ret
InitDisplay:
mov ax,13h ;ініціалізація VGA режиму 320*200*256
int 10h
ret
ClearScr: ;очиста єкрану
push es
mov ax,seg dat2
mov es,ax
mov si,0
mov cx,64000
mov al,0
cl1:
mov byte ptr es:[si],al
inc si
loop cl1
pop es
ret
Draw:
mov cx,50 ;рисуємо 3 лінії довжиною 50 пікселів
line1:
mov dx, y
mov bx, x
add bx,cx
mov al,4 ;рисуємо червоним
call PutPixel ;піксель верхньої лінії
add dx,20
mov al,2 ;рисуємо зеленим піксель середньої лінії
call PutPixel
add dx,20
mov al,1 рисуємо синім піксель нижньої лінії
call PutPixel
loop line1
ret
PutPixel: ;bx - x pixel ;dx - y pixel ; al- color
push si
push bx
push dx
push ax
mov ax,seg dat2
mov es,ax
call correct_coord ;порівнюємо чи піксел не вийшов за межі екрану
mov si,bx
mov ax,320
mul dx
add si,ax
pop ax
mov byte ptr es:[si],al ;копіюємо у спеціальний буфер колір піксела в AL
pop dx
pop bx
pop si
ret
SwapPage: ;копіюємо з буфера зображеня у відеопам'ять
push ds
push es
mov ax,seg dat2 ;ініціалізація сегмента DS на початок буфера
mov ds,ax
mov si,0
mov ax,0A000h ;ініціалізація сегмента ES на початок відеопамяті
mov es,ax
mov di,0
mov cx,32000
cld ;напрям обміну
rep
movsw ;копіюємо масив даних у 64000 байта
pop es
pop ds
ret
correct_coord: ;корекція координат 320<BX>0, 200<DX>0
cmp bx,0
jl add320
cmp bx,319
jle c1
sub bx,320
jmp c1
add320:
add bx,320
c1:
cmp dx,0
jl add200
cmp dx,199
jg sub200
ret
sub200:
sub dx,200
ret
add200:
add dx,200
ret
ENDS prog
end start
Результати роботи програми
Висновок
Під час виконання лабораторної роботи я вивчив основні можливості керування екраном в текстовому та графічному режимах. Мною була розроблена програма яка виводить три паралельні лінії і здійснює ними керування. При розробці даної програми були помилки при циклічному зміщенні