Salut à tous, voilà je débute en assembleur et j'ai fait un petit programme exe qui affiche une succession de cadre de plus en plus grand. Le probleme c que lorsque la longueur d'un côté du carré dépasse 255, ca affiche n'importe quoi ! j'ai essayé de parer à ce problème mais sans succès. Je vous laisse juger par vous-même. Si quelqu'un pouvais résoudre ce problème, ca serai cool!
Merci
ps : j'utilise tasm
-------------------------------------------------------
.386
code segment use16
assume cs:code, ds:data, ss:pile
debut:
mov ax, data
mov ds, ax
;passage au mode video (640x480)
mov ah, 00h
mov al, 12h
int 10h
mov ax, 0
push ax
répétition_cadre:
pop ax
push ax
sub x1, ax
sub y1, ax
mov dl, 2
mul dl
add word ptr ds:[longueur], ax
push x1 y1 0 2 ;dessine un carré (x, y, orientation, couleur)
call dessine
push x1 y1 1 2
call dessine
pop ax
push ax
add y2, ax
push x1 y2 0 2
call dessine
pop ax
push ax
add x3, ax
sub y3, ax
push x3 y3 1 2
call dessine
add compteur, 01d
pop ax
push ax
cmp ax, 0
jne ajout_pas_5
pop ax
add ax, 5
push ax
ajout_pas_5:
cmp compteur, 26
jne répétition_cadre
;attente frappe touche
frappe:
mov ah, 01h
int 16h ;vérifie le buffer pour voir si une touche du clavier a été enfoncée
je frappe ;si buffer vide, on attend une frappe
mov ah, 00h ;sinon on vide le buffer
int 16h
;retour au mode text
mov ah, 00h
mov al, 00h
int 10h
;arrêt programme
mov ah, 4ch
int 21h
dessine proc near
;sauvegarde adresse début pile
mov bp, sp
mov ah, 0ch
mov al, ss:[bp+2] ;couleur
mov cx, ss:[bp+8] ;x
mov dx, ss:[bp+6] ;y
int 10h
mov bl, ss:[bp+4] ;orientation
cmp bl, 1
je trait_vertical
trait_horizontal:
mov bx, ds:[longueur]
boucle_h:
dec bx
inc cx
int 10h
cmp bx, 0
jne boucle_h
jmp fin_dessine
trait_vertical:
mov bx, ds:[longueur]
boucle_v:
dec bx
inc dx
int 10h
cmp bx, 0
jne boucle_v
fin_dessine:
ret 8
dessine endp
code ends
data segment use16
x1 dw 315
y1 dw 235
y2 dw 245
x3 dw 325
y3 dw 235
longueur dw 10
compteur db 0
data ends
pile segment stack
remplissage dw 256 DUP (?)
pile ends
end debut