[NASM] Optimiser le code d'une droite
hello, world !
bon, aujourd'hui, je m'intéresse aux tracés de droites.
j'ai déjà vu le topic sur le sujet connexe, mais là c'est plus un souci d'optimisation...
Le bon point, j'y parviens !
d'ailleurs, merci à Jeremia pour son site avec beaucoup d'explications. J'ai pris le dernier algo de la page (6)
le mauvais : j'ai l'impression de faire 100 lignes de code pour rien, et disons que j'aimerais bien avoir des idées d'optimisation...
exemple : je fais un petit prog qui trace une droite à l'écran de 10,10 à 100,50
voilà le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| org 100h ; programme .COM
segment .data
X db 10
Y db 10
k db 0
err db 0
segment .text
mov ax,13h
int 10h ;Mode 13 (320x200 - 256 couleurs)
push 0A000h
pop es ;le debut de la mem video dans ES
mov ax,320
imul bx,[Y],320
mov al,[X]
add bl,al ; on place l'origine en X,Y
add byte [err],2*(20-10)-(100-10)
mov cl,100
sub cl,[X] ; on va tracer 100-X points
ligne: ; ligne de 10,10 à 100,50
mov al,1
mov [es:bx],al ; trace le point
inc bx
cmp byte [err],0 ; if err>0
js signblock
jo elseblock
jmp thenblock
signblock:
jo thenblock
elseblock: ; err += deltaY-deltaX
add bx,320
add byte [err],(20-10)-(100-10)
jmp next
thenblock: ; err += deltaY
add byte [err],(20-10)
next:
loop ligne
xor ax,ax
int 16h ;Attend la pression d'une touche
mov ax,4C00h
int 21h ; quit |
quelqu'un voudrait essayer de voir ça ? merci !
Sam