Assembleur x86

Fermé
thundril Messages postés 9 Date d'inscription mercredi 12 décembre 2012 Statut Membre Dernière intervention 20 décembre 2012 - Modifié par thundril le 13/12/2012 à 14:49
thundril Messages postés 9 Date d'inscription mercredi 12 décembre 2012 Statut Membre Dernière intervention 20 décembre 2012 - 13 déc. 2012 à 16:26
Bonjour

Dans le cadre de mes études, je réalise un TP en assembleur.
Ce TP est composé de plusieurs questions dont l'une d'elles me pose problème.
Voici la question:
Réécrire la fonction atoi (on se limitera à des entiers inférieurs strictement à 1000000) : la donnée sera argv[1], et le résultat sera affiché avec la fonction précédente.
Pour une meilleure compréhension, voici l'énoncé de la question précédente donnant la fonction nécessaire pour l'affichage, j'ai réussi à faire cette question et je fourni le code ci dessous:
Affichage de l'entier écrit dans EAX (le contraire de la fonction atoi...).
Voici le code:
#on suppose l'entier deja present dans aex. 
.data 
        base: .long 10 
        caractere: .byte 0 
         
.text 
.globl _start 

_start: 
        pushl $10 
        movl $51, %eax 
                         
decodage:  
        movl $0, %edx         # edx <- 0 On réinitialise edx... 
        divl base                # le résultat est placé dans eax et edx. On tronque le dernier chiffre de $eax 
        addl $48, %edx   # convertie le chiffre contenu dans edx en caractere. (itoa) ex: 6+'48' = '6'...On recupere ainsi le dernier chiffre de $eax (qui est maintenant dans edx) 
        pushl %edx                # on empile edx. dans la pile... 
        test %eax, %eax        # test si on est arrivé au bout Si $eax vaut 0 alors on est au bout et on ne fait pas le saut.  
        jnz decodage 
                         
affichage:         
        popl %eax 
        movb %al, caractere 
        call affiche_caractere 
        cmp $10, %eax 
        jne affichage 
                         
exit:                 
        movl $1, %eax 
        movl $0, %ebx 
        int $0x80 
        ret 
                         
affiche_caractere: 
        pusha 
        movl $4, %eax 
        movl $1, %ebx 
        movl $caractere, %ecx 
        movl $1, %edx 
        int $0x80 
        popa 
        ret 

La valeur retournée par DDD (oui j'utilise DDD pour exécuter) est bien 51, la question est résolue.


Mon problème est que je ne sais pas récupérer les arguments passés en ligne de commande et je ne sais pas non plus faire appel à la fonction précédente comme demandé autrement qu'en réintégrant celle ci à mon nouveau code, j'ai fait des recherches sur internet mais les pages intéressantes que j'ai trouvé ne sont pas dans le même langage ou alors elles ne répondent pas à mes attentes.
J'espère que j'ai été assez clair dans l'explication de mes attentes!
Est ce que quelqu'un saurai m'aider?
Merci d'avance

Yann

1 réponse

thundril Messages postés 9 Date d'inscription mercredi 12 décembre 2012 Statut Membre Dernière intervention 20 décembre 2012
13 déc. 2012 à 16:26
Allez s'il vous plaît un petit coup de main :-S
Je bloque...
0