[assembleur] PGCD
Résolu/Fermé
b_khallou
Messages postés
335
Date d'inscription
jeudi 18 octobre 2007
Statut
Membre
Dernière intervention
14 octobre 2011
-
12 mai 2008 à 23:29
gasty - 8 juil. 2008 à 12:11
gasty - 8 juil. 2008 à 12:11
A voir également:
- Pgcd assembleur
- Pgcd calculatrice casio - Forum calculatrices
- Nasm assembleur - Télécharger - Édition & Programmation
- While en assembleur ✓ - Forum Programmation
- PPCM et le PGCD - Forum Java
- Ecrire un algorithme qui calcule le pgcd et le ppcm - Forum Programmation
3 réponses
slt....
voici le code ke tu demandes... j'espere ke tu sais comment marche les instructions...
bon courage!!
.data
a : .long 10360
b : .long 3470
pgdc : .space 4 /* On reserve 4 octets pour le resultat */
.text
.globl _start
_start :
movl a,%eax /* On met la valeur de a dans le registre %eax */
movl b,%ebx /* On met la valeur de b dans le registre %ebx */
movl $0,%edx /* On met la valeur 0 dans le registre %edx */
debut :
divl %ebx /* on fait la division du couple (%edx,%eax) par %ebx */
movl $0,%ecx /* on met la valeur 0 dans le registre %ecx */
cmp %edx,%ecx /* Le registre %edx contient le reste de la divison, qu'on compare à la valeur contenu dans le registre %ecx */
jnz retour /* si c'est different de 0 on fait un saut au label retour */
jmp fin /* si c'est = 0, on fait un saut au label fin */
retour :
movl %ebx,%eax /* on remet le diviseur dans le registre %eax */
movl %edx,%ebx /* et le reste dans le registre %ebx */
movl $0,%edx /* le registre %edx va prendre la valeur 0 */
jmp top /* et on retourne au label top pour une nouvelle division */
fin :
movl %ebx,pgdc /* a la fin, pgdc va contenir le dernier reste non nul */
movl $1,%eax
movl $0,%ebx
int $0x80
voila, donc j'ai pris les deux entiers, et normalement si tu compile et execute, tu auras pgcd(10360,3470) = 10.
valeur ke tu trouveras en principe dans le registre %ebx, dernier reste non nul!!
essaie avec d'autre valeur.
voici le code ke tu demandes... j'espere ke tu sais comment marche les instructions...
bon courage!!
.data
a : .long 10360
b : .long 3470
pgdc : .space 4 /* On reserve 4 octets pour le resultat */
.text
.globl _start
_start :
movl a,%eax /* On met la valeur de a dans le registre %eax */
movl b,%ebx /* On met la valeur de b dans le registre %ebx */
movl $0,%edx /* On met la valeur 0 dans le registre %edx */
debut :
divl %ebx /* on fait la division du couple (%edx,%eax) par %ebx */
movl $0,%ecx /* on met la valeur 0 dans le registre %ecx */
cmp %edx,%ecx /* Le registre %edx contient le reste de la divison, qu'on compare à la valeur contenu dans le registre %ecx */
jnz retour /* si c'est different de 0 on fait un saut au label retour */
jmp fin /* si c'est = 0, on fait un saut au label fin */
retour :
movl %ebx,%eax /* on remet le diviseur dans le registre %eax */
movl %edx,%ebx /* et le reste dans le registre %ebx */
movl $0,%edx /* le registre %edx va prendre la valeur 0 */
jmp top /* et on retourne au label top pour une nouvelle division */
fin :
movl %ebx,pgdc /* a la fin, pgdc va contenir le dernier reste non nul */
movl $1,%eax
movl $0,%ebx
int $0x80
voila, donc j'ai pris les deux entiers, et normalement si tu compile et execute, tu auras pgcd(10360,3470) = 10.
valeur ke tu trouveras en principe dans le registre %ebx, dernier reste non nul!!
essaie avec d'autre valeur.
b_khallou
Messages postés
335
Date d'inscription
jeudi 18 octobre 2007
Statut
Membre
Dernière intervention
14 octobre 2011
34
13 mai 2008 à 19:49
13 mai 2008 à 19:49
ca marche je vous remerci.