Vous êtes sur la page 1sur 19

🚋

MODULE #1 - 8086
Notes MicroProcesseur 8086 : Résumé

Réalisé par : Club Robotique & Energies Renouvelables

Tags Element 1 Module 1

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e2b2ce1-dd6f-47fe-be1e-eef16ad9e86
6/8086_notes.pdf

Part 1 : Description des Signaux

https://www.youtube.com/watch?v=iEb72cXKUn4&list=PLUPAifVWZeKNibDhSIXgr0s3Ciw8RCGqy&index=
4](https://www.youtube.com/watch?v=iEb72cXKUn4&list=PLUPAifVWZeKNibDhSIXgr0s3Ciw8RCGqy&inde
x=4

Informations de base sur Microprocesseur 8086 :


µP 16 bits
Intel
Adressage direct de 1 MO.
14 Registres de 16 bits
24 modes d'adressage.
Opérations sur 1, 8 et 16 bits.
Opérations des opérandes signés ou non signés de 8 et 16 bits.
Bus de données → 16 bits
Bus d'adresses → 20 bits
Taille de cache → 0

MODULE #1 - 8086 1
Brochage de 8086 :
On va détailler par la suite toutes ces broches.
On remarque que les pins de 24 à 31 ont des fonctions différentes selon le mode d'utilisation du µP.

Schéma fonctionnel:

MODULE #1 - 8086 2
Autre figure.

MODULE #1 - 8086 3
Autre figure.

MODULE #1 - 8086 4
Description des signaux :

MODULE #1 - 8086 5
MODULE #1 - 8086 6
Connexion de la mémoire :

Alors comme on a mentionné, le 8086 en mode maximal permet de gérer 1 Mo de mémoire, ces 1 Mo de
mémoires sont réparties en 2 banques, la banque paire : où les adresses sont paires, et la banque impaire : où
les adresses sont impaires.
Donc nous avons 2 banques de 512 Ko.
Chaque permet de fournir 8 lignes de données.
La banque paire est reliée à la partie basse du bus de données : D0 D7.
La banque impaire est reliée à la partie haute du bus de données : D8 D15.
Cette organisation permet des transferts sur 8 bits ou sur 16 bits.
La taille des lignes est contrôlée par A0 et BHE (bar) :

MODULE #1 - 8086 7
Création du bus système :
Pour démultiplexer les lignes d'adresses et les lignes des données et donc créer un bus système.

Dans un premier temps, il est nécessaire d'utiliser des circuits disposant de 8 Bascules D de type LATCH.

Le signal ALE : Adress Latch Enable va être utiliser comme signal d'horloge pour les bascules D afin de
sauvegarder la valeur de l'adresse qu'on elle est présente sur le bus multiplexé.

Pour ce qui des données, nous devons utiliser des circuits de type Buffer bidirectionnel. Donc le circuit contient 8
buffers bidirectionnel.

Ce circuit permette de valider ou non valider le bus de données grâce à la ligne DEN(bar) relié à la ligne G(bar)
du buffer bidirectionnel, Lorsque DEN(bar) est égal à 0, G(bar) va être égale à 0, ce qui fait que le buffer pourra
fonctionner.
Ensuite, le sens du transfert est contrôlé par la ligne DIR du buffer bidirectionnel relié à DT/R(bar), lorsqu'elle est
à 1, Transfert dans un sens transmission, lorsqu'elle est à 0, on aura l'autre sens réception.

MODULE #1 - 8086 8
Maintenant, pour créer le bus système, nous devons utiliser 3 circuits de type LATCH, pour obtenir les lignes
d'adresses de A0 A19 ainsi que la ligne BHE(bar). 2 circuits de type Buffer bidirectionnels qui permettent
d'obtenir le bus de données.
Pour le bus de contrôle, il est soit généré directement dans le cas d'utilisation du µP en mode minimal, ou bien il
est généré en utilisant un circuit 8288 lorsque le µP est utilisé en mode Maximal.

Part 2 : Organisation interne et gestion de la mémoire

https://www.youtube.com/watch?v=suCqdOQVno

Organisation Interne :
Registres :
Le 8086 dispose de 14 registres.

Registres généraux :
AX BX CX DX sont des registres sur 16 bits qui peuvent être décomposé sur des registres de 8 bits AH AL BH
BL CH CL DH DL.

MODULE #1 - 8086 9
Ces registres sont des registres généraux, mais dans certains cas, ces registres peuvent être utilisés comme
des registres spécialisés.
AX → Registre Accumulateur.
BX → Registre de Base utilisé dans l'adressage.
CX → Registre Compteur utiliser dans les boucles.
DX → Registre de données.

Registres pointeurs et d'index :


Les Pointeurs sont le Pointeur de Pile SP, et le Pointeur de base BP.
Les Index dont Source Index SI et Destination Index DI.

Registres de segments :
CS : Segment de Code.
SS : Segment de Pile.
DS : Segment de Données.
ES : Segment de données supplémentaires.

Pointeurs d'instruction et registre d'état :


Pointeur d'instruction IP, appelé aussi Compteur Programme : Il contient en permanence l'adresse de la
prochaine instruction à exécuter.
Registre d'état : Permet d'indiquer l'état du processeur après l'exécution de chaque instruction, pour cela il
dispose de certains nombre de drapeaux ou indicateurs.

CY : Indicateur de Retenu. Carry : Lorsque le résultat d'une instruction a généré un retenu, CY va passer à 1.
P : Indicateur de Parité. Parity : Le nombre de 1 contenu dans le résultat d'une instruction, lorsque le nombre de 1
est paire, P → 1.
AC : Indicateur de Retenu Auxiliaire ; Lorsqu'on a un retenu entre le premier quartet et le second quartet dans
une opération de 8 bits.
Par exemple, opération sur 8bits, lorsqu'il y a un retenu du 4ème bit vers le 5ème bit, le AC 1. Utilisé dans les
opérations en BCD.
Z : Indicateur de Zero : Le résultat d'une instruction est nul. Z 1.

S : Indicateur de Signe : Résultat négatif, donc S 1.


T : Indicateur de Débogage Debugging) : Le µP exécute un programme en mode pas à pas, instruction par
instruction.
I : Drapeau de validation des interruptions : lorsque I → 1, Les interruptions sont autorisées, lorsque I → 0, les
interruptions sont masquées.
D : Indicateur de direction : Utilisé dans les opérations sur les chaines de caractère, lorsque D 1, une chaine de
caractère est manipulée de la plus haute adresse à la plus faible adresse.
O : Indicateur de débordement : Dépassement de capacité, la taille réservée pour un résultat est insuffisante
pour l'écriture de ce résultat.

Gestion de la mémoire :

MODULE #1 - 8086 10
La segmentation est une technique qui permet de diviser la mémoire en des parties qui peuvent être accédées
séparément. Très utilisé dans les µP.
Dans le cas du 8086, un segment a une taille de 64 Ko. sachant que la mémoire entière vaut 1 Mo.

Un segment doit nécessairement avoir une adresse multiple de 16. ‼ c-à-d si l'adresse
est à 20bits, les 4 bits de poids faible doivent être nécessairement à 0 → Ce qui veut
dire que l'adresse est multiple de 16.
Puisque les 4 bits du poids faibles d'une adresse de 20 bits vaut 0, donc on peut les
éliminer et préserver uniquement les 16 bits restant, ces 16 bits restant vont
constituer l'adresse segment.

L'adresse segment est une adresse de 16 bits, qui permet d'indiquer la position du
segment dans la mémoire de 1 Mo.
Et pour identifier une case mémoire dans le segment, il nous faudra un Offset.
C'est quoi un Offset ?
C'est une adresse également sur 16 bits. Qui permet de déterminer la position de la
case mémoire par rapport au segment.
À partir de là, nous allons définir ce qu'on appelle une adresse logique : Segment :
Offset.
Et à chaque adresse logique doit correspondre une adresse qui va permettre de
déterminer la position de la case mémoire dans les 1 Mo adressé par le 8086 → une
adresse physique (sur 20 bits) : Segment x 16 + Offset.

MODULE #1 - 8086 11
⛔ Une adresse physique (sur 20 bits) : Segment x 16 puisqu'on avait dit que la position du segment doit
être une adresse multiple de 16, donc on multiplie la valeur de segment par 16, c'est équivalent à la
génération de 4 zéros : 0000 en binaire sur le quartet du poids faible. Et en suite on rajoute l'offset.

⚠ En programmation, on ne manipule que les adresse logiques.

Le 8086 dispose de 4 registres CS, SS, DS, ES qui permettent d'indiquer la position de 4 segments.
Le Code Segment va contenir les codes du programme.

MODULE #1 - 8086 12
Le Stack Segment va contenir la pile : une zone mémoire qui fonctionne en mode LIFO, elle sert à sauvegarder
momentanément les données d'exécution d'un programme
Le Data Segment et L'Extra Data Segment vont contenir les données sur lesquelles vont s'exécuter les
programmes.

Le µP ne va pas utiliser la totalité de 1 Mo, mais il va utiliser seulement 4 segments de


64 Ko chacun au maximum.

Il y a une association entre chaque registre de segment et des registres d'Offset :

Prenant la première case mémoire du Code Segment qui a une adresse logique CS : 0000H.
Une case mémoire quelconque est indiqué par le pair CS : IP, pourquoi exactement le registre IP, parcequ'il
contient les adresses des instructions.

😈 Donc CS contient la position du Segment pour les programmes et IP permet d'indiquer le


déplacement dans ce Segment (l'adresse d'une instruction). Le même principe pour les autres
segments.
——
DS on lui associe un registre d'index soit SI ou DI. DS : SI ou DS : DI.
——
ES : DI ou ES : SI.
——
SS : SP Stack Pointer).

Comme on a mentionné avant, le programme peut au maximum manipuler 4 segments de 64 Ko, donc au total 256
Ko.

Certains programmes peuvent exiger une taille plus petite, donc il y a la possibilité de faire chevaucher les
segments, ça veut dire que les segments vont avoir des parties communes de tel sorte à pouvoir réduire la
taille de tous les segments utilisés.
Comment faire chevaucher les segments ?
Si on divise les 1 Mo de la mémoire sur 64 Ko, on va obtenir 16 segments distincts. C-à-d que 4 bits sont
nécessaires pour définir les segments. La combinaison de 0000 jusqu'à 1111 vont définir les 16 segments
possibles de 64 Ko.
Seulement que les constructeurs d'Intel ont proposé des adresses Segments sur 16 bits et non sur 4 bits,
chose qui permet de trouver 2^16 combinaisons différentes des Segments. Cette technique va faire chevaucher
les segments.

MODULE #1 - 8086 13
😈 La segmentation de la mémoire offre plusieurs avantages :
1 Séparation des données et des programmes.
2 L'application d'un même programme sur des données différentes, il suffit de mettre des données
dans des segments différents et d'appliquer à chaque fois les programmes sur ces données là.
3 Réduction de la taille du code des instructions : car les codes des instructions doivent
nécessairement avoir les adresses des opérandes, le fait d'utiliser la segmentation, un opérande va
être identifié par une adresse sur 16 bits qui correspond à l'adresse d'offset, donc au lieu d'utiliser 20
bits pour une adresse, on utilise uniquement 16.
4 Fonctionnement du microprocesseur en multitâches.
5 Utilisation sans risque de l'adressage direct.

Initialisation du µP:

Part 3 : Modes d'adressage et Codage des instructions

https://www.youtube.com/watch?v=JKfbnOmfMmQ

La programmation du 8086:
Jeu d'instructions :
Le 8086 est un microprocesseur CISC Complex Instruction Set Computer) : 350 instructions.

MODULE #1 - 8086 14
Mnémonique Destination, Source.

Les instructions peuvent être classées en quatre groupes :


• Instructions de transfert de données ;
• Instructions arithmétiques ;
• Instructions logiques ;
• Instructions de branchement ...

Les modes d'adressage :

1 Adressage implicite : L’instruction contient seulement le code opération.


Exemple : NOT AX ; permet de complémenter le contenu du registre AX.
2 Adressage immédiat : La donnée est fournie immédiatement après l’instruction
Exemple : MOV AL, 21h ; permet de transférer 21h dans le registre AL.
3 Adressage d’un registre : La donnée est contenue dans un registre.
Exemple : MOV AX, BX : charge le contenu du registre BX dans le registre AX.
4 Adressage direct ou étendu : L’instruction comporte l’adresse effective de la case mémoire où se trouve la
donnée.
Exemple : MOV BL, 0200h] ; transfère le contenu de la case mémoire d’adresse 0200h vers le registre BL.

MODULE #1 - 8086 15
5 Adressage indirect par registre ou basé (et basé avec déplacement) : L’offset est contenu dans un registre
de base BX ou BP. EA BP ; EA BX (contenu de BP ou de BX.
Exemples :

MOV AL, BX ; transfère la donnée dont l’offset est contenu dans le registre de base BX vers le registre AL.
Le segment associé par défaut au registre BX est le segment de données DS ;

MOV AL, ES : BX ; transfère dans registre AL, la donnée dont l’offset est contenu dans le registre de base
BX du segment de données supplémentaires ES ;

MOV AL, BP ; le segment par défaut associé au registre de base BP est le segment de pile.
———
Dans le cas de l’adressage basé avec déplacement, une constante est additionnée au contenu du registre
de base.
EA BP + d ; EA BX + d.
Exemple : MOV BX100h], AX ; L’adresse effective est donnée par BX + 100h.

6 Adressage indexé (et indexé avec déplacement) : Semblable à l’adressage basé, sauf que l’offset est contenu
dans un registre d’index SI ou DI, associés par défaut au segment de données. Les modes d’adressage basés
ou indexés permettent la manipulation de tableaux (vecteurs) rangés en mémoire.
EA SI ; EA DI. Adressage indexé avec déplacement, EA SI + d ; EA DI + d
Exemples :

MOV DI, BX ; charge les cases mémoire d’offset DI et DI + 1 avec le contenu du registre BX.

MOV AL, SI200h] ; charge le registre AL avec le contenu de la case mémoire dont l’offset est contenu
dans SI plus un déplacement de 200h.

7 Adressage indirect indexé (et indirect indexé avec déplacement) : L’offset est obtenu en faisant la somme
des contenus d’un registre de base et d’un registre d’index, et d’une valeur constante dans le cas avec
déplacement. Ce mode d’adressage permet l’adressage de structures de données complexes : matrices,
enregistrements, …
EA BP + DI ; EA BP + SI ; EA BX + DI ; EA BX + SI.
Avec déplacement : EA BP + DI + d ; EA BP + SI + d ; EA BX + DI + d ; EA BX + SI + d
Exemple : MOV AH, BXSI100h]
8 Adressage relatif : L'adresse effective est obtenue en additionnant un déplacement au contenu du compteur
ordinal. Ce type d'adressage est utilisé dans les instructions de saut ou de branchement.
Exemples : - JMP 05h ; branchement inconditionnel à l’adresse IP + 05h.

JNZ F5h ; branchement si zéro à l’adresse IP - 11h C à 2 de F5h).

MODULE #1 - 8086 16
Part 4 : Jeu d'instructions et programmation en assembleur
du 8086

https://www.youtube.com/watch?v=0kucoKocG8k

Minute 1138.

La programmation du 8086:

Les instructions de transfert


8086 n’autorise pas les transferts de mémoire vers mémoire.
• Registre vers mémoire ;
• Registre vers registre ;
• Mémoire vers registre.

L’instruction MOV :
Syntaxe : MOV destination, source
Exemples :
MOV AL, 21h ; MOV AX, BX ; MOV BL, 0200h] ; MOV AH, BXSI100h]

L’instruction XCHG (Exchange) :


Syntaxe : XCHG Destination, Source ;
Échange les contenus de Source et Destination.

Instructions de manipulation de la pile :


PUSH : Empiler une donnée, consiste à placer la donnée au sommet de la pile ;

POP : Dépiler une donnée, consiste à récupérer la donnée se trouvant au sommet de la pile.

Par définition, on représente la pile comme une zone mémoire où les adresses augmentent de haut en bas. Le
sommet de la pile est repéré par un registre appelé pointeur de pile SP : Stack Pointer) qui contient l’adresse
de la dernière donnée empilée. La pile est définie dans le segment de pile dont l’adresse de départ est contenue
dans le registre SS.

Le pointeur de pile SP est automatiquement pré-décrémenté lors d’une opération


d’empilage.
Une opération de dépilage est suivie quant à elle par une post-incrémentation de SP.

La valeur de SP doit être initialisée par le programme principal avant de pouvoir utiliser la pile. Les données
manipulées par la pile sont des registres ou des données sur 2 octets (on ne peut empiler que des mots de 16
bits).

MODULE #1 - 8086 17
PUSH AX ; empilage du registre AX ... SP01FEh (car 0200 - 0002 = 01FE puis écriture de AX.
PUSH BX ; ... du registre BX ... SP01FCh (car 01FE - 0002 = 01FCh) puis écriture de BX
PUSH 1100h] ; ... des cases mémoire 1100h-1101h SP01FAh (car 01FCh - 0002 = 01FAh) puis écriture des
contenus des cases 1100h et 1101h
... SP01FAh
POP 1100h] ; Récupérer le contenu des cases 1100h et 1101h SP01FCh
POP BX ; Récupérer le contenu de BX SP01FEh
POP AX ; Récupérer le contenu de AX SP01FAh

MODULE #1 - 8086 18
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fe09203162394285-a6f3-f7437588908
6/04_Microprocesseur_80861621.pdf

MODULE #1 - 8086 19

Vous aimerez peut-être aussi