cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
14 août 2004 à 00:54
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
2 sept. 2004 à 02:01
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
; 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