|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : FPU et puissance d'un nombre [ Archives / c, c++ et asm ] (AlexMAN)
Informations & options pour cette discussion
samedi 19 mars 2005 à 09:07:41 |
FPU et puissance d'un nombre

AlexMAN
|
Bonjour, Voila, j'ai 'codé' 2 fonctions permettant de calculer un nombre n a une puissance exp (la fonction est bourrin, cad pas de decoupages de la fonction selon que le nombre soit pair ou impair..), une en ASM avec les instructions du CPU, et une autre avec les instructions de la FPU (celle dont j'ai vraiment besoin, pour certaines raisons..). Et j'ai donc décidé de comparer la vitesse des 2fonctions, et la reponse est sans appel : Cpu plus rapide que Fpu (Avec mes fonctions a moi !). Donc j'aimerais savoir comment 'optimiser' la fonction FPU ci dessous :
__declspec (naked) int __stdcall PuissFPU(int n, int exp)
{
__asm {
mov eax, [esp + 8] //eax == exp
fild [esp + 4] //empile n, ST(1) == n
fild [esp + 4] //empile n, ST(0) == n, Contiendra le resultat
sub eax, 1
Deb:
fmul ST, ST(1)
sub eax, 1
test eax, eax
jne Deb
sub esp, 4
fist dword ptr[esp]
mov eax, [esp]
add esp, 4
ret 8
}
}
__declspec (naked) int __stdcall Puiss(int n, int exp)
{
__asm {
mov ecx, [esp + 4]
mov edx, [esp + 8]
mov eax, ecx
sub edx, 1
Deb:
imul eax, ecx
sub edx, 1
test edx, edx
jne Deb
ret 8
}
} Voila, merci d'avance a tous ;) Amicalement, Alex +2(p - n)
|
|
|
samedi 19 mars 2005 à 12:04:55 |
Re : FPU et puissance d'un nombre

BruNews
|
Dans tous les cas il est normal que par FPU soit plus lent qu'avec les 3 registres généraux. Tu peux gagner un peu en passant les params en registres. Inutile de déplacer ESP en sortie, c'est trop couteux, surtout si tu indexes sur lui l'instruction suivante.
__declspec(naked) int __fastcall PuissFPU(int n, DWORD exp) { // ECX = n, EDX = exp __asm { mov [esp-4], ecx ; n dec edx jle short puissExit fild dword ptr[esp-4] fld st(0) boucle: fmul st(0), st(1) dec edx jne short boucle fistp dword ptr[esp-4] fstp st(0) puissExit: mov eax, [esp-4] ret 0 } }
Je n'ai pas mesuré, je te laisse faire, pas le temps. Si exp <= 1, je retourne n, c'est pas très orthodoxe, tu adapteras selon besoin.
ciao... BruNews, MVP VC++
|
|
|
samedi 19 mars 2005 à 12:44:53 |
Re : FPU et puissance d'un nombre

AlexMAN
|
En fait, je ne veux pas passer toucher aux registres generaux, c'est ca la raison qui m'a poussé a utiliser le FPU...Parce que dans ma fonction appellante, je dois conserver la valeur presente dans ces registres, donc pas de __fastcall...Donc ca me rassure, merci ;) Puis ce que je te tiens, je veux decomposer un nombre en tous ses chiffres et partie de ses chiffres de taille egale :
1634 => Soit 1, 6, 3, 4 soit 16, 34 100 => 1, 0, 0
J'utilise pour cela le reste de la division entiere par 10^x mais bien sur, c'est une division et c'est lent, donc je me demandais s'il n'existait pas une maniere de coder ca en deplacant des bits ou un truc plus rapide.
Merci Brunews A bientot
+2(p - n)
|
|
|
samedi 19 mars 2005 à 12:55:46 |
Re : FPU et puissance d'un nombre

BruNews
|
mais non, une division par une constante, 10 ici, se fait par multiplication, va voir bnultoa dans mes sources.
ciao... BruNews, MVP VC++
|
|
|
samedi 19 mars 2005 à 12:59:32 |
Re : FPU et puissance d'un nombre

BruNews
|
Je viens de t'envoyer ReciDiv.zip qui te donnera le code asm suivant le diviseur indiqué.
ciao... BruNews, MVP VC++
|
|
|
Cette discussion est classé dans : int, mov, eax, esp, fpu
Répondre à ce message
Sujets en rapport avec ce message
Assembleur et tableau + linux + bof [ par flocic ]
Bonjour, J'ai un petit pb de comprehension, j'ai un programme qui deborde au bout 44 octet à cause d'un depassement d ela taille du tableau. Mais ce
Petit problème pour comparer (cmp) [ par smok1360 ]
Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l'
AT&T erreur de compilation etc... [ par maminovadu75 ]
Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C
Mini OS !! debut [ par Hardouz ]
salut a tous ! je debut en ASM je vx bosser un px en ASM je connais l'architechture ect !!! j'ai fais un pti programme mais il ya un probléme 1/ lors
Aligner des données pour le SSE [ par epineurien ]
Bonjour à tous !J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double .J'expliqu
assembleur/ patronyme [ par maxverypainful ]
Bonjour, je suis nouveau en tant qu'étudiant en informatique de gestion et j'ai une question concernant un code que nous devons créer.Il a pour but de
tp assembleur i3 pour la FST [ par babbiverus ]
main proc mov ax,@Datamov ds, axmov si,offset tabmov cx, 16mov bx,0saisie: mov dx,offset commande;afficher "saisir un nombre"mov ah,9int 21hmov ah, 1
[linux] read and open [ par sheorogath ]
Bonjour,je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.Voici l
TSR & Détournement d'interrupt(ion) [ par ghuysmans99 ]
bonjour à tous.j'ai fait un petit prog en asm 32bits pour dos mais il ne fonctionne pas ... reste à savoir pourquoi !!pourriez-vous m'aider ??;Change
afficher un caractère avec int 10h [ par thicdorb ]
bonjour à tous,je suis débutant en assembleur et je commence par le début : afficher un caractèrej'utilise l'inteeruption BIOS 10h mov al, 'A'
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|