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

x86 32-bits / 64-bits Assembleur Discussion :

Accéder aux ports de l'ordinateur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Inactif
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Accéder aux ports de l'ordinateur
    Bonjour,
    je voudrais savoir comment on peut accéder et communiquer avec les ports (série, parallèle, USB, ....etc) de l'ordinateur avec le language assembleur.

    merci d'avance...

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    Pour faire tout ça,on utilise les drivers,voir le DDK (Drivers devellopement Kit) chez MSN.
    Si on veut simplement les utiliser,quelques API suffisent.

  3. #3
    Inactif
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    merci pour votre réponse , mais où je peut trouver de la documentation sur la DDK et les API

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut USB ?
    Pour accéder aux ports RS, IEEE, // c'est simple, ou pas selon que vous êtes sous XP, sous W2000 ou avec d'autres systèmes.
    Dans le meilleur des cas (c'est-à-dire pas sous XP) l'espace d'E/S n'est pas dans un segment inaccessible et il suffit d'écrire ou de lire le port du composant ; bien sur pour faire des "trucs" exotiques il faut disposer des "data sheet" mais sinon c'est facile.
    Dans le cas de XP (de MAC OS et de certains LINUX) c'est nettement plus tordu, ou alors pour XP il faut utiliser "impout.dll" avec la limitation de la milliseconde.

    Dites-nous en plus, peut être quelqu'un aura votre solution.

    Pour USB cela devient nettement plus complexe, à cause de l'imbrication logiciel/matériel de la norme ; je suis justement entrain de travailler sur ce problème pour mon mini système d'exploitation personnel qui me sert dans des automates.

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    Si c'est un probleme de doc,içi

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut Re:
    Citation Envoyé par ToutEnMasm Voir le message
    Pour faire tout ça,on utilise les drivers,voir le DDK (Drivers devellopement Kit)
    La programmation de drivers sous Windows XP se fait en C et non en assembleur, en utilisant le DDK (Il y a aussi le WDK, Windows Driver Kit, qui est un sur ensemble du DDK c'est-à-dire un DDK plus complet ...).

    DDK

    Pour une simple histoire d'E/S sur les ports on préferera utiliser des outils déjà existants, comme Inpout32.dll par exemple, qui peut être utilisé avec C, C++ ou VB ...

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    je cite
    La programmation de drivers sous Windows XP se fait en C et non en assembleur
    Belle ignorance

    Driver en assembleur

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Un pilote s'écrit aussi bien en C (++) qu'en assembleur, encore que dans certains cas critiques de gestion de temps l'assembleur reste irremplaçable.
    Pour ce qui est des DLL (par exemple inpout.dll que je citais dans mon dernier message) je ne vois vraiment pas pourquoi elle ne seraient accessibles qu'en C !
    Chacun sait que les compilateurs C ne sont généralement que des transcripteurs vers de l'assembleur (assemblé ensuite durant le processus)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut bis repetita placent...
    je n'avais pas vu le lien en bas du dernier message de "toutEnMasm" c'est net et sans appel.

  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par ToutEnMasm Voir le message
    je cite


    Belle ignorance

    Driver en assembleur
    Non! Non! Non! Si t'as déja pris la peine de lire la doc du DDK, c'est bien écrit, pour les gens qui savent lire (et qui ont le DDK!), qu'un driver pour Windows NT se programme en C et uniquement en C, en utilisant le DDK. Cependant, rien ne peut empêcher le fait qu'il peut y avoir d'autres solutions "clandestines", incomplètes, sans garantis ...

  11. #11
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Stabia Voir le message
    Pour ce qui est des DLL (par exemple inpout.dll que je citais dans mon dernier message) je ne vois vraiment pas pourquoi elle ne seraient accessibles qu'en C !
    ...
    Citation Envoyé par Melem
    Pour une simple histoire d'E/S sur les ports on préferera utiliser des outils déjà existants, comme Inpout32.dll par exemple, qui peut être utilisé avec C, C++ ou VB ...
    Le rôle de la DLL est de tout simplement fournir une interface de communication avec le pilote, ce n'est pas elle le pilote.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Ni "ToutEnMasm" ni moi ne confondons DLL et pilote, nous cherchons simplement à répondre à la question posée.
    Malgré sa lenteur "inpout32.dll" est souvent suffisante, le DDK à effectivement des solutions de "remplacement" plus ou moins simples et fiables.
    Sinon il reste aussi quelques méthodes pour se retrouver en "ring 0" ...
    Autre possibilité le simple appel suivant (ici en C) :
    rs = CreateFile(periph, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL); //FILE_FLAG_OVERLAPPED

  13. #13
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Stabia
    Sinon il reste aussi quelques méthodes pour se retrouver en "ring 0" ...
    ... avec l'aide d'un driver qui, lui, tourne en ring0.
    Autre possibilité le simple appel suivant (ici en C) :
    s = CreateFile(periph, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL); //FILE_FLAG_OVERLAPPED
    ... ce qui va envoyer le code IRP_MJ_CREATE au driver associé au périphérique (dont le nom, periph, est lui même une "invention" du driver). Si aucun driver n'a déjà été chargé, l'appel va tout simplement échouer. Sinon (sauf pour quelques rares exceptions comme dans le cas d'une communication série avec un modem), il faut maintenant savoir comment communiquer avec le driver ...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut je ne sais rien mais je m'en-tête
    Je faisais allusion à quelques méthodes utilisant certaines portions de code NT qui sont accessibles en lecture pour indirectement changer un vecteur (division par 0 par exemple), puis par ce biais se retrouver tranquillement en "ring 0".
    Quand à mon exemple en C il suffit de mettre "COM3" dans "periph" pour accéder au port RS 3[4], il est inutile qu'il ait un pilote chargé (autre que celui standard); maintenant si le périphérique est "intelligent" alors bien sur il faut une interface avec lui.
    Encore que ...

  15. #15
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    bon pour acceder aux ports d'es, il faut connaitre leurs addresses, ici ça parle d'asm ou de DDK?

    une fois que tu as l'addresse, chargée dans dx, tu fait des:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov al,octet_que_tu_veux
    out dx,al
    un exemple tout simple pour ecrire le port parralelle, pour en voire le resultat, il te faut 8 leds et huit resistances, ces huits leds ( diodes electroluminescentes ) vont etres connectés aux broches 2,3,4,5,6,7,8,9 et les masses qui sont à l'opposé..
    et ça marche, ne pas oublier les resistances, sinon, les leds vont faire la tronche..
    sinon, cet exemple affiche des trucs a l'ecran, ce qui est censé etre en sortie du port LPT1

    a la base, ce programme etait pour les 68HC11 et les 6809, comme quoi , le portage est possible, il suffit de connaitre l'assembleur
    Fichiers attachés Fichiers attachés

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut un peu lire avant de répondre ...
    l'adresse des ports est standard et de toutes façon accessible (segment 0x40 du BIOS) mais connaître l'adresse ne sert à rien sur la plupart des S.E. puisque le segment d'E/S est inaccessible en 'ring 3'.
    Pour le reste voire les remarques ci-dessus.

  17. #17
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    ouais exact, et pour plus de details tu charges helppc.com
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/06/2010, 11h24
  2. Entrées/sorties pour accéder aux ports USB
    Par midou1988 dans le forum Assembleur
    Réponses: 5
    Dernier message: 18/02/2009, 00h33
  3. Accéder aux I/O ports
    Par toto9998 dans le forum Windows
    Réponses: 6
    Dernier message: 24/02/2008, 04h45
  4. [USB] [JNI] Utiliser JNI pour accéder aux ports USB
    Par Javatator dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/10/2005, 06h40

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