[Débutant] Inversion d'une chaîne
Salut !
Je débute en assembleur x86, et je bute un peu sur un exercice : je veux inverser une chaîne de caractères mais j'obtiens une segfault que je n'arrive pas à résoudre. Je suppose que mon erreur est relative avec la gestion de la pile mais je ne la comprends pas. Voilà mon programme :
Code:
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 29 30 31 32 33 34 35 36
| segment .code
global _start
_start:
call push_chaine ;met 0 suivi de mesg sur le haut de la pile
call pop_chaine ;récupère la chaine
mov ecx, mesg
mov eax, 4 ;syscall 4 = stdout(ecx)
mov ebx, 1
mov edx, size
int 80h ;stdout mesg
mov eax,1 ;Interruption linux
mov ebx,0 ;pour quitter
int 80h ;le proggrame
push_chaine:
push word 0 ;0 = fin de la chaine
lea eax, [mesg]
boucle:
mov eax, ecx ;on stocke eax dans ecx
push eax
inc eax ;on passe au caractere suivant
or ecx, ecx ;on vérifie si c'était le dernier caractère
jnz boucle
pop eax
lea eax, [mesg] ;on stocke le ptr sur la chaine
ret
pop_chaine:
pop ecx
mov [eax], ecx ;stockage du caractère courant
inc eax
or ecx, ecx
jnz pop_chaine
ret
section .data |
Merci d'avance de votre aide