ОС (Отчёты) Туровский / Лаба4
.docМіністерство освіти і науки, молоді та спорту України
Черкаський Державний Технологічний Університет
Кафедра комп’ютерних технологій
ЗВІТ
З курсу «Операційні системи»
Лабораторна робота №4
Перевірила: Виконав:
Федотова-Півень І.М. студент гр. КТ-101
Туровський Д.В.
Черкаси 2012
Тема: Робота зі спрайтами
Мета: Написати програмуґ. Яка в графічному режимі CGA 4 320 * 320 малює фігуру колобка розміром 16*16 точок безпосередньо в екранній області і переміщує його при натисненні курсорних клавіш. Коди управління курсором: вверх – 48h, вниз – 50h, вправо – 4Dh, вліво – 4Bh.
Структура відеопамяті в режимі CGA: починається з адресу В000h, парні лінії мають зміщення 0000h – 1F3Fh(близько 8КВ), непарні 2000h – 3F3Fh(близько 8КВ)(проміжок між ними не використовується).
Колір 00-чорний
01-голубий(зелений)
10-фіолетовий(червоний)
11-білий(жовтий)
Результати роботи:
Лістинг програми:
assume CS: CODE;, DS: Code
Code Segment
org 100h
Start: jmp start1
addr dw 0 ;адрес начальной точки спрайта
addr0 dw 0 ;Старый адрес
;16 * 16
colob db 0,5,50h,0
db 0,5fh,0f5h,0
db 5,0ffh,0ffh,50h
db 3fh,0ffh,0ffh,0fch
db 0ffh,0afh,0fah,0ffh
db 0ffh,0abh,0eah,0ffh
db 0ffh,8bh,0e2h,0ffh
db 0ffh,0ffh,0ffh,0ffh
db 3fh,0beh,0beh,0fch
db 0fh,0efh,0fbh,0f0h
db 0,0,fah,0afh,0
db 0,3fh,0fch,0
db 0,3ch,3ch,0
db 15h,3ch,3ch,54h
db 55h,54h,15h,55h
db 55h,54h,15h,55h
start1: ;Установка видеорежима
mov ah,0 ;Функция установки видеорежима
mov al,4 ;Граф. реж. CGA 320*200 точек
int 10h
mov di,addr
st2: lea si,colob
call sprit0
call sprite
;сохранение исходних координат
mov ax,addr
mov addr0,ax
;чтение клавиатуры
call kbin
cmp ah,1 ;скан - код=esc?
jnz st3 ;нет
int 20h ;выход при нажатии esc
st3: cmp ah,48h ;вверх?
jnz st4
sub addr,80*2 ;вверх на 4 строки
jmp st2
st4: cmp ah,50h ;вверх?
jnz st5
add addr,80*2 ;вниз на 4 строки
jmp st2
st5: cmp ah,4dh ;Вправо?
jnz st6
inc addr
jmp st2
st6: cmp ah,4bh ;Влево?
jnz st2
dec addr
jmp st
; ввод с клавиатури
kbin proc near
mov ah,0 ;Функция 0
int 16h ;клавиатурного прерывания
ret
kbin endp
;построение спрайта 16*16
;addr-адрес левого верхнего угла
;SI- начало спрайта
sprite proc near
;построение чёрних точек
push si
mov di,addr
mov ax,0b800h
mov es,ax
mov bp,8 ;счетчик числа строк /2
sp1: mov cx,4 ;Счетчик числа слов
rep movsb
add di,76
add si,4
dec bp
jnz sp1
;построение нечетних строк
mov di,addr
pop si
add si,4 ;переход к нечетной строке
mov ax,0ba00h
mov es,ax
mov bp,8 ;счетчик числа строк/2
sp2: mov cx,4 ;счетчик числа слов
rep movsb
add di,76
add si,4
dec bp
jnz sp2
ret
sprite endp
;стирание спрайта 16*16
addr0-координаты верхнего левого угла
sprit0 proc near
;стирание четних строк
mov di,addr0
mov ax,0b800h
mov es,ax
mov bp,8 ;счетчик числа строк/2
xor al,al
sp3: mov cx,4 ;счетчик числа слов
rep stosb
add di,76
dec bp
jnz sp3
;стирание нечетних строк
mov di,addr0
mov ax,0ba00h
mov es,ax
mov bp,8 ;счетчик числа строк / 2
sp4: mov cx,4 ;счетчик числа слов
rep stosb
add di,76
dec bp
jnz sp4
ret
sprit0 endp
code ends
END Start ;Указание точки входа в программу
Висновки: я реалізував програму, яка в графічному режимі CGA 4 320 * 320 малює фігуру колобка розміром 16*16 точок безпосередньо в екранній області і переміщує його при натисненні курсорних клавіш.