Assembleur x86
thundril
Messages postés
12
Statut
Membre
-
thundril Messages postés 12 Statut Membre -
thundril Messages postés 12 Statut Membre -
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:
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
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
A voir également:
- Assembleur x86
- Programme x86 ✓ - Forum Windows
- X86 ou x64 ✓ - Forum Windows
- X64 x86 ✓ - Forum Windows
- Program files (x86) ? - Forum Windows
- Programme files (x86) - Forum Windows 10