Petit problême FPU

prunkdump Messages postés 33 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 19 avril 2004 - 18 mai 2003 à 12:24
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 18 mai 2003 à 21:19
Bonjours, voilà je voudrais savoir comment afficher un nombre à vigule flottante lorsqu'il est en mémoire. Plus simplement comment convertir un nombre à virgule flottante en chaine ASCII.

Si quelqu'un pouvait également m'expliquer le fotionnement de l'instruction "fscale"

MERCI

1 réponse

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
18 mai 2003 à 21:19
Pour afficher des petites valeurs tu dois d'abord combien de décimales afficher par exemple pour 3 decimales tu fais:
mille dd 1000.0
...
fmul dword ptr [mille]
frndint                          ; Pour arrondir

Ensuite stocker sous forme d'entier par:
val dd 0
...
fistp dword ptr [val]

Ensuite tu n'as plus qu'à convertir un entier en ascii en mettant la virgule décimale au bon endroit.

Pour les plus grands nombre il faudra d'abord obtenir l'exposant en faisant:
fxtract

st(1)=exposant biaisé
st=mantisse
Tu pourras ensuite convertir l'exposant et la mantisse.

fscale est l'équivalant de l'instruction sar si st(1)<0 et équivalent à l'instruction shl ou sal si st(1)>0.
fscale effectue:
st=st * 2^st(1)


mais attention st(1) garde sa valeur il faut effectuer un fpop de la manière suivante:
fxch      st(1)
ffree     st
fincstp


Core Breaker :)
0
Rejoignez-nous