IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[MASM32] La fpu et la compréhension du résultat


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut [MASM32] La fpu et la compréhension du résultat
    JB
    Je suis sûr que c'est un truc de boeuff ; bon , comme moi quoi ."oui mais , sans l'anneau dans le nez !."
    J'ai fait une dll en asm , avec envoi d'un paramètre en double
    L'appelant de la dll, c'est mon langage évolué .
    Pour tester ma compétence en asm et fpu "c'est un euphémisme de parler de compétence" j'ai pris le cos.
    Et puis j'ai fait "par déduction, je me suis dit : la fpu calcule en radian ?."
    donc le double en radian "pour faire simple ! et pour tester ."

    Le langage évolué -> Declare Function cosr lib "cos" alias "cosx" ( radian as double) as long
    l'appelant -> result = cosr (2.0)
    normalement -> result = - 0.416146836547142

    l'asm ; -> là , le vrai sujet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    .data
     stok real4 0.0
     
    cosx PROC    rad:real8  ; ->le double -> rad = 2.0
    ;LOCAL bcd      :tbyte
     
    fninit
    fld rad -> là , la fpu s'adapte au real8  ! ? s'adapte ?....."faut voire !"
    fcos
    fwait ; -> bofff
     ;sahf -> cpu
    fstp  stok   ; là , je passe de double en single "pas sûr hein ?"
    mov  eax,stok   ; là je balance du real4
    ret 
    cosx ENDP
    BEN ? ; result est égal à -1.09333274E9 "c'est pas un prob de conversion ? .. le tbyte ???.."
    le truc de boeuff c'est quoi ?
    svp , la solus ! .
    merci
    papi

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .data
    stok real4 0.0
     
    cosx PROC rad:real8 
     
    fninit
    fld rad
    fcos
    fstp stok
    mov eax,stok
    ret
    cosx ENDP
    La fonction est bonne, en l'état elle retourne le résultat attendu.

    Le problème est du coté du VB lors du passage d'argument. Un double doit être codé sur 32 bits - je pense - en VB, alors que la fonction assembleur attend un REAL8 codé sur 64 bits, d'où l'erreur.

    Par contre, n'y connaissant rien en VB, je ne sais pas commencer passer un flottant en double précision...

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    JB
    merci Neitas ; t'est un pote
    j'ai bien peur que tu aies raison .
    je suis dans la caca ; paque je voulais donner un coup
    de pouce à mon langage évolué , que j'aime "RapidQ" ; non ne rigoles pas .
    je crois que , pour les cos , sin , etc.. c'est râpé , sniffff......
    pitète , une dernière chance ! ? .
    tu peux me dire , les types de déclarations du genre ".model flat,STDCALL " etc..
    et aussi les proc du genre xxx proc c xx : xxx, etc ..
    car je crois que c'est une question de convention d'appel de dll
    j'ai pas de débeueug pour regarder la pile et les registres "j'ai ma .......et mon couteau ; c'est tout !."
    merci
    papi

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut Une bibliotheque FPU est livré avec masm32
    Salut,
    C:\masm32\fpulib\FpuCos.asm
    ToutEnMasm

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    JB
    je te remercie "toutenmasm" .
    je connais la lib fpu , mais je suis pas du genre à copier .
    de plus ça façon de faire ne me convient pas
    je crois que la meilleur façon de m'aider ce serait de me dire
    comment est placé le double lors de l'appel de la dll "du ebp + 8 ???"
    et comment prévenir le compil de masm que l'appel se fait par un langage basic
    papi

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut VB et ASM
    Salut,
    VB veut savoir si l'argument est passé par adresse ou par valeur,ce qui n'est pas la même chose.
    La déclaration de la fonction appelante dans VB doit comporter "by value" juste après l'argument.Ainsi on retrouvera la valeur du nombre dans la pile,décomposé en deux dword de 4 bytes ,formant le real8.

    Pour éviter de travailler sans rien,voir mon site.

    ToutEnMasm

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    bj
    j'ai trouvé ; c'est un truc de boeufff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cosx PROC   rad:real8
    fninit
    fld rad
     fcos
    ret  
    cosx ENDP
    sitout
    paqueu , la convention d'appel de dll
    MERCI
    papi

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Rapidq via Asm
    JB
    une petite explic pour les autres
    Dans le cas d'un appel de dll par un langage évolué ; dans mon cas "rapidq" et pitète "vb"
    à la déclaration de la function ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare FUNCTION cosr lib "cos" alias "cosx" ( byval rad as double  ) AS DOUBLE
    si tu mets en bout de la func "as DOUBLE" au retour de la func c'est pas eax qui est renvoyé
    mais ST(0)
    velà
    papi

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour
    Et comme , je crois que je suis un mec bien ."faut voire, hein!.."
    je m'excuse pour alcatiz
    ben , j'ai pas décodé le "code: " .
    a+
    papi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de compréhension d'un résultat
    Par abdel_java dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2014, 16h18
  2. compréhension résultat fonction
    Par omelhor dans le forum Langage
    Réponses: 7
    Dernier message: 13/09/2012, 19h04
  3. Souci de compréhension du résultat
    Par Eclipse39 dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2009, 23h58
  4. [MASM32] Je veux faire une dll "résultat = cos (degrés)"
    Par papiX dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 07/04/2007, 16h34
  5. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo