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

MFC Discussion :

VC++, assembleur et instruction privilégiée


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut VC++, assembleur et instruction privilégiée
    Bonjour,

    Ayant besoin de lire le port parallèle sous VC++, j'ai écrit la fonction suivante :

    unsigned char inp(unsigned short adr)
    {
    __asm {
    xor eax,eax
    push edx
    mov dx,adr
    in al,dx
    pop edx
    }
    }

    Le système se plante sur "in al,dx" en me disant que c'est une instruction privilégiée. Comment résoudre ce problème ?

    Merci d'avance.

    Cordialement, Michel.

  2. #2
    mat.M
    Invité(e)
    Par défaut Re: VC++, assembleur et instruction privilégiée
    Citation Envoyé par Michel Devaud
    Bonjour,

    Ayant besoin de lire le port parallèle sous VC++, j'ai écrit la fonction suivante :

    unsigned char inp(unsigned short adr)
    {
    __asm {
    xor eax,eax
    push edx
    mov dx,adr
    in al,dx
    pop edx
    }
    }

    Le système se plante sur "in al,dx" en me disant que c'est une instruction privilégiée. Comment résoudre ce problème ?

    Merci d'avance.

    Cordialement, Michel.

    Bonjour,
    je répète à chaque fois les mêmes questions
    *quel type de projet ? Utiliser VC++ c'est très vague comme affirmation
    *les entrées sorties bas-niveau ne sont pas autorisées sous Win 32.
    Vous avez dû créer un projet en mode console c.a.d. affichage texte .
    Seulement le problème c'est qu'on ne peut pas faire de IN/OUT avec un programme en win 32 ( ce que je répète également plusieurs fois )
    Pour cela faire un Device Driver
    Sinon il ya peut-être des API spécifiques pour lire des données sur le port parallèle.

    www.msdn.microsoft.com/library/en-us/ devio/base/deviceiocontrol.asp
    www.msdn.microsoft.com/library/en-us/ fileio/base/createfile.asp

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut
    Bonjour

    Merci pour la réponse...

    ... mais

    "je répète à chaque fois les mêmes questions"
    Le chef de gare de Pézenas me disait dernièrement : ça fait trente ans que je dis aux voyageurs que le train pour Paris est quai B et ils ne le savent toujours pas.

    "quel type de projet ? Utiliser VC++ c'est très vague comme affirmation"
    Bof, une telle procédure en assembleur peut être utilisée dans tout type de projet et avec tout type d'environnement de développement.

    "les entrées sorties bas-niveau ne sont pas autorisées sous Win 32"
    "Seulement le problème c'est qu'on ne peut pas faire de IN/OUT avec un programme en win 32 ( ce que je répète également plusieurs fois )"
    Pourtant c'est ce que je voudrais faire.
    Pour le "plusieurs fois" revoir le chef de gare de Pézenas !

    "Pour cela faire un Device Driver"
    C'est justement ce que je veux faire !

    Donc, je répète ma question : comment faire des in / out sous windows ? Cela doit certainement être possible.

    Merci, cordialement, Michel.

  4. #4
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Bon 2 cas qui dépendent de la version de Windows :
    1- Windows 9x : ok
    2- NT ou + : impossible

    pour faire des in,out sous NT :
    passer par un driver kernel
    ou faire un VDD (qui passera de toute façons par un driver kernel)

  5. #5
    mat.M
    Invité(e)
    Par défaut
    "quel type de projet ? Utiliser VC++ c'est très vague comme affirmation"
    Bof, une telle procédure en assembleur peut être utilisée dans tout type de projet et avec tout type d'environnement de développement.
    Avec Visual C++ on peut faire plusieurs types de projets , win32 console ou fenêtré , application GUI avec MFC , projet ATL , création de dll......
    Affirmer "j'utilise Visual C++" demeure vague comme affirmation.

    "Pour cela faire un Device Driver"
    C'est justement ce que je veux faire !
    Il y a un forum "assembleur" qui me semble plus approprié pour cela.
    Sinon je doute fortement que tu obtiennes une réponse ici.

    Donc, je répète ma question : comment faire des in / out sous windows ? Cela doit certainement être possible.
    J'ai déjà donnés des éléments de réponse ainsi que "fd" : faire des Device Drivers avec le Device Driver Kit sinon utiliser des API spécifiques pour lire/écrire des données sur des ports spécifiques comme j'ai indiqué précedemment

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut Pb résolu
    Bonjour,

    Le problème a été résolu en utilisant le driver PortTalk disponible sur le net.

    Cordialement,

    Michel

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/03/2013, 23h41
  2. Quelques instructions dangereuses en Assembleur
    Par bouazza92 dans le forum Assembleur
    Réponses: 30
    Dernier message: 18/08/2006, 22h43
  3. [Assembleur 390] Instruction NC et TR
    Par Admin dans le forum Autres architectures
    Réponses: 7
    Dernier message: 24/12/2004, 14h16
  4. Exception 'instruction privilégiée' avec TDLPort
    Par jphi5 dans le forum C++Builder
    Réponses: 21
    Dernier message: 11/11/2003, 16h40

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