cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
21 mars 2005 à 19:32
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
22 mars 2005 à 17:35
Bonsoir,
J'aurais aimé savoir s'il etait possible de visionner le contenu des registres FPU sous VC++, parce que c'est assez embetant de ne pas voir ce qui s'y trouve..
Et par la meme occasion, j'aurais aimé savoir pourquoi cette fonction deconne :
//Calcul puissance d'un nombre avec FPU (pour conserver les registres eax etc...)
//Resultat renvoyé dans ST(0).
__declspec(
naked)
void __stdcall Puiss(
__int64 n,
int exp)
{
__asm {
mov eax, [esp + 12]
//eax == exp
fld qword ptr[esp + 4]
//empile n, ST(1) == n
dec eax
jle Fin
fld ST
//empile n, ST(0) == n, Contiendra le resultat
Deb:
fmul ST, ST(1)
dec eax
test eax, eax
jne Deb
Fin:
ret 12
}
}
ST contient toujours 0 a la sortie. J'ai simplement changé la taille de n (32 => 64) et voila ce qui se passe, si quelqu'un a une explication, merci ;)
Et au fait, Brunews, la derniere fois tu as dit que c'etait normal que la fonction FPU soit plus lente que la fonction avec les registres generaux, la FPU ne sert elle pourtant pas a faire des calculs plus rapides ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 mars 2005 à 23:17
fld qword ptr[esp + 4] //empile n, ST(1) == n
NENNI, c'est fild avec un i car c'est un entier à convertir.
La FPU sert (ou servait, now y a SSE) à faire calculs en virgule flottante mais c'est plus long en chargement et conversion que de travailler sur les registres généraux avec des entiers.