Assembleur X86, pourquoi ma procedure bug?svp
Skeleton
-
JSS Messages postés 3745 Statut Contributeur -
JSS Messages postés 3745 Statut Contributeur -
Alors voila je vais vous copiez coller ma procedure et vous expliquez après:
;debut de la procedure
AfficheGom PROC
MOV CX, Pacman_TileHeight ;initialisation de CX pour la boucle bcle1
MOV SI, 0;SI prend la position de depart du tile PacGom
PacGomLoop1:
PUSH CX;on sauve la valeur du compteur de la boucle bcle1
MOV CX, Pacman_TileWidth ; initialisation de CX pour la boucle bcle2
PUSH DI;on sauve la position du curseur
PacGomLoop2:
;Dessine une ligne du sprite PacGom
MOV AL, PacGom[SI] ;2 lignes qui permettent de
CMP AL, 000
JE transparent
MOV ES:[DI], AL ;de faire correspondre une case du tableau à une pixel
transparent:
INC SI
INC DI
LOOP PacGomLoop2;on dessine ligne par ligne le sprite pacgom
POP DI;on remet le curseur au debut du sprite pour lui ajouter 320 facilement
ADD DI, 320
POP CX;on recupere le compteur de bcle1 pour le decrementer correctement
LOOP PacGomLoop1
AfficheGom ENDP
;Fin de la procedure
Voila il y a donc deux boucles, car j'affiche un sprite (ici pour le jeu pacman) je veux afficher les ptit point jaune que pacman mange ^^ mais bon voila ma procedure pour dessiner un de ces sprite a l'ecran fait buger mon prog entier puisque quand je lance l'exe il s'arrete a cette procedure je narrive pu a en sortir
d ou peut venir le probleme?
(mes push et pop sont correct...)
merci ;)
;debut de la procedure
AfficheGom PROC
MOV CX, Pacman_TileHeight ;initialisation de CX pour la boucle bcle1
MOV SI, 0;SI prend la position de depart du tile PacGom
PacGomLoop1:
PUSH CX;on sauve la valeur du compteur de la boucle bcle1
MOV CX, Pacman_TileWidth ; initialisation de CX pour la boucle bcle2
PUSH DI;on sauve la position du curseur
PacGomLoop2:
;Dessine une ligne du sprite PacGom
MOV AL, PacGom[SI] ;2 lignes qui permettent de
CMP AL, 000
JE transparent
MOV ES:[DI], AL ;de faire correspondre une case du tableau à une pixel
transparent:
INC SI
INC DI
LOOP PacGomLoop2;on dessine ligne par ligne le sprite pacgom
POP DI;on remet le curseur au debut du sprite pour lui ajouter 320 facilement
ADD DI, 320
POP CX;on recupere le compteur de bcle1 pour le decrementer correctement
LOOP PacGomLoop1
AfficheGom ENDP
;Fin de la procedure
Voila il y a donc deux boucles, car j'affiche un sprite (ici pour le jeu pacman) je veux afficher les ptit point jaune que pacman mange ^^ mais bon voila ma procedure pour dessiner un de ces sprite a l'ecran fait buger mon prog entier puisque quand je lance l'exe il s'arrete a cette procedure je narrive pu a en sortir
d ou peut venir le probleme?
(mes push et pop sont correct...)
merci ;)
A voir également:
- Assembleur X86, pourquoi ma procedure bug?svp
- Bug chromecast - Guide
- Windows x86 - Forum Windows
- Logiciel x86 / Windows x64 - Forum Windows
- Iptv bug forum ✓ - Forum Box et Streaming vidéo
- Iptv bug - Forum Box et Streaming vidéo
2 réponses
de memoire et selon le compilateur que tu utilises je crois me souvenir que les comparaisons à 0 ne se font bien qu'avvec un 0 significatif et plante avec 00 ou 000 etc...
mais bon c'est un vague souvenir et en plus selon les compilateur ça peut etre ou non geré....
j'éspere ne pas t"envoyer sur une fausse piste...
aussi (rien à voir avec ton bug)
pour optimiser evites les mov XX, 0
fais plustot un xor XX,XX
ça fait 2pas aulieu de 3pas...
en plus ça permet de diminuer la taille du fichier...compilé ou executé si tu ecrits en direct live l'éxécutable...
mais bon c'est un vague souvenir et en plus selon les compilateur ça peut etre ou non geré....
j'éspere ne pas t"envoyer sur une fausse piste...
aussi (rien à voir avec ton bug)
pour optimiser evites les mov XX, 0
fais plustot un xor XX,XX
ça fait 2pas aulieu de 3pas...
en plus ça permet de diminuer la taille du fichier...compilé ou executé si tu ecrits en direct live l'éxécutable...