Vous n'êtes pas identifié.
Je voulais savoir les différentes commandes de saut en asm dans le style jz et jne, à quels tests ils correspondent en fait (<=, !=, >, etc...)
Hors ligne
c bon g trouvé les différentes commandes de saut, mais g tjrs un pb avec ma routine pour effacer l'écran:
void clear(void) { int i; dboucle: asm { mov si,i mov ax,0 mov es:[si],ax add i,2 cmp i,3072 jbe dboucle } return; }
cette routine ne marche pa trop trop, dans le jeu j'ai une ligne en bas à droite qui ne s'efface pas et dans les menus ça fait que dalle, help pliz?!
PS: cette routine est l'équivalent asm de:
void clear(void) { int i; for(i=0;i<=3072;i+2) { _SI=i; _AX=0; asm mov es:[si],ax } }
Hors ligne
es-tu certain que es est égale au segment vidéo ?
ET SURTOUT QUE i ==0 ??????????
elle n'est pas initialisée dans ton code (en asm), elle peut valoir n'importe quoi...
Hors ligne
mais pourtant quand je fais int i, j'ai forcément i==0!! non? je me trombe? Sinon d'aprs ce que tu dis je devrais avoir:
void clear(void) { int i=0; asm { mov ax,0x1A20 mov es,ax } dboucle: asm { mov si,i mov ax,0 mov es:[si],ax add i,2 cmp i,3072 jbe dboucle } return; }
mais je me demande comment cette routine change de segment video!!
Hors ligne
i == 0 ?? ben non et cette erreur (non initialisation) m'a déja couté kk heures de débuggage... Ca fait des truc tro chelou...
Hors ligne
mais quand tu mets int i, je pense que le compilo affecte un NULL à la variable! or NULL et 0 c'est pareil! Mais bon g pê tort, alors est ce que la routine de mon post précédent peut marcher à votre avis? (sachant qui'l y a deux segs à effacer (0x1A20 et 0x1AA0)
Hors ligne
En pricipe elle devrait marcher.
int i;
ne met en aucun cas i à 0: cela ne fait qu'affecter de la mémoire pour la variable i dans le stack c'est tout, à ce point i contient ce qui ce trouvait à son adresse avant, ça paut être n'importe quoi.
C'est pareil avec malloc() ça ne fait qu'affcter de la mémoire si tu fait :
{
char *buf;
buf = (char *)malloc(50000 * sizeof(char));
}
le programme ne va pas écrire 50000 fois 0 ce qui serait inutile si tu comptes remplir cette zone avec qqch.
si tu veux que buf ne contienne que des 0 il faut utiliser calloc() :
{
char *buf;
buf = (char *)calloc(50000, sizeof(char));
}
@+
Hors ligne
ah bah justement je DOIS mettre la valeur de i à 0 sinon ça fera comme tu dis! bon ben je n'ai plus qu'à l'essayer, mais po mntnt, lundi o plus tot.
Hors ligne