Bonjour,
j’essaie de ré-implémenter strlen en assembleur. Mon ordi est un 64 bits, mais je le fait en 32 bits en compilant avec -m32.
Voici mon code main.c :
#include <stdio.h>
#include <stdlib.h>
int main(int argnb, char* args[]){
printf("Taile de %s : %d", "bonjour", mstrlen("bonjour"));
return(0);
}
et mon code assembleur : (mstrlen.s) :
.globl mstrlen
.text
mstrlen:
movl 4(%esp), %ebx
movl $0, %eax
jmp test
test:
cmpb $0, (%ebx)
jne redo
ret
redo:
incl %eax
addl $8,%ebx
jmp test
.end
L’idée: je met le premier argument 4(%esp) qui est censé être un pointeur vers un str dans ebx. Je met le compteur dans eax. Puis, tant que ebx ne pointe pas vers 0 (fin de chaîne) on ajoute 1 au compteur et 8 (un char) au pointeur. A la fin, on renvoie ; la valeur doit etre dans eax.
Je compile avec : gcc -m32 -g main.c mstrlen.s
Mais quand je teste, j’ai un segfault… Quelqu’un sait pourquoi ?
Merci d’avance !
+0
-0