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 :

Insérer de l'assembleur


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut Insérer de l'assembleur
    Bonjour,
    J'ai un problème. Je voudrai insérer des fonctions avec Dev C++ dans un programme en C pour lire et écrire sur des ports. Sachant que sous Dev C++, on est obligé de recourir à l'assembleur(avec la convention AT&T), j'ai essayé de programmer ces fonctions. Mais le problème c'est qu'à chaque fois, le compilateur me signale une erreur de compilation: suffixe or operands invalid for 'in' et 'mov'. En fait, j'ai trop du mal avec la syntaxe de l'assembleur AT&T.
    Quelqu'un peut-il m'aider car je ne suis pas vraiment un pro en programmation?

    Voici le code:

    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
    unsigned char lire_port(unsigned short adressereg)
    {        
      unsigned char result;       
      asm("movw $adressereg, %bx");           
      asm("inw %bx, %ax");
      asm ("movw %ax, $result");
      return result;
    }
     
    void ecrire_port(unsigned short adressereg2, unsigned char valeur)
    {
      asm("movw $adressereg2, %dx");
      asm("movw $valeur, %ax");
      asm("outw %ax, %dx");
    }

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut,

    2 petites remarques

    1) Utilise la balise code pour présenter ton code.
    2) Si tu travailles sur un Windows "récent", les entrées/sorties sont interdites je pense. Il faut passer par un dll

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    Merci de me répondre.
    Mais je ne suis pas un pro en info.
    Les entrées sorties sont interdites sous XP? et sous Windows 98?
    C'est quoi un dll?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Je confirme, sous XP, tu pourra pas faire d'E/S, mais ca passe sous 98.

    Sinon pour ce qui est de ces fonctions, elle existent deja dans un include genre bios.h ou dos.h (je ne suis plus sur j'ai pas ca sous la main), et son deja programmée en assembleur, donc assez inutile de te prendre la tete.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    Merci pour ton aide.
    Si tu as plus d'infos sur ces include bios.h ou dos.h ton aide est la bienvenue.

  6. #6
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    dos.h n'est pas disponible sur les Windows récent (ou alors seulement fourni avec TurboC, qque chose du genre).

    Pour faire des entrées/sorties sous Windows, utilise la bibliothèque Inpout32.dll

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Et cette DLL ne peut être installée que par un administrateur, car elle passe par un driver.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    Peut-on utiliser la bibliothèque inpout32.dll avec Dev C++ et comment on fait pour l'installer et l'utiliser?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Si j'ai bien compris, pour l'installer il suffit d'exécuter une fois en Admin un programme qui l'utilise.
    Pour s'en servir, ben... C'est comme pour toute autre DLL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    écoute je suis pas un pro comme toi donc s'il te plait tu pourrai être plus clair. Tu installe inpout32.dll puis comment tu l'utilise dans ton programme, tu mets #include inpout32.dll?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Salut !!!!!
    ( a mon avis il a besoin de coder pour faire fonctionner un composant électronique)
    Je te conseil de travailler autrement.
    Par expérience, il te faut scinder tes sources.

    Tu devrait travailler avec une source en C et l'autre en assambleur. Et faire des va et vien de l'une à l'autre si il y à besoin, mais ne mélange pas les deux.

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Pas de #include.
    Et bizarrement, il n'y a pas de .h fourni avec. Pas normal...

    Si j'ai bien compris, avec gcc, tu peux utiliser une DLL si tu as les prototypes et la DLL elle-même.
    Les prototypes sont fournis dans le zip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* ----Prototypes of Inp and Outp--- */
     
    short _stdcall Inp32(short PortAddress);
    void _stdcall Out32(short PortAddress, short data);
     
    /*--------------------------------*/
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    est ce qu'on peut utiliser inpout32.dll avec Dev C++ car quand je compile il m'affiche toujours undefined reference to out32 même si j'ai mis les prototypes.
    Est ce qu'il faut inclure tous les fichiers de la bibliothèque inpout32 au début du programme?

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Il faut ajouter la bibliothèque aux options d'édition de liens (si j'ai bien compris, sous MinGW tu peux directement ajouter la DLL aux options du linker et ça passe).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. comment insérer du code assembleur
    Par blueLight dans le forum C++
    Réponses: 16
    Dernier message: 13/02/2008, 09h24
  2. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 19h14
  3. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25
  4. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 10h59

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