Question

On m'a demandé de créer une simple boucle en langage assembleur mais je ne parviens pas à que la boucle ne se termine pas quand il se doit, elle continue dans une boucle infinie.

Je dois donner la ECX une variable qui est prise par l'entrée, mais dans mon code ci-dessous, même si je précise le compteur est toujours tombe directement dans une boucle infinie.

Mon code est ici (mise à jour):

code Pastebin

Le code peut contenir des erreurs autres que la boucle réelle.

// Edité pour l'explication des exigences des programmes ...

Le programme a besoin de prendre une entrée « n » qui sera utilisée en tant que compteur de la boucle. Je prends alors entrée « n » numéros plus, quand un nombre est positif que je dois ajouter que la postot variable quand j'ai besoin négatif d'ajouter que la negatot variable. Après « n » numéros ont été saisis, j'imprime les résultats pour chaque variable et les sorties du programme.

Edit 2:

Correction du problème de la boucle en effaçant la pile correctement donc j'ajouté:

        add esp,8

et

next:   push ecx
        ...
pop ecx
loop next

Ce qui a résolu le problème de la boucle.

Était-ce utile?

La solution

Ok, je l'ai. . . Vous lisez entier le numéro de l'utilisateur. Ensuite, sur la ligne 41 vous soit saut à la ligne 47 ou atterriront dans la ligne 43.

Si vous allez à la ligne 43, vous regagnez la ligne 45 qui passe à la ligne 49 (fin). Si, au contraire, vous êtes allé à la ligne 47, vous tomberez à travers à la ligne 49 (fin).

Dans les deux cas, vous avez alors la boucle de retour à la ligne 29 (suivante).

Vous attendez votre registre ecx chaque boucle pour diminuer la valeur du temps est atteinte, et il reste inchangé au cours du traitement de la boucle.

Avez-vous essayé de pousser ECX vers la ligne 29, et le faire éclater juste avant la boucle?

Autres conseils

Je vois deux erreurs:

  • Il y a un JG positive là après que vous incrémenter un pointeur de pile. Êtes-vous sûr de vouloir vérifier le résultat de jongler avec votre cadre de pile, plutôt que la valeur du numéro entré?

  • jmp end ne fait pas: Juste après end est un loop next. Je ne vois aucune condition pour terminer la boucle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top