Автор работы: Пользователь скрыл имя, 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
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).
Вывод каждой части
осуществляется отдельной
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 – Запуск программы.
При нажатии клавиши «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).
Информация о работе Программирования на языке ассемблера в процессе создания графических примитивов