Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая_асм_звезда.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
1.85 Mб
Скачать

Заключение

В ходе выполнения курсовой работы мною были получены навыки разработки приложений на низкоуровневом языке программирования Assembler. Данная курсовая работа позволила углубить и закрепить навыки, приобретенные в результате выполнения лабораторных работ по дисциплине «Архитектура ЭВМ и систем». Самостоятельное тестирование приложение, выявление и устранение ошибок помогли глубже понять механизм работы прерываний и роль стека.

В

Заключение Список литературы

результате работы была написана программа, удовлетворяющая всем требованиям поставленной задачи.

  1. Asmworld Программирование на ассемблере для начинающих и не только// 2009-2010.- Режим доступа: http://asmworld.ru/uchebnik/

  2. Рудаков П. И. Язык ассемблера: уроки программирования./ П.И. Рудаков, К.Г. Финогенов. - М.: ДИАЛОГ-МИФИ, 2001. - 640 с.

  3. Электронный справочник по командам и функциям операционной системы Microsoft DOS версия 3.2а

  4. Юров В. И. 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