Première analyse sommaire du code présent :
je pense qu'on peut considerer que la suite valeur sur 1 octet à analyser se trouve pointé par DS:[ESI].
Donc on charge le 1er octet.
** MOV BL,BYTE PTR DS:[ESI]
Si cet octet n'est pas un caractère chiffre [0..9] (30h -> 39h) on va @0040122Ch (quelque part dans la mémoire

).
** CMP BL,30h
** JL SHORT 0040122Ch // s'assurer que c'est un entier (integer) (0...9) val hex (30...39)
** CMP BL,39h
** JG SHORT 0040122Ch // s'assurer que c'est un entier (integer) (0...9) val hex (30...39)
On charge CL avec la valeur 10.
** MOV CL,0Ah
Puis on multiplie ECX (32bits) dont on ne connais pas les 24bits MSB, par EAX dont on ne connais pas non plus le contenu pour mettre le résultat dans EDX:EAX.
** MUL ECX
Ensuite on recharge de nouveau l'octet de la chaine dans CL
** MOV CL,BYTE PTR DS:[ESI]
Et on ajoute ECX (24bits MSB non connus) à EAX et EDX résultant je le rappelle de la multiplication ECX par EAX tous 2 non déterminés à part les 8bits de poids faibles de ECX (ce qui ne représente pas grand chose sur le résultat du produit de 2 nombres de 32bits).
** ADD EAX,ECX
** ADD EDX,ECX
On se décale dans la chaine d'un octet, puis on charge ce nouvel octet dans BL.
** INC ESI
** MOV BL,BYTE PTR DS:[ESI]
Si on tombe sur l'octet null, c'est fini.
** CMP BL,0h
** JE @R002 // fin du traitement
Voilà l'analyse ... maintenant les questions :
1) que vaut EAX lors de la 1ere itération ? (par la suite on peut évidemment dire que la valeur EAX est connue et je suppose qu'il vaut 0).
2) le contenu des MSB de ECX est indeterminé ... je pense qu'il doit y avoir une initialisation de ECX à 0 au début du code, non ?
3) Je suppose qu'il manque un "JMP @R001" à la fin du code.
Je pense commencer à comprendre ton code en supposant que ECX soit nul et un autre ajout que j'expliquerai aprés :
Il réalise la conversion d'une suite de chiffre en résultat numérique.
ex: "324" -> valeur numérique 324.
Mais pour que ça fonctionne , il manque un "SUB CL,30h" juste avant "ADD EAX,ECX"
Dans ce cas (avec toutes ces suppositions), il est évidant que si tu inverses la routine (en considérant que tu penses à linversion de l'ordre de lecture des octets), le résultat inversera les unités,dizaines,centaines,etc...
Chris.
Gentoo... que du bonheur ...