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

 C Discussion :

assembleur inclu gcc


Sujet :

C

  1. #1
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut assembleur inclu gcc
    Bonjour à tous,

    gcc -mno-cygwin -fno-asm -Wall -omyFirst.exe myFirst.c
    myFirst.c:12: warning: ignoring asm-specifier for non-static local variable 'x'
    myFirst.c:15: error: parse error before "MOV"
    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
    /* Jean Bernard Emond X86 2003 page 334 */
    /* Il a utilisé le Visual C++ */
     
    #include <stdio.h>
     
    void main(void){
    int x = 50;
     
    _asm {
    MOV EAX, x
    SHL EAX, 1
    }
     
    printf("x = %d\n", x);
    }
    J'ai essayé de défénir int x asm("x") = 50; ligne 12

    Je lis le livre, je lis la doc et je ne trouve pas comment encadrer l'asm.

    Cordialement,

    JPD
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Le fait est que... il est fortement déconseillé de placer du code assembleur dans du code C ou C++...

    D'abord parce que, contrairement aux idées reçues, cela n'accélère absoluement pas le traitement, et surtout pas lorsqu'il n'y a que deux instructions assembleur.

    Ensuite, bien que je ne fasse qu'émettre un avis strictement personnel sur le sujet, parce que l'assembleur est beaucoup plus difficile à comprendre et à relire que du code écrit dans un langage dit "de troisième génération" (je "connais" l'assembleur, mais il faut avouer que c'est difficile à comprendre )

    Enfin, et cela rejoint sans doute ton problème, parce que l'assembleur est souvent... "strictement réservé" une certaine quantité de choses, comme le compilateur, le processeur, j'en passe et de meilleures

    Marqué pas de bol pour toi, tu as décidé de changer de compilateur en chemin (bah, ouaip , le type a écrit son code avec VC++ et toi tu veux le compiler avec... gcc )

    Il se fait que les conventions utilisées pour indiquer au compilateur qu'il a affaire à du code assembleur sont différentes entre VC++ et Gcc

    *Sauf erreur* la convention d'appel d'instructions assembleur sous Gcc ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    asm (
    "MOV EAX, x"
    "SHL EAX, 1"
    );
    Remarque au passage qu'il s'agit de parenthèses, la présence de guillemets entourant les instructions et du point virgule finale...

    Malheureusement, les tests que j'ai fait chez moi m'ont royalement jeté car il existe trop de référence en mémoire pour mov, ce qui semble indiquer que EAX n'est pas une adresse valide
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bao,

    Pour inclure de l'assembleur dans un code C avec gcc, il faut utiliser la syntaxe AT&T, très différente de la syntaxe Intel que tu utilisais avec Visual C.

    Cette syntaxe AT&T est assez "lourde" à mon avis, mais on s'y fait, ne serait-ce que par obligation.

    "par obligation", ce qui implique pour ma part, que l'assembleur n'est a utiliser que pour ce que le compilateur ne sait pas faire, ce qui est assez rare, sauf dans certains domaines.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par koala01 Voir le message
    (...faut avouer que c'est difficile à comprendre )

    Marqué pas de bol pour toi, tu as décidé de changer de compilateur en chemin (bah, ouaip , le type a écrit son code avec VC++ et toi tu veux le compiler avec... gcc )
    Ouais.
    Mais l'assembleur, ça aide à comprendre le C, le java, etc. Entre autres les pointeurs.
    J'ai le dit compilateur Visual 9.0, plein de bugs le chemin des libs ne fonctionne pas, le chemin des dll non plus. La ligne de commande semble avoir des problème des path. Les !! de guillemets à mon avis. Le problème est connue de Soft et j'attends qu'on me réponde.

    D'abord parce que, contrairement aux idées reçues, cela n'accélère absoluement pas le traitement, et surtout pas lorsqu'il n'y a que deux instructions assembleur.
    ?? Ah! C'était quoi tout ce baratin?

    Pour ce qui est du bouton, je click et merci de ta sollicitude détachée :o)
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

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

Discussions similaires

  1. Assembleur et gcc
    Par rambc dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/10/2012, 19h35
  2. code assembleur et gcc
    Par Débutant_ASM dans le forum Linux
    Réponses: 2
    Dernier message: 17/03/2010, 21h02
  3. [boso kernel] Assembleur inline GCC - Undefined Reference
    Par Edouard Kaiser dans le forum Programmation d'OS
    Réponses: 13
    Dernier message: 29/07/2005, 09h24
  4. Une introduction à l'assembleur 80x86, 32 bits, GNU GCC
    Par pierre.jourlin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 04/04/2005, 17h34
  5. Inserer de l'assembleur en c avec le compilateur gcc
    Par KORTA dans le forum Autres éditeurs
    Réponses: 9
    Dernier message: 20/08/2003, 03h19

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