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