Assembleur, aide avec un exercice

Fermé
jasgosakamlb Messages postés 1 Date d'inscription samedi 5 mai 2012 Statut Membre Dernière intervention 5 mai 2012 - 5 mai 2012 à 17:31
Bonjour,

Je suis censé de faire l'inversion d'une chaîne de caractères en assembleur. J'ai été donné l'algorithme écrit en langage C et je suis censé de le traduire littéralement :

int dep;
char *ptr;
char tmp;
...
int main(void)
{
...
dep = taille - 1;
ptr = chaine;
while (dep > 0) {
tmp = *ptr;
*ptr = ptr[dep];
ptr[dep] = tmp;
dep = dep - 2;
ptr++;
}
...
}

Les seuls instructions qui me posent de problèmes ce sont :
*ptr = ptr[dep]
prt[dep]=tmp

Je vous donne ce que j'ai écrit :

//on initialise ptr
movl $chaine, %eax
movl %eax, ptr
//dep = taille - 1
subl $1, i
movl i, %eax
movl %eax, dep
//ptr = chaine
movl chaine, %eax
movl %eax, ptr
bcl:
//while dep > 0
cmpl $0, dep
jle fin_bcl
//tmp = *ptr-------------------------------------------
movl ptr, %eax
movb %eax, tmp
//*ptr = ptr[dep]-----------------------------------
movl %eax, %ebx
addl dep, %ebx
movb %ebx, %eax
//ptr[dep]=tmp--------------------------------------------------------------------
movl dep, %edx
addl %eax, %edx
movb tmp, %ecx
movb %ecx, %edx
//dep-=2
subl $2, dep
//ptr++
movl %ecx, ptr
addl $1, ptr
// on continue avec la boucle
jmp bcl
fin_bcl:
leave
// return 0
movl $0, %eax
ret

Les lignes qui suivent les traits sont celles que je doute le plus.
J'apprécierai toute sorte d'aide
Merci en avance !!!!
<config>Linux / Firefox 5.0</config>