|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre chevronné
![]() être humain Inscription : décembre 2007 Messages : 471 ![]() |
comme les codes precedement postés ici, ceci est un aide mémoire.
celui ci couvre le code necessaire à la convertion d'un nombre decimal en une chaine de caractères terminée par 0. l'algo est de mise en oeuvre super simple, et permet entre autre de faire dans la virgule fixe, et la virgule flottante (avec des adaptations evidement). la chaine de base, ici str db "0000.000", contient un point décimal permettant d'interpreter eax en tant que valeur en virgule fixe, à 3 decimales apres la virgule. Code :
Code :
Code :
Et si l'on veut juste un nombre sans point décimal, il suffit de ne pas déclarer de point dans la chaine de destination. Personnelement, j'utilise cette fonction pour toutes les conversions binaire vers décimal, avec ou sans virgule fixe. l'avantage est certain car il permet de n'avoir qu'une seule fonction pour ces deux actions. pour la virgule flottante, il y aura donc lieu de proceder à une conversion. tou d'abord, determiner la position de la virgule avec la FPU (ou SSE), multiplier par la puissance necessaire à la disparition de la virgule. et enfin, convertir en binaire (fist) suite à ça, il y aura lieu de creer la chaine de reception, avec le point decimal à la bonne position, et le tour est joué. il est aussi possible, à moindre frais, d'utiliser le format BCD de la FPU pour charger directement un nombre décimal, et juste extraire chaque nibble, puis aditionner la valeur du "0" ascii, et enfin, l'envoyer dans la chaine. |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() ![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 48 ![]() |
Moi j'ai ça :
Code :
|
||
|
|
00
|
|
|
#3 | ||||
|
Membre chevronné
![]() être humain Inscription : décembre 2007 Messages : 471 ![]() |
bein, pour n'importe quelle base, suffit de remplacer 10 par la base.
si en plus BASE est entrée dans ecx au moment d'appeler cette fonction Code :
methode très maladroite, mais bon, quand on aime passer les paramètres par les registres, on ne compte pas voyons. Code :
par exemple, un drapeau, mais là, on complique le code... pour rien au final car chaque base permet ses propres algorythmes optimisés. la base 10 est une de celles qui ne donne pas trop dans l'optimisation. sauf peut etre avec les instructions AAM, AAD. qui permettent de diviser et multiplier par 10, ou tout autre base. non mais ça me convenait parfaitement comme code pour convertir du decimal, pour le binaire, pas besoin de division, pour l'hexa non plus. et je vois pas de base autre que 10 à utiliser dans la vie de tout les jours. |
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com