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)

samedi 19 mars 2005 à 09:07:41 | FPU et puissance d'un nombre

AlexMAN

Membre Club
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

Administrateur CodeS-SourceS
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

Membre Club
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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'  


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.