Pb affichage ligne

Signaler
Messages postés
241
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
-
salut a ts

voila j'ai fait une fonction pr faire des lignes , j'ai deciner un carre a 100,100 jusqu'a 200,200 et sa marche nickel mais ia un ptit pb qd j'essaie de tracer une ligne qui depasserai x=256 il ne m'affiche pas la ligne mais seulement son premier point . je passe les param par la pile . je ne sais pas trop de quoi sa vient si qq1 pouvait m'aider .
voila le code c'est un peu long mais bon :

.386

code segment use16

assume cs:code, ds:data, ss:pile

debut:

mov ax, data
mov ds, ax

; demarrer le mode vga
mov ah, 0 ; num de la fonction
mov al, 12h ; mode video desiré la 640*480 16coul
int 10h

; affichage du carre
; x y c l o ( c=couleur,l=longeur,o=orientation )
push 100 100 1 100 1
call ligne
push 100 200 2 100 1
call ligne
push 100 100 3 100 0
call ligne
push 200 100 4 100 0
call ligne

; affichage de la ligne
push 255 0 4 100 1
call ligne

; lire caractere pr attendre l'appuis d'1 touche
mov ah, 08h
int 21h

; remettre le mode normal
mov ah, 00h
mov al, 03h
int 10h

; fin prog
mov ah, 4Ch
int 21h

; la fonction pr affiche des lignes

ligne proc near
mov bp, sp

pushf
push ax bx cx dx

; mettre ds cx le 1er param , x
mov cx, ss:[bp+10]
; mettre ds dx le 2eme param , y
mov dx, ss:[bp+8]
; mettre ds al le 3eme param , la couleur
mov al, ss:[bp+6]
; la fonction pr afficher un pixel
mov ah, 0ch

boucle:

; appel de l'interruption
int 10h

; on met ds bx le dernier param , l'orientation
mov bx, ss:[bp+2]
; comparer avec un
cmp bx, 1
; si c'est egale la ligne est horizontal
je horizontal

; sinon la ligne est vertical
; on augmente dx , y
inc dx
; on met ds dx la longueur
mov bx, ss:[bp+4]
; on ajoute y
add bx, ss:[bp+8]
; puis on compare avec dx
cmp dx, bx
; si il ne sont pas egale on recommence
jle boucle
; sinon c'est la fin
jmp fin

horizontal:
; on augmente cx , x
inc cx
; on met ds bx la longueur
mov bx, ss:[bp+4]
; on ajoute x
add bx, ss:[bp+10]
; puis on compare avec cx
cmp cx, bx
; si il ne sont pas egale on recommence
jle boucle
; sinon on arrete

fin:

pop dx cx bx ax
popf

ret 10
ligne endp

code ends

data segment use16

data ends

pile segment stack

remplissage db 256 DUP (?)

pile ends

end debut

1 réponse

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
27
à mon avis c'est dans les ADD, il faut préciser Word sinon il prend Byte et là c'est tronqué.
add bx, Word ptr ss:[bp+10]

Daniel