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 !!
Partager