- •Кафедра «Техническая кибернетика»
- •Содержание
- •Введение
- •Постановка задачи
- •Постановка задачи
- •Теоретические сведения
- •Проектирование программного продукта
- •Выбор графического режима и способа вывода изображения на экран
- •Модульная структура программы
- •Описание структур данных и глобальных переменных
- •Алгоритм
- •Тестирование и отладка
- •Перечень ошибок, обнаруженных в ходе отладки программы
- •Руководство пользователя
- •1. Запуск приложения
- •Заключение
- •Заключение Список литературы
Заключение
В ходе выполнения курсовой работы мною были получены навыки разработки приложений на низкоуровневом языке программирования Assembler. Данная курсовая работа позволила углубить и закрепить навыки, приобретенные в результате выполнения лабораторных работ по дисциплине «Архитектура ЭВМ и систем». Самостоятельное тестирование приложение, выявление и устранение ошибок помогли глубже понять механизм работы прерываний и роль стека.
В
Заключение Список литературы
Asmworld Программирование на ассемблере для начинающих и не только// 2009-2010.- Режим доступа: http://asmworld.ru/uchebnik/
Рудаков П. И. Язык ассемблера: уроки программирования./ П.И. Рудаков, К.Г. Финогенов. - М.: ДИАЛОГ-МИФИ, 2001. - 640 с.
Электронный справочник по командам и функциям операционной системы Microsoft DOS версия 3.2а
Юров В. И. Assembler. Учебник для вузов. 2-е изд. / В. И. Юров — СПб.: Питер, 2003. —637 с.: ил.
Приложение 1. Текст программы
code segment
assume CS:code, DS:data
begin:
mov AX,data
mov DS,AX
mov AX,351ch ;sohranenie ishodnogo vektora preryvaniy po vremeni
int 21h
mov word ptr old_vekt,BX
mov word ptr old_vekt+2,ES
mov AX,10h ;vkluchenie EGA regima 640x350 16cvetov
int 10h
cikl: cmp sch2,0 ;proverka istecheniya vremeni smeny cveta
jle end_ch_col ; vremya isteklo->ostanovit smenu cveta
call zvezda ;risovanie zvezdy
mov AH,06h ;proverka nazhatiya klavishi
mov DL,0FFh
int 21h
cmp Al,0 ;proverka na rasshireny kod
je aski ; da,rashireny
jmp cikl ; net, vozvrat k nachalu cikla
aski: mov AH,06h
int 21h
up: cmp Al,72 ; strelka vverh
jne down ;net, ->down
cmp y,2 ; dostigli verhney granicy ?
jb cikl ; da, nikakih izmeneniy,->cikl
sub y,2 ; net, umenshili y na 2
jmp cikl
down: cmp Al,80 ; strelka vniz
jne left ; net, ->left
cmp y,327 ; dostigli nizhney granicy?
ja cikl ; da, nikakih izmeneniy,->cikl
add y,2 ;net, uvelichili y na 2
jmp cikl
left: cmp Al,75 ; strelka vlevo
jne right ;net, ->right
cmp x,2 ; dostigli levoy granicy?
jb cikl ; da, nikakih izmeneniy,->cikl
sub x,2 ;net, umenshili x na 2
jmp cikl
right: cmp Al,77 ;strelka vpravo
jne ch_color ;net, ->ch_color
cmp x,614 ;dostigli pravoy granicy?
ja cikl ; da, nikakih izmeneniy,->cikl
add x,2 ;net, uvelichili x na 2
jmp cikl
ch_color: cmp Al,59 ;f1
jne ext ;net,->ext
cmp sch1,8 ;da, smena cveta idet?
jl end_ch_col ;da,->zavershit smenu cveta
call ch_col ;net, nachat smenu cveta
jmp cikl
end_ch_col:call old_vect ; otmena smeny cveta
jmp cikl
ext: cmp AL,68 ;F10
je output ; da->vyhod
jmp cikl ; net, ->cikl
output: ;vyhod
call old_vect ;vosstanovlenie vectora preryvaniya po vremeni
mov AH,00h
mov AL,03h ;textovy regim
int 10h
mov AX,4C00h
int 21h
zvezda proc
mov CX,33 ;kolichestvo strok
mov SI,1 ; scet strok
mov DI,0 ;schet pikseley
draw1: push CX
mov CX, 42 ;kolichestvo stolbcov
draw2: push CX
add CX,x ;vychislenie x
mov DX,y ; vychi-
add DX,SI ; slenie y
mov BL,zv[DI] ;chtenie indeksa cveta dly tecuschego piksely
mov BH,0
mov AL,color[BX] ;cvet piksely
mov AH,0ch ;funkciya vyvoda cvetnoy tochki
mov BX,0 ;videostranica
int 10h
pop CX
inc DI
loop draw2
inc SI
pop CX
loop draw1
ret
zvezda endp
change_col proc
push CX
push SI
mov CX,5
col:
mov SI,CX
cmp color[SI],15 ; 15 - max cvet
jne col2 ; net
mov color[SI],1 ; da, ustanavlivaem 1
jmp end_col
col2: inc color[SI] ; uvelichivaem na 1
end_col: loop col
pop SI
pop CX
ret
change_col endp
ch_col proc ;ustanovka svoego vektora preryvaniya po vremeni
mov AX,251Ch
mov DX,offset new_1ch
push DS
push CS
pop DS
int 21h
pop DS
ret
ch_col endp
new_1ch proc
push ES
push DS
push AX
push CX
mov AX,data
mov DS,AX
dec sch1
cmp sch1,0 ;proshla 1 sekunda
jne met1 ;net, ->met1
mov sch1,18 ;da, vosstanavlivaem sch1
dec sch2 ; umenshaem kol-vo sekund na 1
met1: mov AX,sch1 ; proverka deli-
mov CL,9 ; mosti sch1 na 9
div CL ;
cmp AH,0
jne exit ; ne delitsy, ->exit
call change_col ;delitsy ->smena cveta
exit:
pop CX
pop AX
pop DS
pop ES
iret
new_1ch endp
old_vect proc
push DS
lds DX,old_vekt ;vosstanovlenie vektora preryvaniya po vremeni
mov AX,251Ch
int 21h
pop DS
mov sch2,8 ;vosstsnovlenie schetchikov
mov sch1,18
ret
old_vect endp
code ends
data segment
y dw 170 ; ordinta verhn levogo ugla
x dw 300 ;abscissa verhn levogo ugla
color db 0,1,2,3,4,5 ;tecuschaya palitra
old_vekt dd 00
sch1 dw 18
sch2 db 8
; 33 x 42
zv db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0
db 0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0
db 0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,3,3,0,0,4,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,0,4,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,3,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,3,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data ends
stack_seg segment stack 'stack'
dw 256 dup (0)
stack_seg ends
end begin