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 :

Quelles sont les instructions en assembleur valables sur Windows Seven


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Par défaut Quelles sont les instructions en assembleur valables sur Windows Seven
    Bonjour

    Je suis un débutant en programmation assembleur et je voudrais savoir quelles sont les instructions qui sont valables quand on programme en assembleur sur Windows car j'ai lu que les instructions DOS ne sont plus possibles
    Est(ce que je dois utilisés les isntrcutions du BIOS de mon ordinateur et si oui comment puis-je les connaître

    Mon processeur est un Intel i3 m370

    Merci de me donner un peu d'explication

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 504
    Par défaut
    Bonjour,

    Attention à ne pas mélanger les définitions : les « instructions assembleur » sont celles que ton micro-processeur propose. Elles seront les mêmes dans toutes les machines qui en sont équipées, même si elles n'ont rien à voir entre elles. Aujourd'hui, il est difficile de trouver une machine connue et équipée d'un x86 qui ne soit pas un PC, mais le 68000, par exemple, équipait les premiers Mac, les Atari ST, les Amiga, et bien d'autres…

    Ça ne signifie pas pour autant que les programmes écrits en assembleur étaient portables d'une plateforme à l'autre : toutes ces machines utilisaient le même moteur, mais s'utilisaient chacune d'une façon très spécifique.

    Maintenant, en effet, il va te falloir dialoguer avec le système d'exploitation en place. Et effectivement, les interruptions D.O.S. sont désormais obsolètes, et tu ne pourras pas utiliser celles du BIOS beaucoup plus loin qu'au boot. Et là encore, c'est vrai si tu disposes encore d'un BIOS. Si ta machine est trop récente et utilise l'UEFI, ce sera encore différent.

    Il n'y a pas de manière simple de le faire : l'API Windows de plus bas niveau est celle du C et c'est celle-là qu'il faudra exploiter depuis tes programmes en assembleur. Tu peux utiliser la macro INVOKE pour construire des appels de fonctions propres sans avoir à tout empiler à la main.

    Tu peux également, dans un premier temps, écrire de l'assembleur inline au sein d'un programme C (ou autre langage offrant cette possibilité) pour éviter d'avoir à tout écrire toi-même. Tu peux enfin écrire un programme et le compiler en fichier objet que tu lieras avec le reste de ton programme.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Par défaut
    en fait, j'utilise masm qui a une librairie pour windows mais comme je l'ai dit dans mon autre question, je ne sais pas les interruptions qui sont autorisées dans le code.

    interruptions et instructions sont synonymes , non?

    je ne suis pas très sûr !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 504
    Par défaut
    Citation Envoyé par ShinobiX1 Voir le message
    interruptions et instructions sont synonymes , non?
    Absolument pas. (je suis incisif sur ce point car c'est une erreur aussi fréquente que compréhensible).

    Les instructions assembleur sont celles qui sont proposées par ton micro-processeur, indépendant de tout système d'exploitation et même de la machine dans lequel il est installé.

    Une interruption logicielle est une instruction (« INT » sur x86) qui met artificiellement le micro-processeur en état d'interruption, comme s'il avait été déclenché par une interruption matérielle, c'est-à-dire une IRQ. Le fait que l'on recoure massivement, sous D.O.S., aux interruptions pour implémenter les appels système est dû à plusieurs raisons :

    • Les codes-opération interruptions logicielles sont extrêmement concises en mémoire (seulement deux octets) et plus un appel est fréquent dans un programme, plus il gagne à être concis. Ils sont également plus rapide à l'interprétation mais ce gain est plus qu'annulé par le coût induit par l'empilement de certains registres et le changement des flags.
    • Ils permettent de s'affranchir des spécificités de l'implantation en mémoire du système : tu n'as pas à spécifier une adresse précise pour faire un appel système. Cela permet une grande souplesse dans l'évolution du système d'exploitation tout en conservant la compatibilité. En théorie, tu pourrais même porter ton système sur une machine distincte (mais toujours au même processeur) et pouvoir directement exécuter les programmes dessus sans avoir à les recompiler. En théorie seulement, parce qu'il faut que ces programmes utilisent exclusivement la programmation système et que les ressources utilisées par l'O.S. lui-même soient disponibles sur la machine cible ;
    • En mode protégé, elles sont devenues une bénédiction puisqu'elles permettent à la fois d'accéder à un segment de mémoire qui n'est pas visible depuis le programme utilisateur et de changer automatiquement de privilège, conditions nécessaires pour pouvoir honorer les IRQ et interruptions ordinaires ;
    • Dans le même esprit, cela ne sert à rien d'utiliser des dizaines d'interruptions différentes s'il faut quand même leur passer des paramètres dans des registres et, de toutes façons, rares sont les micro-processeurs à proposer 256 interruptions logicielles différentes comme les 80x86. En général, il n'y a en qu'une poignée. Mais une seule suffit : l'INT 80h (128 en décimal) sert officiellement à faire des appels système et est utilisée aujourd'hui, par Linux entre autres.


    Tout ceci a donc conduit à faire grand usage des interruptions par le BIOS puis, par mimétisme, par le D.O.S. et sa fameuse INT 21h. Du coup, toutes les routines qui ne relevaient pas du programme proprement dit étaient appelées via des interruptions et on a fini par faire l'amalgame.

    Ceci étant dit, les interruptions D.O.S. et B.I.O.S. ont été conçues en 16 bits et nous sommes à l'époque du 64 bits. Le D.O.S. était utilisé nativement jusqu'à Windows 3.11. À partir de Windows 95 (il y a 18 ans tout de même), on est passé au mode protégé et au flat mode, ce qui d'une part rendait leur appel impossible mais ne correspondait à rien non plus puisqu'il s'agissait d'un autre système. Les appels des programmes DOS étaient interceptés et émulés par le système.

    Aujourd'hui, non seulement les dernières versions de Windows ont cessé d'émuler le D.O.S. mais le B.I.O.S. lui-même est en train d'être remplacé par l'UEFI.

    Pour faire de la programmation système aujourd'hui, tu peux appeler les primitives via l'INT 80h mais la majorité de l'exploitation se fait via les fonctions des bibliothèques liées à ton programme et qui, elles, sont majoritairement écrites en C et s'appellent avec un CALL ordinaire après avoir passé les paramètres dans la pile ou parfois directement dans certains registres.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Par défaut
    ça me parait bien compliqué mais je vais tacher de bien comprendre

    si je comprends bien, les instructions sont les mov, sub, div, ret ~~ de l'assembleur et les interruptions sont des programmes du système d'exploitation appelés par l'instruction "int" ?

    Si les librairies sont écrites en c, je ne peux donc pas les utiliser avec un compilateur d'assembleur comme Masm?

    Je voudrais savoir s'il est possible de faire de la programmation windows via les autres assembleurs comme fasm et nasm , et si oui, comment pourrais-je obtenir les librairies pour ces derniers?

    merci

Discussions similaires

  1. Quelles sont les situations qui agacent le plus les internautes sur mobile ?
    Par Stéphane le calme dans le forum Actualités
    Réponses: 42
    Dernier message: 27/06/2014, 14h13
  2. Réponses: 4
    Dernier message: 14/10/2009, 08h38
  3. Réponses: 0
    Dernier message: 26/06/2009, 11h18
  4. Réponses: 1
    Dernier message: 31/10/2008, 14h32

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