1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 2
    Points : 3
    Points
    3

    Par défaut implantation algorithme d'euclide (pgcd ) problème

    Salut à tous , je suis débutant en assembleur, et me voila confronté à un problème que je n'arrive pas à résoudre.
    En effet j'essaie d'implanter un algorithme qui calcule le pgcd entre 13481754 et 1234715 .
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	.data
    	a:
    		.long 13481754
     
    	b:
    		.long 1234715
    	resultat:
    		.space 4 
     
    	.text
    	.global _start
    	_start:
     
    	pgcd:
    		movl a,%eax
    		movl b,%ebx 
    	        and %ebx,%ebx 
    		jz done 
    		idiv %ebx
    		movl b,%eax
    		movl %eax,a
    		movl %edx,%ebx 	
    		movl %ebx,b
    		jmp pgcd	
    	done:
    		movl $1,%eax
    		movl $0,%ebx 
    		int $0x80
    Lorsque que j'analyse l'exécution du programme avec gdb -> je retrouve le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Program received signal SIGFPE, Arithmetic exception.
    pgcd () at pgcd.s:19
    19			idiv %ebx
    Or lorsque que je regarde le contenu de %eax et %ebx avant justement de tomber sur cette erreur il se trouve qu'aucun des deux est nul. Et qu'il suit bien le déroulement de l'algorithme d'euclide que j'essaie d'implanter
    c'est à dire tant que (a%b!=0)=> c=b , b=a%b , a=c .
    Merci de m'avoir lu ! (l'espace resultat servira à stocker la valeur du pgcd je ne l'ai pas encore fait ) !

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 2
    Points : 3
    Points
    3

    Par défaut ^^ j'ai trouvé

    Finalement j'ai trouvé ou était le problème je ne réinitialisais pas le registre %edx à 0 (merci gdb ) , à chaque tour de boucle. Si quelqu'un peut m'expliquer pourquoi j'ai du le réinitialisé à la main, l'opération div n'efface pas le contenue de %edx pour écrire dedans automatiquement ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 634
    Points : 13 952
    Points
    13 952

    Par défaut

    Ben non,

    idiv va faire une division sur le nombre 64 bits edx:eax, et va placer le résultat dans eax=quotient, edx=reste. Il faut donc bien mettre à 0 edx avant division.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec l'algorithme d'Euclide étendu
    Par Laurent7601 dans le forum C++
    Réponses: 1
    Dernier message: 11/07/2015, 12h06
  2. Algorithme d'euclide étendu
    Par eldiablo7 dans le forum Scheme
    Réponses: 1
    Dernier message: 25/10/2009, 10h11
  3. Algorithme d'Euclide et "plus grand commun diviseur"
    Par Jerome Briot dans le forum Téléchargez
    Réponses: 0
    Dernier message: 04/09/2009, 18h56
  4. Algorithme d'Euclide etendu
    Par YASIR dans le forum Débuter
    Réponses: 5
    Dernier message: 09/04/2008, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo