
Графика на асме
Модератор: Andy
- NetCat
- Сообщения: 4
- Зарегистрирован: 07 янв 2007, 17:34
- Откуда: Russia Arkhangelsk
- Контактная информация:
вот мой код, он работает не на всех вариантах точек:
что неправильно?
mainseg segment
ORG 100h
ASSUME cs:mainseg, ds:mainseg, ss:mainseg
start:
y1 dw 20
x1 dw 20
x2 dw 40
y2 dw 40
ddx dw ?
ddy dw ?
ex dw ?
ey dw ?
d dw ?
i dw ?
x dw ?
y dw ?
ix dw ?
iy dw ?
;mov ah , 0fh
;int 10h
;push ax
;переход в графический режим
mov ah, 00
mov al, 04
int 10h
;функция установки цвета
mov ah, 0bh
;выбор палитры
mov bh, 01
;зелёный красный коричневый
mov bl, 00
; вызвать BIOS
int 10h
call drawline
@exiit:
in al,60h ; Scan keyboard
cmp al,0 ; Test on ESCAPE
je @exiit
;pop ax
;mov ah, 0
;int 10h
drawline proc
mov ex, 0
mov ey, 0
mov bx, x1
cmp x2, bx
ja @bol6e_x2
jb @men6e_x2
mov ix, 0
jmp @ly
@bol6e_x2:
mov ix, 1
jmp @ly
@men6e_x2:
mov ix, 2
jmp @ly
@ly:
mov bx, y1
cmp y2, bx
ja @bol6e_y2
jb @men6e_y2
mov iy, 0
jmp @dal6e
@bol6e_y2:
mov iy, 1
jmp @dal6e
@men6e_y2:
mov iy, 2
jmp @dal6e
@dal6e:
cmp ix, 1
ja @x1_x2
jb @x1___x2
mov bx, x2
sub bx, x1
mov ddx, bx
jmp @dddy
@exit:
jmp @end
@x1_x2:
mov bx, x1
sub bx, x2
mov ddx, bx
jmp @dddy
@x1___x2:
mov ddx, 0
@dddy:
cmp iy, 1
ja @y1_y2
jb @y1___y2
mov bx, y2
sub bx, y1
mov ddy, bx
jmp @sravnenie
@y1_y2:
mov bx, y1
sub bx, y2
mov ddy, bx
jmp @sravnenie
@y1___y2:
mov ddy, 0
@sravnenie:
mov bx, ddx
cmp ddy, bx
ja @ddyb
mov d, bx
jmp @tak
@ddyb:
mov bx, ddy
mov d, bx
@tak:
mov bx, x1
mov x, bx
mov bx, y1
mov y, bx
mov i, 0
@snova:
mov bx, ddx
add ex, bx
mov bx, ddy
add ey, bx
mov bx, d
cmp ex, bx
ja @ex_d
jmp @ey_d
@ex_d:
mov bx, d
sub ex, bx
cmp ix, 1
ja @x1__x2
jb @yd
inc x
jmp @yd
@x1__x2:
dec x
jmp @yd
@yd:
mov bx, d
cmp ey, bx
ja @ey_d
jmp @ey_d
@ey_d:
mov bx, d
sub ey, bx
cmp iy, 1
ja @y1__y2
jb @xd
inc y
jmp @xd
@y1__y2:
dec y
jmp @xd
@xd:
inc i
mov bx, d
cmp i, bx
ja @end
;функция вывода точки
mov ah, 0ch
;цвет точки
mov al, 10
;горизонтальная координата
mov cx, x
;вертикальная координата
mov dx, y
;Вызвать BIOS
int 10h
jmp @snova
@end:
in al,60h ; Scan keyboard
cmp al,0 ; Test on ESCAPE
je @end
drawline endp
mainseg ends
end start
что неправильно?
mainseg segment
ORG 100h
ASSUME cs:mainseg, ds:mainseg, ss:mainseg
start:
y1 dw 20
x1 dw 20
x2 dw 40
y2 dw 40
ddx dw ?
ddy dw ?
ex dw ?
ey dw ?
d dw ?
i dw ?
x dw ?
y dw ?
ix dw ?
iy dw ?
;mov ah , 0fh
;int 10h
;push ax
;переход в графический режим
mov ah, 00
mov al, 04
int 10h
;функция установки цвета
mov ah, 0bh
;выбор палитры
mov bh, 01
;зелёный красный коричневый
mov bl, 00
; вызвать BIOS
int 10h
call drawline
@exiit:
in al,60h ; Scan keyboard
cmp al,0 ; Test on ESCAPE
je @exiit
;pop ax
;mov ah, 0
;int 10h
drawline proc
mov ex, 0
mov ey, 0
mov bx, x1
cmp x2, bx
ja @bol6e_x2
jb @men6e_x2
mov ix, 0
jmp @ly
@bol6e_x2:
mov ix, 1
jmp @ly
@men6e_x2:
mov ix, 2
jmp @ly
@ly:
mov bx, y1
cmp y2, bx
ja @bol6e_y2
jb @men6e_y2
mov iy, 0
jmp @dal6e
@bol6e_y2:
mov iy, 1
jmp @dal6e
@men6e_y2:
mov iy, 2
jmp @dal6e
@dal6e:
cmp ix, 1
ja @x1_x2
jb @x1___x2
mov bx, x2
sub bx, x1
mov ddx, bx
jmp @dddy
@exit:
jmp @end
@x1_x2:
mov bx, x1
sub bx, x2
mov ddx, bx
jmp @dddy
@x1___x2:
mov ddx, 0
@dddy:
cmp iy, 1
ja @y1_y2
jb @y1___y2
mov bx, y2
sub bx, y1
mov ddy, bx
jmp @sravnenie
@y1_y2:
mov bx, y1
sub bx, y2
mov ddy, bx
jmp @sravnenie
@y1___y2:
mov ddy, 0
@sravnenie:
mov bx, ddx
cmp ddy, bx
ja @ddyb
mov d, bx
jmp @tak
@ddyb:
mov bx, ddy
mov d, bx
@tak:
mov bx, x1
mov x, bx
mov bx, y1
mov y, bx
mov i, 0
@snova:
mov bx, ddx
add ex, bx
mov bx, ddy
add ey, bx
mov bx, d
cmp ex, bx
ja @ex_d
jmp @ey_d
@ex_d:
mov bx, d
sub ex, bx
cmp ix, 1
ja @x1__x2
jb @yd
inc x
jmp @yd
@x1__x2:
dec x
jmp @yd
@yd:
mov bx, d
cmp ey, bx
ja @ey_d
jmp @ey_d
@ey_d:
mov bx, d
sub ey, bx
cmp iy, 1
ja @y1__y2
jb @xd
inc y
jmp @xd
@y1__y2:
dec y
jmp @xd
@xd:
inc i
mov bx, d
cmp i, bx
ja @end
;функция вывода точки
mov ah, 0ch
;цвет точки
mov al, 10
;горизонтальная координата
mov cx, x
;вертикальная координата
mov dx, y
;Вызвать BIOS
int 10h
jmp @snova
@end:
in al,60h ; Scan keyboard
cmp al,0 ; Test on ESCAPE
je @end
drawline endp
mainseg ends
end start
Надо в своем архиве покопаться, завтра покажу свой - там попроще будет
It's a long way to the top if you wanna rock'n'roll