Mon programme bloque

Signaler
Messages postés
17
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
5 novembre 2011
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
slt j'ai améliore mon programme mais il provoque une erreure lors
du calcul de la somme des entiers saisi (sommeentier)
POURTANT il exécute bien les deux premieres procédure
il bloque à partir de sommeentier
pourquoi????

TITLE affichage de texte en quatre couleur
.386
.MODEL flat,stdcall
.STACK 4096
ExitProcess PROTO,dwExitCode:DWORD
DumpRegs PROTO

INCLUDE Irvine32.inc

intcount=3

.data
intval SDWORD intcount DUP(?)
mess BYTE "Saisissez un entier sign",82h," :",0
mess1 BYTE "voici les entiers saisient dans la pile",0
mess2 BYTE "voici la somme des entiers dans la pile",0
.code
main PROC

call clrscr
mov esi,OFFSET intval
mov ecx,intcount
call saisirentiers
mov eax,1000
call delay
call afficherentiers
mov eax,2000
call delay
call sommeentier
mov eax,1000
call delay
call affichsomme
exit
main ENDP

saisirentiers PROC

pushad

L1:
mov edx,OFFSET mess
call writestring
call crlf
call readint
call crlf
mov dh,10
mov dl,20
call gotoxy
call clrscr
mov [esi],eax
add esi,4
loop L1
popad
ret

saisirentiers ENDP

afficherentiers PROC

call clrscr
mov edx,OFFSET mess1
call writestring
call crlf

L1:
mov eax,[esi]
call writeint
add esi,4
call crlf
loop L1
ret

afficherentiers ENDP

sommeentier PROC

push esi
push ecx
mov eax,0

L1:
add eax,[esi]
add esi,4
loop L1
L2:
pop ecx
pop esi
ret

sommeentier ENDP

affichsomme PROC

push edx
mov edx,OFFSET mess2
call writestring
call writeint
call crlf
pop edx
ret

affichsomme ENDP

END main

rhumsek

7 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

verifie la valeur de ecx a l'entrée de la fonction.

@++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
sommeentier PROC

push esi
push ecx
mov eax,0

L1:
add eax,[esi]
add esi,4
loop L1
L2:
pop ecx
pop esi
ret

sommeentier ENDP

jla trouve bizarre ta fonction ,aucune condition, rien, jme demande mm si elle ne fait pas une boucle infinie, et puis jne vois pas les 2 operandes, ou sont ils ? enfin, tu peux faire plus simple je pense, regarde :

;renvoie resultat
sommeentier proc ;op1 [esp + 4], op2 [esp + 8]

mov eax, [esp + 4]
mov ebx, [esp + 8]

add eax, ebx

ret 8

sommeentier ENDP

Pas besoin de sauver les registres généraux, comme eax, ecx ou edx.
Dis moi si cette fonction ne marche po, mais apparemment elle devrait.

++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
AlexMAN: loop EST une condition (jmp if ecx != 0), et provoque la décrémentation de ecx a chaque passage
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

as-tu verifié la valeur de ecx qui a mon avis a du bouger.

encore + simple:

sommeentier proc ;op1 [esp + 4], op2 [esp + 8]
mov eax, [esp + 4]
add eax, [esp + 8]
ret 8

sinon, il faudrait pusher ebx.

mais ça ne colle pas car nous avons affaire a un tableau d'entier.
La methode est bonne mais a mon avis, ecx n'as pas la valeur qu'il devrait avoir.

essai ça:

main PROC

call clrscr
mov esi,OFFSET intval
mov ecx,intcount
call saisirentiers
mov eax,1000
call delay
call afficherentiers
mov eax,2000
call delay
mov ecx,intcount <- juste ça
call sommeentier
mov eax,1000
call delay
call affichsomme
exit
main ENDP

@++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
ah ok, dsl je parle trop vite ;)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
AlexMAN> surtout tu retiens 'loop' comme bouclage OBSOLETE.
Me semble lui avoir deja dit que ce bouquin n'a que des vieilleries en exemples.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ah c pour ca ke je connais pas, je ne connais que le top nivo moi ;)