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

Autres éditeurs Discussion :

Inserer de l'assembleur en c avec le compilateur gcc


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut Inserer de l'assembleur en c avec le compilateur gcc
    Salut a tous,
    j'utilise gcc pour compiler mes programmes en c.
    J'ai besoin d'inserer dans mon code une portion de 3 instructions en asm
    ; malgrès des recherches sur le sujet je n'ai pas trouvé de renseignements valables.
    Quelqu'un possède t-il des informations "justes" à ce sujet.?
    Merci !

  2. #2
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    asm
    {
         ... //ton code en assembleur
    }
    mais c'est du C++. Par contre ça passe avec GCC normalement. Donc en fait ton programme sera du C contenant 5 lignes de C++, ce qui n'est pas très grave.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par Metal Tom
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    asm
    {
         ... //ton code en assembleur
    }
    mais c'est du C++. Par contre ça passe avec GCC normalement. Donc en fait ton programme sera du C contenant 5 lignes de C++, ce qui n'est pas très grave.
    Merci d'avoir fourni une réponse. Néanmoins cela ne répond pas à mon problème.
    D'une part parce que ca ne compile pas
    et d'autre part parce que je ne peux pas mettre de C++ dans un code C certifié ANSI.
    Merci tout de meme d'avoir répondu mais c'était pas bon cette fois ci!
    A bientoot

  4. #4
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    C'est sûr que c'est pas du ANSI. Mais je me disais comme tu compilais avec GCC... Tan pis
    Ce que tu peux essayer de faire c'est de modifier les fichiers .o avant le linkage mais c'est pas gagné.

  5. #5
    Membre chevronné
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Par défaut
    Vous devez créer une fonction en assembleur, la compiler avec un assembleur (NASM, TASM...), la mettre dans une librairie statique, puis créer un fichier d'en-tête pour cette librairie, et enfin utiliser cette fonction tout simplement (ouf...).

    Bonne chance...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par rolkA
    Vous devez créer une fonction en assembleur, la compiler avec un assembleur (NASM, TASM...), la mettre dans une librairie statique, puis créer un fichier d'en-tête pour cette librairie, et enfin utiliser cette fonction tout simplement (ouf...).
    Je suis plutot interessé par cette solution qui peut etre pratique mais j'ai déposé un message sur le forum assembleur pour que quelqu'un me donne une source simple compilable par nasm !

  7. #7
    HRS
    HRS est déconnecté
    Membre chevronné
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Par défaut
    il me semble que le Mingw (gcc windows) comporte un compilateur assembleur as.exe sous \bin

    donc je suppose qu'il faut procéder en 2 étapes

    créer un monprogassembleur.o à partir du source assembleur

    puis édition de liens avec un source cpp

    g++ -otiti titi.cpp monprogassembleur.o

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    effectivement ca doit fonctionner avec l'assembleur fourni avec gcc a savoir as.
    Meric de vos renseignements.
    Pour info j'ai lu de la doc qui indiquait que gcc traitait différement les routines asm insérées dans le code par rapport aux autres compilateurs (utilisation des registres de facon différente, opértation différente ...)
    A bientot

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    J'ai trouvé solution a mon probleme dans un autre post et peut etre que cela aidera d'autres personnes
    Citation Envoyé par HW
    L'assembleur inline de gcc respecte la syntaxe AT&T.
    http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
    C'est donc grace a cette syntaxe qu'on peut incorporer de l'assembleur en gcc

  10. #10
    Membre Expert

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Par défaut
    Pour les fénéasses, y'a un programme de traduction syntaxe Intel -> AT&T :
    ftp://ftp.delorie.com/pub/djgpp/contrib/ta2asv08.zip

    Voir la question sur dans la FAQ DJGPP :
    http://www.delorie.com/djgpp/v2faq/faq17_2.html

    En gros la syntaxe AT&T :
    - Les registres sont précédés de '%' : ax -> %ax
    - Les nombres sont précédés de '$' : 1 -> $1
    - On inverse les paramètres par rapport à la syntaxe Intel : mox ax,1 -> mov 1, ax ... enfin movw %ax, $1 pour être exact
    - Les fonctions gagnent un suffixe (taille pour machine 16 bits/32bits) :
    o b pour BYTE (8 bits)
    o w pour WORD (16 bits)
    o l pour LONG (32 bits)

    Après GCC autorise des trucs marrants comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      unsigned long freq_32bits;
      asm ("incl %%eax" : "=a" (freq_32bits) );
    => freq_32bits contient alors eax+1, "=a" signifit "sauve la valeur de [E]AX dans la variable signalé entre parenthèse ... enfin, mieux vaut lire la doc de GCC.
    http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Extended-Asm.html#Extended%20Asm

    @+ Haypo

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

Discussions similaires

  1. Problème avec le compilateur gcc
    Par aminos40 dans le forum Debian
    Réponses: 2
    Dernier message: 17/04/2009, 15h59
  2. Réponses: 5
    Dernier message: 09/06/2008, 13h07
  3. [KUBUNTU] Problème avec le compilateur GCC
    Par benjamin1985 dans le forum Ubuntu
    Réponses: 14
    Dernier message: 02/05/2007, 10h18
  4. [KUBUNTU] Problème avec le compilateur gcc
    Par kitsune dans le forum Ubuntu
    Réponses: 3
    Dernier message: 13/02/2006, 13h44
  5. Comment insérer le résultat d'une commande avec vim
    Par zelda dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 28/12/2005, 09h32

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