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 :

[Débutant] BIT D, W, MOD, REG et R/M


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut [Débutant] BIT D, W, MOD, REG et R/M
    Bonjours à tous,

    J'apprends actuellement la programmation du 8086 via un livre des années 80, très pédagogue en temps normal (et pour cela je l'apprécie beaucoup), mais sur ce coups là j'ai besoin de plus d'information pour comprendre.

    Je n'arrive pas à cerner les valeurs et les cas possibles pour le bit D, W, les champs MOD, REG et R/M. Je vais donc écrire ce que je comprends, pourriez-vous corriger/ajouter des explications afin que je comprenne (enfin) les fonctionnements possibles et attendus:

    J'utilise l'instruction MOV (quelle originalité), les '[]' indique 1 octet.

    Voici l'instruction:
    [100010DW] [MOD(2b) REG(3b) R/M(3b)]

    Si D = 1, la source est spécifié par MOD et R/M, la destination est spécifié par REG.
    Si D = 0, la source est spécifié par REG et la destination par MOD et R/M.

    Viens le bit W qui est à 1 si la taille de la destination est 16 bits, 0 si elle est à 8 bits.

    Ensuite, voici comment j'interprète le champs MOD:
    Si MOD = 00, le déplacement vaut l'adresse spécifié par R/M (de 000 à 111)
    Si MOD = 01, le déplacement vaut l'adresse spécifié par R/M + l'adresse à 8 bits contenu dans l'octet supplémentaire de l'instruction
    Si MOD = 10, le déplacement vaut l'adresse spécifié par R/M + l'adresse à 16 bits contenu dans les 2 octets supplémentaires de l'instruction
    Si MOD = 11, le champs R/M doit être interprété comme un champ de type REG.

    Les valeurs de R/M possible (si MOD != 11) sont:
    000 [BX] + [SI]
    001 [BX] + [DI]
    010 [BP] + [SI]
    011 [BP] + [DI]
    100 [SI]
    101 [DI]
    110 [BP]
    111 [BX]

    Ensuite viens le champ REG qui indique un registre / pointeur / index:
    REG 16b 8b (W=1 ou W=0)
    000 AX AL
    001 CX CL
    010 DX DL
    011 BX BL
    000 SP AH
    000 BP CH
    000 SI DH
    000 DI BH

    Voilà, j'espère être assez clair dans mon explication mais si besoin je formulerais autrement.

    Merci de votre aide et de votre patience !!
    Stay in touch

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    C'est ça il me semble, à part qu'il y a une subtilité pour adresser une variable directement à partir de son adresse : il faut faire comme si on adressait avec BP sans déplacement, et l'adresse doit être dans les octets qui suivent. Donc il n'y a pas vraiment moyen d'adresser BP tout seul, il vaut utiliser un adressage avec un déplacement nul.
    :wq

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut
    merci, de ta réponse
    Stay in touch

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

Discussions similaires

  1. [Débutant] Définition shortrandom et mod
    Par dupond59 dans le forum Ada
    Réponses: 1
    Dernier message: 14/01/2009, 14h20
  2. [Débutant] Programmation OS , asm/C/C++, compilateur 16/32 bits
    Par tlt dans le forum Programmation d'OS
    Réponses: 7
    Dernier message: 22/04/2008, 19h59
  3. [Fortran 77][Débutant] Comparaison bit à bit
    Par zenii dans le forum Fortran
    Réponses: 1
    Dernier message: 21/09/2007, 15h29
  4. Réponses: 4
    Dernier message: 29/03/2007, 19h39
  5. [Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?
    Par Pill_S dans le forum Autres architectures
    Réponses: 7
    Dernier message: 23/12/2004, 23h24

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