Probleme avec repne scasb

cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 28 déc. 2004 à 11:44
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 28 déc. 2004 à 18:21
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

(programmation en ASM model small avec TASM)

Un petit soucit avec repne et scasb, ex :

cld
mov di, offset lect
mov al, 'N'
mov cx, [llect]
repne scasb

lect contient les caracteres, et llect le nombre de caractere dans lect.

je souhaite savoir si il est arriver jusqu'au bout de lect ou si il y a trouve le N. Normalement, si il a ete jusqu'au bout, cx=0 et si il a trouve un N, ZF=1 mais lorsque je fais "jz xxxx" pour faire un saut si ZF=1 (il y a un 'N'), il saute dans tous les cas (N ou pas N)........je ne comprend pas ...... Pourquoi ?

Merci d' avance

6 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
28 déc. 2004 à 13:08
salut,

c peut etre ton processeur qui a un bug et qu'il faudrait changer
;-)

sinon, je pense que tu ne fournis pas le code nécessaire pour trouver ton bug. A mon avis c une modif des flags avant le test qui met à zero tout le temps.

@++
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
28 déc. 2004 à 13:38
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

merci de ta reponse !

g essaye de mettre ZF à 0 avant puis apres la fonction repne scasb.

RESULTAT :

c l'instruction repne scasb qui met tout le temps ZF=1 qu'il y ai un N ou non !

Par contre, il repere bien le N quand il y en a un !

Apres le jz xxxx, j'ai mis une instructin dans le cas ou il n' y a plus de N puisqu'il n'a pas fait de saut, c qu'il n'y en a plus. mais il fait toujours le saut......

(Le but de cet instructions est de trouver un N dans un fichier texte (prealablement mis dans une variable "duper"(--> lect db 500 dup (0) ). (aucun probleme de ce cote la : j'ai mis une instruciton qui affiche le contenu de la variable pour etre sur qu'il a bien le texte du fichier.txt
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
28 déc. 2004 à 15:47
re,

evidemment que c ta fonction scasb qui met ZF a 1 ( sinon quel interet du repne ? ) mais seulement si un 'N' est present dans l'interval 0...(ecx-1).

tu n'as donc bien sur pas besoin de mettre le flag ZF a 0 avant.

mais il y a que deux solutions:
revoit ton code ou change ton processeur car si ZF=1 c qu'il y a un 'N' dans l'interval lect[0...(ecx-1)].

PS: je ne crois pas a la solution du processeur defectueux.

@++
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
28 déc. 2004 à 17:27
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

je n'y comprend vraiment rien : j'ai refait un petit prog jute pour tester ce probleme et c pareil :

ideal
dosseg
model small
stack 200h
include "macros.asm"

dataseg

lect db "Je suis ici et Non la bas"
llect dw $-lect
nnn db "Il y a un N"
lnnn dw $-lnnn
pasn db "Il n'y a pas de N"
lpasn dw $-pasn
fligne db 0ah, 0dh

codeseg

debut: mov ax, @data
mov ds, ax

ecrire 2, fligne

cld
mov di, offset lect
mov al, 'N'
mov cx, [llect]
repne scasb
jz vrai

ecrire [lpasn], pasn
jmp fin

vrai: ecrire [lnnn], nnn

fin:

exit
end debut

il devrait me mettre le message "Il y a un N" mais il me met "Il n'y a pas de N".. J'ai peut etre mal compris le focntionnement de repne et scasb.....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
28 déc. 2004 à 18:14
re,

hi hi hi

nnn db "Il y a un N"
lnnn dw $-lnnn ; <--- y'a un bins là

@++
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
28 déc. 2004 à 18:21
débutant en c/c++, flash et asm- [mailto:cedbillard@voila.fr Me contacter]

merci

j'ai corrigé mais c pareil

a+
0
Rejoignez-nous