Смекни!
smekni.com

Графика на языке Assembler (стр. 2 из 2)

mov Leng, bx

jmp C1

LenYGLenX:

mov Leng, ax

C1:

cmp ax, bx

jg LYGLX ;Если ABS(X2-X1) > ABS(Y2-Y1)

mov ax, X1

mov bx, Y1

mov dx, LenX

neg dx

inc Leng

mov cx, Leng

shl LenX, 1

shl LenY, 1

CYCLE1:

mov X2D, ax ;X = X1

mov Y2D, bx ;Y = Y1

CALL PUTPIXEL ;Рисуемточку

add ax, DelX ;X = X + DelX

add dx, LenY ;D = D + 2*(Y2-Y1)

cmp dx, 0 ;Если D > 0

jle DL01 ;

sub dx, LenX ;D = D - 2*(X2-X1)

add bx, DelY ;Y = Y + DelY

DL01:

loop CYCLE1

jmp EXITLINE

LYGLX: ;Если ABS(X2-X1) <= ABS(Y2-Y1)

mov ax, X1

mov bx, Y1

mov dx, LenY

neg dx

inc Leng

mov cx, Leng

shl LenX, 1

shl LenY, 1

CYCLE2:

mov X2D, ax ;X = X1

mov Y2D, bx ;Y = Y1

CALL PUTPIXEL ;Рисуемточку

add bx, DelY ;Y = Y + DelY

add dx, LenX ;D = D + 2*(X2-X1)

cmp dx, 0 ;Если D > 0

jle DL02

sub dx, LenY ;D = D - 2*(Y2-Y1)

add ax, DelX ;X = X + DelX

DL02:

loop CYCLE2

EXITLINE:

pop dx

pop bx

pop ax

pop cx

ret

ENDP LINE

MAIN PROC

mov ax, datas

mov ds, ax ;Инициализация сегментов данных

mov ax, 0A000h ;A000h - сегмент видеобуфера

mov es, ax

mov ah, 00h ;Установка видеорежима

mov al, 13h ;Mode = 13h (320x200x256)

int 10h

MainLoop:

mov COLOR, 15 ;Рисованиеточки

CALL DRAWCUBE ;Рисуемкуб

CALL WAITVRT ;Ждёмразвёрткуэкрана

mov COLOR, 0 ;

CALL DRAWCUBE ;Стираемкуб

in al,60h ;Читаемскан-кодклавиатуры

cmp al, 4bh ;Есликлавиша "Left"

jne DONTROTL

mov ax, DeltaY

sub ANY, ax ;уменьшаем ANY на DeltaY

jns DONTROTD

add ANY, 360

jmp DONTROTD

DONTROTL:

cmp al, 4dh ;Есликлавиша "Right"

jne DONTROTR

mov ax, DeltaY

add ANY, ax ;увеличиваем ANY на DeltaY

cmp ANY, 360

jb DONTROTD

sub ANY, 360

jmp DONTROTD

DONTROTR:

cmp al, 48h ;Есликлавиша "Up"

jne DONTROTU

mov ax, DeltaX

add ANX, ax ;увеличиваем ANX на DeltaX

cmp ANX, 360

jb DONTROTD

sub ANX, 360

jmp DONTROTD

DONTROTU:

cmp al, 50h ;Есликлавиша "Down"

jne DONTROTD ;

mov ax, DeltaX ;

sub ANX, ax ;уменьшаем ANX на DeltaX

jns DONTROTD ;

add ANX, 360 ;

DONTROTD:

cmp al, 01h ;еслине Escape

jne MainLoop ;делаемцикл

EXIT:

movah, 00h ;Установка текстового видеорежима

mov al, 02h ;Mode - 02h

int 10h

mov ax, 4C00h ;Terminate

int 21h

ENDP MAIN

CODES ENDS

END MAIN