Программирования на языке ассемблера в процессе создания графических примитивов

Автор работы: Пользователь скрыл имя, 15 Сентября 2013 в 11:02, курсовая работа

Описание работы

Ассе́мблер (от англ. assembler — рабочий-сборщик) — компьютерная программа, компилятор исходного текста программы написанной на языке ассемблера, в программу на машинном коде.
Как и сам язык (ассемблера), ассемблеры, как правило, специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют, мульти платформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.

Содержание работы

Введение…………………………………………………….…………………………..3
Теоритическая часть…………………...…………………………………………….5
1.2 Реализация графики……..…………….………………………………….5
Практическая часть………………………………………………………………….7
2.1 Техническое задание……………………………………………………...7
2.2 Разработка алгоритма…………………....………………………………..8
2.3 Программный листинг……………………………...…………………...18
2.4 Пример работы…………………………………………………………..27
Заключение………………………………………………………………………….....34
Список используемой литературы…………………………………………………...35

Файлы: 1 файл

Курсовая.docx

— 669.26 Кб (Скачать файл)

CX = x

 DX = y 

X=X +200

  Y=Y +300


 

 

 

 


Нет


CX<>X




 

Да



Увеличиваем


CX = CX + 1

 


 


Процедура


tochka


 


 


 

 

 

Стр


1


 

 

 

 

 

 

 

 

 

Стр


1


 


 

DX <> Y





 

Увеличиваем


DX = DX + 1


 


Процедура


tochka



 


Конец



 

 

Рисунок 3 – Алгоритм процедура вывода главного прямоугольника.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Начало




 

Получение начальных координат


CX = x 

DX = y

CX =CX + 40 

DX = DX + 20  

X = X + 160 

Y = Y +110  


 

 

 

 


 

tochka




Увеличение CX = CX + 1




Да


CX <> X



 


Нет



CX =CX - 120


DX = DX +20


 


Да


DX <> Y




Нет



 

Конец



 

 

Рисунок 4 – Алгоритм процедура вывода горизонтальных линий.

 

 

 

 

 

 

 

 

начало



 


Вычисление начальных координат


CX = x  

 DX = y  

X = X + 120 

Y = Y + 80


 

 

 

 


tochka




Увеличиваем DX = DX + 1




Да


DX <> Y




Нет




Dx = DX - 80 


Cx  = x


 


tochka




Увеличиваем DX = DX + 1




Да


DX <> Y



 


Нет



Конец



 

 

 

Рисунок 5 – Алгоритм процедура вывода на экран двух вертикальных линий.

 

 

 

 

начало



 


X = X + 70  


Y = Y + 120  

Cx = x   

Dx = y   

X = X +60   

Y = Y +21   


 

 

 

 


tochka




Увеличение 


CX = CX + 1


 


CX <> X



 



Увеличение 


DX = DX + 1

CX = CX - 60


 

 


DX <> Y





X = X - 60 


Y = Y -21  

CX = X

DX = Y   

X = X +60


 

 

 

 


 

 

Стр


1


 

 

 

Стр


1


 


 

tochka




Увеличение 


CX = CX + 1


 

 


CX <> X




 


X = X - 60 


Y = Y + 10

CX = X 

DX = Y 

X = X + 60  

Col  =16


 

 

 

 

 


 

tochka




CX <> X



 


 


конец



 

 

Рисунок 6 –алгоритм  процедуры  вывода квадратов.

 

 

 

Вывод всего изображения  происходит поэтапно. Так вся фигура состоит из разных частей, которые поочерёдно выводятся:

- вывод главного прямоугольника (рисунок - 3);

- вывод горизонтальных (рисунок - 4) и вертикальных (рисунок -5) линий, которые организуют вывод на экран четырёх прямоугольников;

- вывод на экран остальных  маленьких прямоугольников (рисунок - 6).

 Вывод каждой части  осуществляется отдельной процедурой. В итоге получается необходимое  изображение. Самая простая и  в тоже время основная процедура  это процедура вывода точки, алгоритм которой сводится к вызову Функция 0CH. Координаты функция считывает с регистров CX и DX. Все эти действия объединены в одну процедуру tochka. Исходные координаты для прорисовки всей фигуры задаются в программе, а координаты для прорисовки составляющих основного рисунка получаем, основываясь, что предыдущие являются отправной точкой для остальных координат. Таким образом, для изменения координат составляющих частей необходимо изменить текущие координаты основного прямоугольника. Используя этот принцип, был реализован алгоритм перемещения фигуры по экрану.

 

 

 

 

 

 

 

 

 

2.3  Программный листинг

data segment

col db ?

horiz dw ?

vert dw ?

a dw ?

b dw ?

d dw ?

x dw ?

y dw ?

d1 dw ?

data ends

code segment

assume cs:code, ds:data

start:

mov ax,data

mov ds,ax

mov bx,0

mov cx,0

jmp main

 

;----процедура указания  видео режима 640х480 16 цветов

videoregim proc

mov ah,00h

mov al,12h

int 10h

ret

videoregim endp

 

;----процедура рисования точки

tochka proc

mov ah,0ch

mov al,col

mov bh,0

int 10h

ret

tochka endp

;---процедура рисования  главного прямоугольника 

pryamougolnik proc

mov CX,x ; cx = 220

mov DX,y ; dx = 90

add x,200 ;x = 420

add y,300 ; y = 390

x1: call tochka

inc cx ; 221

cmp cx,x

jne x1  ; cx <> x | 220 <> 420

sub cx,200  ; cx = 220

inc dx      ; dx = 91

cmp dx,y    ; dx <> y | 90 <> 390

jne x1

sub x,200   ; x = 220

sub y,300   ; y = 90

ret

pryamougolnik endp

;----end процедура рисования главного прямоугольника 

;----процедура рисования  5 горизонтальных линии

liniyag proc

mov CX,x  ; cx = 220

mov DX,y   ; dx = 90

add cx,40  ;  cx = 260

add dx,20   ; dx = 110

add x,160   ; x = 420

add y,110   ; y = 220

x2: call tochka

inc cx

cmp cx,x ; cx <> x  | 260 <> 420

jne x2

sub cx,120 ; cx = 260 

add dx,20   ;dx = 130

cmp dx,y

jb x2

sub x,120   ; x = 260

sub y,90   ; y = 110

ret

liniyag endp

;----------------------------------------------------

;---процедура рисования  2х вертикальных линий

liniyav proc

mov cx,x   ; cx = 260

mov dx,y   ; dx = 110

add x,120   ; x = 420

add y,80    ; y = 190

x3: call tochka

inc dx      ; dx = 111

cmp dx,y    ;  dx <>y | 110<>190

jne x3    

sub dx,80  ; dx = 110

mov cx,x   ; cx = 420

x4:call tochka

inc dx

cmp dx,y

jne x4

sub x,160  ;  x = 260

sub y,100   ;   y = 110

ret

liniyav endp

;--------------------------------------------

;------процедура рисования  квадрата-----

pryamougolnikz proc

add x,70   ; x = 330

add y,120   ; y = 230

mov cx,x    ; cx = 330

mov dx,y    ; dx = 230

add x,60    ; x = 390

add y,21    ; y = 250

x5:call tochka

inc cx    ; cx = 331

cmp cx,x   ; cx <> x | 330<>390

jne x5    

inc dx    ; dx = 231

sub cx,60  ; cx = 330

cmp dx,y   ; dx <> y | 230<>250

jne x5

sub x,60  ; x= 330

sub y,21   ; y = 230

mov cx,x    ; cx = 330

mov dx,y     ; dx =230

add x,60     ; x = 390

x6: call tochka

inc cx

cmp cx,x

jne x6

sub x,60  ; x = 330

add y,10 ; y = 240

mov cx,x  ; cx=330

mov dx,y  ; dx=240

add x,60   ;x=390

mov col,16

x7: call tochka

inc cx

cmp cx,x

jne x7

sub x,50 ;x=340

add y,60 ;y=300

ret

pryamougolnikz endp

;-----------------------------------------

kvadrat proc

mov cx,x   ;cx=340

mov dx,y   ;dx=300

add x,40    ; x = 380

add y,40    ; y = 340   

x8:call tochka

inc cx   ; cx=341

cmp cx,x  ; cx<>x | 340<>380

jne x8

sub cx,40  ; cx=340

add dx,40 ; dx=340

x9: call tochka

inc cx   ; cx= 341

cmp cx,x

jne x9   

sub cx,40 ; cx=340

sub dx,40 ; dx=300

x10: call tochka

inc dx   ; dx=301

cmp dx,y  ; dx =340

jne x10

sub dx,40 ; dx= 300

mov cx,x    ;cx=380

x11:call tochka

inc dx 

cmp dx,y

jne x11

ret

kvadrat endp

;------------------------------------------

kvadrats proc

sub y,30  ; y=310

mov dx,y  ; dx=310

add y,20  ; y=330

inc x  

mov cx,x  ; cx=381

add x,20  ; x=401

x12:call tochka

inc cx   ; cx=380

cmp cx,x

jne x12

sub cx,20  ; cx=380

inc dx

cmp dx,y   ; dx=y | 310<>330

jne x12    ; dx=330 cx=380

sub cx,61   ; cx=319

sub dx,20   ;dx=310

mov x,cx    ; x=319

mov y,dx     ;y=310

add x,20     ;x=339

add y,20     ;y=330

x13:call tochka

inc cx      

cmp cx,x

jne x13

sub cx,20

inc dx

cmp dx,y

jne x13

ret

kvadrats endp

;----------------------------------------

figura proc

call videoregim

call pryamougolnik

mov col,16

call liniyag

call liniyav

mov col,10

call pryamougolnikz

call kvadrat

mov col,10

call kvadrats

ret

figura endp

;----процедура перемещения----------

left_down proc

sub x,20

add y,20

call figura

ret

left_down endp

 

right_up proc

add x,20

sub y,20

call figura

ret

right_up endp

 

up_left proc

sub y,20

sub x,20

call figura

ret

up_left endp

 

down_right proc

add y,20

add x,20

call figura

ret

down_right endp

;-----------------------------------

color1 proc

mov col,6

call figura

ret

color1 endp

 

color2 proc

mov col,5

call figura

ret

color2 endp

 

color3 proc

mov col,4

call figura 

ret

color3 endp

 

color4 proc

mov col,3

call figura 

ret

color4 endp

 

;-----------------------------------

move proc

zst:

mov ax,0

int 16h 

cmp ah,02h ; если 1 то clr1 = жёлтый

je clr1

cmp ah,03h ;2 если 2 то clr2 = красный

je clr2

cmp ah,04h ;3 если 3 то clr3 = синий

je clr3

cmp ah,05h ;4 если 4 то clr4 = розовый

je clr4

cmp ax,011bh  ;esc

je short finish1

cmp ah,1Eh ;A

je zleft

cmp ah,20h ;D

je zright

cmp ah,11h ;W

je zup

cmp ah,1Fh ;S

je zdown

cmp ah,4Bh ;left=left+down

je f1

cmp ah,4Dh ;right=right+up

je f2

cmp ah,48h ;up=up+left

je f3

cmp ah,50h ;down=down+right

je f4

jne zst

finish1: jmp finish2 

clr1:

mov col,14  ; жёлтый

call figura

jmp zst

clr2:

mov col,4   ; красный

call figura

jmp zst

clr3:

mov col,1    ; синий

call figura

jmp zst

clr4:

mov col,12   ; розовый

call figura

jmp zst

zleft:   ;A

sub x,20

call figura

jmp zst

zright:     ;D

add x,20

call figura

jmp zst

zup:       ; W

sub y,20

call figura

jmp zst

zdown:     ;S

add y,20

call figura

jmp zst

;-----------

f1:   ;left=left+down

call left_down

jmp zst

f2:    ;right=right+up

call right_up

jmp zst

f3:     ;up=up+left

call up_left

jmp zst

f4:  ;down=down+right

call down_right

jmp zst

;-----------

finish2: ret

move endp

;------------------------------------

 

main:

mov col,15

mov x,220

mov y,90

call figura

call move

mov ax,4C00h 

int 21h  

code ends 

end start

 

2.4 Пример работы

После запуска исполняемого файла программы, выводится графический  объект, который требовалось реализовать  в курсовом проекте (рисунок - 7).

Рисунок 7 – Запуск программы.

При нажатии клавиши «1» цвет фигуры меняется на жёлтый (Рисунок - 8).

Рисунок 8 – Жёлтый цвет.

При нажатии клавиши «2»  цвет фигуры меняется на красный (Рисунок - 9).

Рисунок 9 – Красный цвет.

При нажатии клавиши «3»  цвет фигуры меняется на розовый (Рисунок - 10).

Рисунок 10 – Розовый цвет.

При нажатии клавиши «4»  цвет фигуры меняется на синий (Рисунок - 11).

Рисунок 11 – Синий цвет.

При нажатии клавиши «A» фигура движется по диагонали вверх и влево  (Рисунок - 12).

 Рисунок 12 – Клавиша «A».

При нажатии клавиши «D» фигура движется по диагонали вниз и вправо  (Рисунок - 13).

Рисунок 13 – Клавиша «D».

При нажатии клавиши «S» фигура движется по диагонали вниз и влево  (Рисунок - 14).

Рисунок 14 –Клавиша «S».

При нажатии клавиши «W» фигура движется по диагонали вверх и вправо  (Рисунок - 15).

Рисунок 15 – клавиша «W».

При нажатии клавиши «↑»  фигура движется вверх  (Рисунок - 16).

 

Рисунок 16 – Клавиша «↑».

При нажатии клавиши «↓»  фигура движется вниз  (Рисунок - 17).

Информация о работе Программирования на языке ассемблера в процессе создания графических примитивов