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

Langage C++ Discussion :

Erreur de compilation code ASM inclut dans C++ avec MASM


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Erreur de compilation code ASM inclut dans C++ avec MASM
    Bonjour,

    voici un pièce de code que j'ai récupérer du forum pour compléter mon système . tous marche bien à part 2 erreur que j'ai pas résoudre (je mis les emplacement en gras

    __asm
    {
    pushfd
    pop eax // Copy EFLAGS into EAX.
    mov ebx,eax // Then make a backup copy in EBX.
    xor eax,0x00200000 // Flip bit 21.
    push eax
    popfd // Copy the modified EAX back to EFLAGS.

    pushfd
    pop eax // Copy EFLAGS into EAX again.

    push ebx
    popf // Reset EFLAGS to what it was before all this pushing & popping...

    cmp eax, ebx // Compare EAX & EBX to see if bit 21 is still changed.
    jz cpuid_not_supported // If the flag wasn't changed, jump to end of this function.
    }
    et

    /////////////////////////////////////////////////////////////////////
    // cpuid_00h()
    /////////////////////////////////////////////////////////////////////
    bool
    CCPUIDInfo::cpuid_00h()
    {
    ////////////////////////////////////
    // Pass 0x00 to cpuid.
    // Get the Processor Vendor ID.
    char* pszName = m_ProcessorName; // Get a pointer to ProcessorName.
    char *exclam ="Valeur maximale reconnue est :";
    char data;
    char* datap;
    unsigned int EAXBuf = 0;

    __asm
    {
    mov eax, 0; // Get Processor Vendor ID.
    CPUID ;
    mov EAXBuf, eax ; // This holds the highest value we can pass to cpuid.
    mov di, pszName ; // Copy Processor Vendor ID into buf.
    mov [edi], bx ;
    mov [edi+4], dx ;
    mov [edi+8], cx ;
    }

    m_HighestInputValue = AXBuf;
    data=(char)m_HighestInputValue ;

    datap=&data;
    #ifdef _DEBUG
    CDisplay::TextOut (exclam ,0,5, BLACK,WHITE,false);
    CDisplay::TextOut (datap ,CString::Strlen(exclam),5, BLACK,GREEN,false);
    #endif // _DEBUG

    pszName[ 12 ] = '\0'; // Terminate the string.
    return true;
    }
    j'ai compilé sous c/c++ masm avec les option suivantes :
    CL.EXE /AT /Ge /Gx /c /Zl
    ML.EXE /AT /c
    LINK.EXE /T

    je rapelle
    CL.EXE --> microsoft c/c++ compiler version 8
    ML -->masm v8
    LINk.EXE --> microsoft incremental linker

    je reçois les erreurs suivants :

    error c2415 : improper operand type
    error c2400 : inline syntax error in 'opcode' ;found newline

    quelqu'un à une idée ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 469
    Par défaut
    Difficile à dire mais, à vue de nez, je propose deux choses :

    — Le compilateur est peut-être configuré par défaut pour utiliser une version trop ancienne des x86 (genre 386 au lieu de 686) dans laquelle l'instruction CPUID n'existerait pas encore, mais ça n'empêcherait pas l'autre instruction de compiler…
    — Le même compilateur doit avoir des problème avec les commentaires en bout de ligne. Le « // » est un lexon valide en C++ et C99, mais pas en assembleur. Il faudrait que tu termines toutes tes instructions avec « ; » avant d'écrire un commentaire, y compris celle qui précèdent celles qui posent problème. C'est le cas à certains endroits mais pas partout.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    mise à jour :
    j'ai corrigé l'érreur c2415 mais ,je reçois encore l'erreur c2400 au niveau de l'instruction CPUID ( inline syntax error in 'opcode',found new line ) .

    @obsidian : comment rendre le compilateur prend en charge l'instruction cpuid .
    ce compilateur je l'ai récupérer sur un site voici quelques informations : date 14/09/1994 microsoft c/c++ optimizing compiler v 8.00c --> peut etre il y a un problème ?? .et comment le résoudre ,obtenir peut etre une nouvelle édition ??

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 469
    Par défaut
    Citation Envoyé par b52x_med;6822412@obsidian : comment rendre le compilateur prend en charge l'instruction cpuid .ce compilateur je l'ai récupérer sur un site voici quelques informations : date [B
    14/09/1994[/B] microsoft c/c++ optimizing compiler v 8.00c --> peut etre il y a un problème ?? .et comment le résoudre ,obtenir peut etre une nouvelle édition ??
    Ça vaudrait mieux, oui. C'est une excellente chose d'avoir trouvé et relevé la date d'édition de ton compilo mais tu te rends compte que 1994, c'était il y a 18 ans ?

    CPUID est apparue avec le Pentium. Wikipédia affirme qu'Intel a présenté son instruction CPUID en 1993 mais c'est le moment où elle venait tout juste de naître. Ton compilateur la connaît peut-être quand même mais il y a de fortes chances pour qu'elle n'ait pas été encore prise en charge à cette époque, et il y a encore plus de chances pour que ton compilateur produise du i386 par défaut (on n'en était même pas encore au i686 à ce stade).

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Koa,

    Il est un fait qu'un compilateur de 1994 fait figure de dinosaure.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je te recommande chaudement d'utiliser le compilateur le plus récent possible. Cela permet d'avoir plus d'optimisations et de fonctionnalités, et en conséquences, moins de problèmes.

Discussions similaires

  1. Erreur sur compilation codes de schémas électriques
    Par floyd973 dans le forum Erreurs - Avertissements
    Réponses: 10
    Dernier message: 19/08/2014, 19h23
  2. Erreur sur compilation codes de schémas électriques
    Par floyd973 dans le forum Mathématiques - Sciences
    Réponses: 4
    Dernier message: 14/08/2014, 21h35
  3. [XL-2007] Erreur logique: compilation Code VBA
    Par arthur_as dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/09/2012, 16h09
  4. Package listings, erreur de compilation. Code trop long ?
    Par Cpowa dans le forum Erreurs - Avertissements
    Réponses: 15
    Dernier message: 23/04/2012, 13h29
  5. Erreur de compilation de winsock.h dans VC++2005
    Par Jakariba dans le forum MFC
    Réponses: 3
    Dernier message: 24/05/2006, 15h54

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