ASM est dans le titre, qui ne veut pas en voir passe son chemin, merci.
INJUREBOX Windows à craindre si PC < P4, vous êtes prévenus.
Petit outil dédié développeur, donne la représentation interne d'un flottant.
- Zone du haut, on entre son flottant (virgule sera automatiquement changée en point pendant la frappe) et puis ENTER.
- Zone du milieu donne représentation hexa du float64 ('double' en C).
- Zone du bas la représentation hexa du float32 ('float' en C).
Si vous n'en voyez pas l'utilité pour l'instant, j'espère que vous la verrez un jour et le plus tôt possible. Je m'en sers quasi tous les jours dans mon taf pour mes routines de calcul.
Il y a l'exemple d'utilisation de 2 constantes (float64) dans ce code:
__declspec(align(16)) const __int64 BNUNDIXIEM = 0x3FB999999999999A;
__declspec(align(16)) const __int64 BNMINUSDBL = 0x8000000000000000;
Chargement ordinaire par: movsd xmm2, qword ptr BNUNDIXIEM
EXPLICATIONS:
Touche ENTER déclenche appel de FloatsToHex():
case IDOK:
FloatsToHex();
return 0;
Le C finit ici...
FloatsToHex() réseve 32 octets de buffer (char[16] et BYTE[16]), lit la zone texte.
Le texte est envoyé à bnatod() en fastcall:
mov ecx, esp (adresse de la chaine)
call bnatod
bnatod() n'est rien d'autre que atof() du C mais ça ne retourne pas la valeur en ST(0) de FPU mais dans xmm0 (registre SSE) au format float64, va sans dire que cette fonction ridiculise atof() en perfs.
Vu le retour en xmm0, l'appelant ne peut donc être qu'en asm également sinon il faudrait le compilo Intel mais c'est encore plus long à taper que l'asm direct alors...
xmm0 est ensuite plaqué tel quel dans le buffer, 8 octets qui sont lus en 2 passes et envoyés à bndwordtox() en fastcall:
movsd qword ptr[esp+20], xmm0 PLACE LES 64 BITS DU FLOAT64 DANS LE BUFFER
cvtsd2ss xmm2, xmm0 PREPARE FORMAT FLOAT32 POUR LA FIN
mov edx, esp ADRESSE BUFFER CHAINE
mov ecx, dword ptr[esp+24] VALEUR 32 BITS HAUT DU FLOAT
call bndwordtox
mov edx, eax MERCI AU RETOUR DIRECT DE FIN D'ECRITURE
mov ecx, dword ptr[esp+20] VALEUR 32 BITS BAS DU FLOAT
call bndwordtox
et on envoie par SetWindowText dans EDIT du milieu.
Ensuite idem mais sur 32 bits avec xmm2 qui contient la conversion de xmm0 en float32.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.