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 :

Assembleur, nombre à virgule flottante et Visual Express 2008


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut Assembleur, nombre à virgule flottante et Visual Express 2008
    Bonjour à tous.

    Dans le cadre de mes cours, nous avons toujours Visual Express 2008 pour coder en assembleur x86. (surtout pour l'utilité du débogueur, il est vrai). Chaque travail que nous devons effectuer dois être fait ainsi et compiler sous Visual Express 2008.

    Dans le cadre d'un projet, je dois réaliser une calculatrice gérant les nombres à virgules flottantes.
    Pour appréhender la bête, et comprendre le fonctionnement, je commence par un code de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        float a;
     
        _asm{
            MOV EAX,0x41560000
            FLD EAX
            FST [a]
        }
    Le hic, c'est que quand je compile, je reçoit une erreur : " Type d'opérande incorrect" à la ligne du FLD.
    Je change un peux le code.. Et me rends compte que les répertoires et les mnémoniques spécifique au coprocesseur mathématique ne sont pas pris en charge.

    Pourtant, lorsque je fais un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        float a;
        float b;
     
        a = 10,750;
        b = 10,750;
     
        a = a + b;
    Le programme compile correctement et quand je regarde le code machine généré, les mnémoniques du coprocesseur sont bel et bien utilisé... !

    Je suppose dès lors que le problème pourrait venir du fait que le coprocesseur mathématique ne soit pas pris en charge par Visual Express quand on utilise l'instruction _asm{}.
    Seul hic, je ne trouve aucune information à ce sujet..

    Je me tourne vers vous du coup... Auriez-vous une petite idée de la manière dont je pourrais remédier à ceci ?

    Bien à vous,

    archMqx.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour,

    Attention : il faut écrire « a = 10.750; » (avec un point) et pas « a = 10,750; » (avec une virgule), car la deuxième expression est valide et compilera sans erreur, mais ne fera absolument pas ce que tu crois.

    Pour le reste, que se passe-t-il lorsque tu places « FLD » en première position (avant MOV) ?

  3. #3
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    fld n'accèpte pas les registre généraux comme opérande donc "fld eax" ne pourrat fonctionner, il faut uttiliser soit une adresse mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fld dword[adresse]  ;pour un nombre flottant de 32bits
    fld qword[adresse] ;pour un nombre flottant de 64bits
    fld tword[adresse]  ;pour un nomre flottant de 80bits
    on peut aussi fair fld avec un registre de la pile de l'unité arithmétique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fld st0 ;pour charger le premier nombre flottant de la pile
    je ne sais pas si visual Expresse 2008 accepte ces notation mais fasm oui

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonjour,

    Attention : il faut écrire « a = 10.750; » (avec un point) et pas « a = 10,750; » (avec une virgule), car la deuxième expression est valide et compilera sans erreur, mais ne fera absolument pas ce que tu crois.

    Pour le reste, que se passe-t-il lorsque tu places « FLD » en première position (avant MOV) ?
    Merci pour cette remarque. Il est vrai que j'ai fait cette petite erreur d'inatention, merci à toi !

    Citation Envoyé par bifur Voir le message
    fld n'accèpte pas les registre généraux comme opérande donc "fld eax" ne pourrat fonctionner, il faut uttiliser soit une adresse mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fld dword[adresse]  ;pour un nombre flottant de 32bits
    fld qword[adresse] ;pour un nombre flottant de 64bits
    fld tword[adresse]  ;pour un nomre flottant de 80bits
    on peut aussi fair fld avec un registre de la pile de l'unité arithmétique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fld st0 ;pour charger le premier nombre flottant de la pile
    je ne sais pas si visual Expresse 2008 accepte ces notation mais fasm oui
    Merci !
    C'était effectivement sur ce point que cela bloquait... Le fait de ne pas utiliser une adresse mémoire mais en registre me faisait mettre mon erreur.
    Par contre, je n'ai toujours pas accès aux registres propre du coprocesseur... Tout ce qui est ST0, ST1, ... ne sont renseigné.
    J'ai du faire sans.

    Merci beaucoup pour vos deux réponses, ils m'ont été d'une très grande aide !

    archMqx.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/05/2021, 15h33
  2. Nombres à virgule flottante
    Par visiwi dans le forum Scheme
    Réponses: 6
    Dernier message: 19/06/2008, 16h46
  3. nombre à virgule flottante
    Par new_wave dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2008, 11h16
  4. Réponses: 3
    Dernier message: 01/08/2007, 12h49

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