void inverse_chaine(char *str); //Le prototype de cette fonction //Exemple d'utilisation: char string[] = "Je suis une chaîne a inverser"; inverse_chaine(string); printf(string); //Affichera "resrevni a eniahc enu sius eJ"
extern printf
section .data
chaine db 'Inverse moi! Je te dirais quel programmeur tu es!', 0x0
section .text
global main, inverse_chaine
inverse_chaine:
;Mettez votre code ici
main:
mov eax, chaine ;Adresse de chaîne dans eax
push eax
;Appel de inverse_chaine avec l'adresse de la chaîne à inverser
call inverse_chaine
;Les deux lignes suivantes sont optionnelles car l'adresse
de la chaîne (maintenant inversée) est toujours dans la pile.
mov eax, chaine ;Adresse de chaîne dans eax
push eax
;Affichage de la chaîne avec printf
call printf
add esp, 4 ;On sort de la fonction main
mov eax, 0
inverse_chaine:
;Prologue de la fonction
push ebp
mov ebp, esp
;On charge le pointeur passé en paramètre dans eax
mov eax, [ebp+8]
;On push le caractère de fin de chaîne dans la pile
push word 0
chaine_dans_pile:
;On va empiler chaque caractère de la chaîne
;Récupération caractère courant
mov bl, byte [eax]
;Est-ce la fin de chaîne? (bl = 0 ?)
test bl, bl
;Si oui on passe à l'étape suivante
jz fin_chaine_dans_pile
;Sinon on empile le caractère suivant
push bx
;On incrémente le pointeur de 1 pour traiter le caractère suivant
inc eax
;On passe au caractère suivant
jmp chaine_dans_pile
fin_chaine_dans_pile:
;On recharge le pointeur de la chaîne pour dépiler un à un chaque caractère
mov eax, [ebp + 8]
inversion:
;On dépile le caractère courant
pop bx
;On le charge dans le pointeur de chaîne
mov byte [eax], bl
;On incrémente l'adresse
inc eax
;C'était la fin de la chaîne? (le 0 qu'on a empilé au début?)
test bl, bl
;Non alors on continue
jnz inversion
;C'est la fin de la chaîne, on marque la conclusion de la fonction
leave
ret
Résultats pour Exercice assembleur x86 inversion de chaîne
Résultats pour Exercice assembleur x86 inversion de chaîne
Résultats pour Exercice assembleur x86 inversion de chaîne
Résultats pour Exercice assembleur x86 inversion de chaîne
Résultats pour Exercice assembleur x86 inversion de chaîne
Résultats pour Exercice assembleur x86 inversion de chaîne