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 16-bits Assembleur Discussion :

Directives .186 .286 .MODEL


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 35
    Points
    35
    Par défaut Directives .186 .286 .MODEL
    Bonjour,

    j'ai quelques difficultés à la recherche de la bonne sytaxe dans un fichier .asm .

    Premièrement , la première ligne serait ".286" ou ".386" ... pour déterminer le modèle de la CPU. Alors, comme, moi, je veux me limiter au 8086, j'étais obligé d'écrire ".186" pour que le compilo accepte de passer, est ce que j'ai raison ?

    Deuxiémement, la directive suivante ".MODEL ......."

    Pour le .386 on écrit ".MODEL flat, stdcall" mais ça ne passe pas avec le .186
    et quand j'écrit ".MODEL" sans rien ajouter alors, j'obtiens le message d"erreur suivant : "expected : memory model".

    comment m'y prendre ?

    Merci beaucoup.

    Je suis tombé par terre
    le faute à Voltaire
    le nez dans le ruisseau
    la faute à Rousseau

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par Gavroche7 Voir le message
    premièrement , la première ligne serait ".286" ou ".386" ... pour déterminer le model de la CPU
    Exact.

    alors comme moi je veux me limiter au 8086 , j'étais obligé d'écrire ".186" pour que le compilo accepte de passer , est ce que j'ai raison ?
    Oui, la directive CPU la plus basse est bien ".186".

    Ceci dit, le 8086 est sortit il y a 30 ans et je ne comprends pas pour quel raison, autre que historique, tu voudrais écrire du code pour un processeur aussi vieux. 30 ans en informatique, c'est la préhistoire.


    deuxiémement, la directive suivante ".MODEL ......."
    pour le .386 on écrit ".MODEL flat, stdcall" mais ça ne passe pas avec le .186
    et quand j'écrir ".MODEL" sans rien ajouter alors, j'obtiens le message d"erreur suivant : "expected : memory model".
    Pour un processeur aussi vieux il ne faut pas s'attendre à des miracles. Pas de mode protégé, donc pas de modèle mémoire plat.

    Le mode protégé a été introduit avec le 286 (processeur 16 bits) mais il ne supportait pas le modèle mémoire plat. Il a fallut attendre le 386 (32 bits) pour avoir un processeur supportant tout ça.

    Ceci dit, FLAT et STDCALL ne sont pas les seules options du modèle mémoire.

    Directive .MODEL sur la MSDN :

    http://msdn2.microsoft.com/en-us/library/ss9fh0d6.aspx

  3. #3
    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
    Salut,
    alors comme moi je veux me limiter au 8086 , j'étais obligé d'écrire ".186" pour que le compilo accepte de passer
    Cela dépend du matériel.J'ai quelques doutes sur l'existence de ces micros.Les poubelles informatiques ne sont pas trop délaissées et ça doit être dur d'en trouver.
    Pourquoi se limiter ?.Pour apprendre de vieilles choses exigeant moulte labeur alors que l'assembleur actuel est plus performant dans son écriture et moins laborieux ???.
    Des tutoriaux sur masm32 existent,des tutoriaux sur le 8086 doivent bien se trouver dans coin bien compacter pour tenir moins de place ...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 35
    Points
    35
    Par défaut
    Seulement c'est que moi je ne suis informaticien , je suis plutot électronicien, option control, à l'instit il nous a fallu apprendre tout ce qui est 8086 dans un délai de 30 jours , c'est pourquoi je pose trop de questions .
    Merci beaucoup.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Je remonte ce sujet datant de plus de deux ans dans le but d'éclairer les programmeurs PC sous DOS ou autres électroniciens.
    La directive .186 indique à l'assembleur que le fichier source contient des instructions reconnues par les processeurs 80186 et suivants seulement. Elle équivaut en quelque sorte à la directive .286C (ou son homologue .286 permis par MASM 5) qui signale des instructions du 80286 en mode réel.

    Un programme compatible avec tous les processeurs x86 ne requiert aucune directive de processeur.

    Il en existe bien une nommée .8086. Elle sert néanmoins à annuler l'effet d'une directive de processeur précédente.
    Si un fichier ASM ne peut être assemblé qu'avec .186 et supérieure, c'est qu'il contient sûrement des instructions de décalage ou de rotation avec valeur immédiate supérieure à un ou des instructions d'empilage ou de dépilage de l'ensemble des registres généraux :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    pusha
    rcl ax,2
    shr bl,3
    popa
     
    ; au lieu de
     
    push di
    push si
    push bp
    push sp
    push dx
    push cx
    push bx
    push ax
    mov cl,2
    rcl ax,cl
    mov cl,3
    shr bl,cl
    pop ax
    pop bx
    pop cx
    pop dx
    pop sp
    pop bp
    pop si
    pop di
    P.S. : le langage d'assemblage en mode réel (adressage 20 bits) suppose que le programmeur comprend les notions de segment & offset.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    En fait, PUSH SP et POP SP sont à ignorer.
    Certes, il est parfois utile de passer la base de la pile comme paramètre d'une routine via cette même pile. L'influence des paramètres déposés avant sur sa valeur devra être pris en compte.
    Par contre, si la routine a modifié SP, il est impératif de remplacer POP SP par un autre dépilage.

Discussions similaires

  1. Mouvement dans la direction du model
    Par Yoann- dans le forum XNA/Monogame
    Réponses: 10
    Dernier message: 29/11/2010, 14h53
  2. Que signifie la directive .model ?
    Par dark0502 dans le forum Assembleur
    Réponses: 1
    Dernier message: 05/11/2006, 00h23
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 05h19
  4. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 17h34
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 19/07/2002, 00h32

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