Vous êtes sur la page 1sur 10

Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Chapitre N°3 : Le microprocesseur Intel 8086


I) Introduction :
Le microprocesseur Intel 8086 est un microprocesseur à 16bits, apparu en 1978, c’est le premier
microprocesseur de la famille Intel 80x86 (8086, 80186, 80286, 80486, Pentium,…). Chacun d’entre eux
est compatible avec les modèles précédents ; un programme écrit dans le langage machine du 286 peut
s’exécuter sans modification sur un 486. L’inverse n’est pas vrai, puisque chaque génération a ajouté des
instructions nouvelles. On parle donc de compatibilité ascendante.
II) La segmentation de la mémoire par le 8086:
Le 8086 possède 20 bits d’adresses dont 16 bits d’adresses de poids faibles sont multiplexés avec les 16
bits des données. C'est-à-dire le bus A/D est multiplexé et il nécessite un démultiplexage pour obtenir
séparément les bus d’adresse et ceux des données :
 16 bits des données (microprocesseur 16bits) : Le 8086 peut lire et écrire des données sur des
registres de 16 bits (deux octet c'est-à-dire mot complet) ou 8bits (soit octet fort ou octet faible).
 20 bits d’adresse, d’où 220=1Mo d’espace mémoires adressable par le 8086.
Le 8086 peut donc adresser 220 octets soit 1Mo. L’adresse de la première case mémoire est 0000 0000
0000 0000 0000 alors que celle de la dernière case est 1111 1111 1111 1111 1111. C'est-à-dire
l’adressage allant de 00000 à FFFFF en Hexadécimal. Le problème qui se pose est comment représenter
ces adresses au sein du microprocesseur dont leurs registres ne font que 16 bits soit 4 digits au
maximum en hexadécimal. La solution adoptée par Intel à été la suivante :
Puisque avec 16 bits en peut adresser 2 16octets= 65535 octets=64 Ko, la mémoire totale adressable de
1Mo (220 octets) est fractionnée en pages de 64Ko (216octets) appelés segments. On utilise alors deux
registres pour adresser une case mémoire donnée, un registre pour adresser le segment qu’on appelle
registre segment et un registre pour adresser à l’intérieur du segment qu’on désignera par registre
d’adressages ou offset.
Donc pour désigner une case mémoire parmi les 216=65536 contenus dans un segment, il suffit d’une
valeur sur 16 bits. Ainsi une case mémoire est repérée par le 8086 au moyen de deux quantités sur 16
bits :
 L’adresse d’un segment;
 Un déplacement ou offset dans ce segment.
D’où un octet dans une mémoire de 1Mo est désigné par un couple :
(Adresse de segment, offset dans ce segment)
qui constituent une adresse segmentée (AS).
Le déplacement (ou offset) a un rôle de spécifie un octet particulier dans un segment de 216=65536 octets.

1
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Adresse segment et déplacement sont codés sur 16 bits et peuvent donc prendre une valeur compris entre
0 et 65535. On a une relation entre l’adresse physique ou effectives d’une case mémoire et l’adresse
segmentée (AS) sous la forme de l’équation :
Adresse physique =16 *segment+déplacement.
Cette adresse se présente toujours sous la forme Segment : offset
Cette méthode de gestion de la mémoire est appelée segmentation de la mémoire.

Figure 1: La segmentation de la mémoire


A titre d’exemple, précédons au découpage de la mémoire en 16 segments qui ne se chevauche pas.

Considérons la case mémoire d’adresse physique 20350. Cette case mémoire se situe dans le segment 2,
avec un offset 350 par rapport à la première case mémoire de ce segment. On peut donc la référencer par
2000:0350 (c’est une représentation logique dont les valeurs sont codées sur un registre de 16bits). Le
microprocesseur procède à l’addition de deux registres après avoir décaler le registre segment d’un
chiffre à gauche (grâce à la multiplication par 16) :

2
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Donc l’adresse physique est calculée comme suit :

III) Organisation interne du 8086


Le 8086 est constitué de deux unités fonctionnant en parallèles (Figure 3):
 L’Unité d’Interface de Bus (UIB) (ou BIU : Bus Interface Unit en anglais) : elle recherche les
instructions en mémoire et les range dans un file d’attente des instructions :
 L’Unité d’Exécution (UE) (ou EU : Execution Unit en anglais) : cette unité exécute les
instructions contenues dans la file d’attente des instructions.
Ces unités fonctionnent simultanément, d’où une accélération du processus d’exécution d’un programme
(fonctionnement selon le principe du Pipe-line). Ils utilisent des registres (Figure 2) pour réaliser les
opérations demandées. Un registre est une petite partie de mémoire intégrée au microprocesseur,  dans  le
but  de  recevoir  des  informations  spécifiques, notamment des adresses et des données stockées durant
l'exécution d'un programme. Il existe plusieurs types de registres. Certains d'entre eux sont affectés à des
opérations d'ordre général et sont accessibles au programmeur à tout moment. Nous disons alors qu'il
s'agit de registres généraux. D'autres registres ont des rôles bien plus spécifiques et ne peuvent pas servir
à un usage non spécialisé.
Tous les registres et le bus internes du 8086 sont structurés en 16 bits. Vu de l’utilisateur, le 8086
comprend 3 groupes de 4 registres de 16 bits, un registre d’état de 9 bits et un compteur programme (PC)
(ou instruction pointeur IP) de 16 bits non accessible par l’utilisateur.

3
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Figure 2 : Les différents registres du 8086

Figure 3 : Architecture interne d’un microprocesseur 8086

4
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

2.1. LES REGISTRES GENERAUX (ou Groupe de données):


De façon générale, Les registres généraux participent aux opérations arithmétiques et logiques. Le
programmeur dispose de 4 registres internes de 16 bits (AX, BX, CX, et DX) afin de manipuler des
informations du type données. Chaque  registre  peut  être  divisé  en  deux  registres  de  8  bits :

- Registre AX : (Accumulateur)
Toutes les opérations de transferts de données avec les entrées-sorties ainsi que le traitement des chaînes
de caractères se font dans ce registre, de même les opérations arithmétiques et logiques.
Les   conversions   en   BCD   du   résultat   d'une   opération arithmétique (addition, soustraction,
multiplication et la division) se font dans ce registre.
- Registre BX : (registre de base)
C’est un registre d’usage général comme AX. Il peut être utilisé pour l'adressage de données dans une
zone mémoire : il contient une adresse de décalage par rapport à une adresse de référence. (Par exemple,
l'adresse de début d'un tableau). De plus il peut servir pour la conversion d'un code à un autre.
- Registre CX : (Le compteur)
Lors de l'exécution d'une boucle on a souvent recours à un compteur de boucles pour compter le nombre
d'itérations, le registre CX a été fait pour servir comme compteur lors des instructions de boucle.
Remarque : Le  registre  CL  sert  en  tant  que  compteur  pour  les  opérations  de décalage et de rotation,
dans ce cas il va compter le nombre de décalages (rotation) de bits à droite ou à gauche.
- Registre DX : (Data registre)
On utilise le registre DX pour les opérations de multiplication et de  division, il sert comme extension AX
pour contenir un nombre 32 bits.  De même, il peut être utilisé  pour   contenir   le   numéro   d'un   port
d'entrée/sortie pour adresser les interfaces d'E/S.
2.2. LES REGISTRES SEGMENT:

5
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Le    8086  a  quatre  registres  segments  de  16  bits  chacun :  CS  (Code Segment), DS (Data Segment),
ES (Extra Segment) et SS (Stack Segment ou la pile ). Ces registres sont chargés de sélectionner les
différents segments de la mémoire  en  pointant   sur   le   début   de   chacun   d'entre   eux.  Chaque
segment de mémoire ne peut excéder les 65535 octets.
- Le registre CS (Code Segment) :
Il pointe sur le segment qui contient les codes des instructions du programme en cours.
Remarque : Si la taille du programme dépasse les 65535 (64k) octets alors on peut diviser le code sur
plusieurs segments (chacun ne dépasse pas les 65535 octets) et pour basculer d'une partie à une autre du
programme il suffit de changer la valeur du registre CS et de cette manière on résout le problème des
programmes qui ont une taille supérieure à 65535 octets.
- Le registre DS (Data Segment) :
Le  registre  segment  de  données  pointe  sur  le  segment  des variables  globales  du  programme,  bien
évidemment  la  taille  ne  peut excéder 65535 octets (si on a des données qui dépassent cette limite, on
utilise la même astuce citée dans la remarque précédente mais dans ce cas on change la valeur de DS).
- Le registre ES (Extra Segment) :
Le registre de données supplémentaires ES est utilisé par le microprocesseur lorsque l'accès aux autres
registres est devenu difficile ou impossible pour modifier des données, de même ce segment est utilisé
pour le stockage des chaînes de caractères.
- Le segment SS (Stack Segment ou la pile ) :
Nous définissons une pile par une zone mémoire permet de stocker temporairement des données selon le
principe du "Dernier Entré Premier Sorti" ou "LIFO" (Last In First Out). Dans une pile, on peut
sauvegarder les registres ou les adresses ou les données pour les récupérer après l'exécution d'un sous
programme ou l'exécution d'un programme d'interruption, en général il est conseillée de ne pas changer le
contenu de ce registre car on risque de perdre des informations très importantes  (exemple  les  passages
d'arguments  entre  le  programme principal et le sous programme). Deux opérations sont possibles sur la
pile :
 Empiler une donnée : placer la donnée au sommet de la pile
 Dépiler une donnée : lire la donnée se trouvant au sommet de la pile.
Le registre SS pointe sur la pile.

2.3. LES REGISTRES d’ADRESSAGE (OFFSET) (ou Groupe de pointeur et indexe):


Les registres D’adressage participent à l’adressage des données dans la mémoire. Ils permettent
l’adressage d’un opérande à l’intérieur d’un segment de 64 Ko (216 positions mémoires). Ils ont formé de
4 registres de 16 bits (SI, DI, SP, BP) et font généralement référence à un emplacement en mémoire.  Ils
sont  en  général  munis  de  propriétés d'incrémentation et de décrémentation.

6
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

- Les pointeurs SP et BP : (Stack Pointer and Base Pointer)


Les pointeurs SP et BP pointent sur la zone pile, ils présentent un décalage par rapport à la base (le
registre SS). Pour le registre BP il a un rôle proche de celui de BX, mais il est généralement utilisé avec le
segment de pile.
- L'indexe SI : (Source Indexe) :
Il permet de pointer la mémoire, il forme en général un décalage (un offset) par rapport à une base fixe (le
registre DS). Il sert aussi pour les instructions de chaîne de caractères, en effet il pointe sur le caractère
source.
- L'indexe DI : (Destination Indexe) :
Il permet aussi de pointer la mémoire, il présente un décalage par rapport à une base fixe (DS ou ES), il
sert aussi pour les instructions de chaîne de caractères, il pointe alors sur la destination.

2.4. LE REGISTRE IP : (Instruction Pointer ou Le Compteur de Programme CP) :

Instruction Pointer  ou Compteur de Programme, contient l'adresse de l'emplacement mémoire où se situe
la prochaine instruction à exécuter. Autrement dit, il doit indiquer au processeur la prochaine instruction à
exécuter. Le registre IP est constamment modifié après l'exécution de chaque instruction afin qu'il pointe
sur l'instruction suivante.
En résume, A un instant donné, le 8086 à accès à 4 segments dans la mémoire dont les adresses se
trouvent dans les registres de segment CS, DS, SS et ES. Le segment de code contient les instructions du
programme, le segment de données contient les données manipulées par le programme, le segment de pile
contient la pile de sauvegarde et le segment supplémentaire peut aussi contenir des données.
Le registre CS est associé au pointeur d’instruction IP, ainsi la prochaine instruction à exécuter se trouve
à l’adresse logique CS:IP. De même, les registres de segment DS et ES peuvent être associés à un registre
d’index. Exemple DS:SI, ES:DI. Le registre de segment de pile peut être associé aux registres de
pointeurs SS:SP ou SS:BP.

7
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Figure 4 : Les différents segments ainsi leurs indexes correspondants

Remarque N°1: les segments ne sont pas nécessairement distincts les uns des autres, ils peuvent se
chevaucher ou se recouvrir complètement.
Remarque N°2: contenu des registres après un RESET du microprocesseur :
IP=0000H CS=FFFFH DS=0000H ES=0000H SS=0000H
Puisque CS contient la valeur FFFFH et IP la valeur 0000H, la première instruction exécutée par le 8086
se trouve donc à l’adresse FFFFH:0000H, correspondant à l’adresse physique FFFF0H (Bootstrap). Cette
instruction est généralement un saut vers le programme principal qui initialise ensuite les autres registres
de segment.
2.5. LE REGISTRE D'ETAT (FLAG) :
Le registre d'état FLAG sert à contenir l'état de certaines opérations effectuées par le processeur. Par
exemple, quand le résultat d'une opération est trop grand pour être contenu dans le registre cible (celui qui
doit contenir le résultat de l'opération), un bit spécifique du registre d'état (le bit OF) est mis à 1 pour
indiquer le débordement.

8
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

Remarque : Drapeaux (flags)


Les  drapeaux  sont  des  indicateurs  qui  annoncent  une  condition particulière suite à une opération
arithmétique ou logique.
Le registre d'état du 8086 est formé par les bits suivants :

Remarque N°1: X : bit non utilise.


Remarque N°2: Six bits reflètent les résultats d’une opération arithmétique ou logique et trois bits
participent au control du processeur.
CF (Carry Flag ou retenue) :
Cet indicateur et mis à 1 lorsque  il y a une retenue (ou dépassement) du  résultat  à  8  ou  16  bits. Il
intervient  dans  les  opérations d'additions (retenue) et de soustractions (borrow) sur des entiers naturels.
Il est  positionné  en  particulier  par  les  instructions  ADD (addition),  SUB(soustraction)  et  CMP
(comparaison entre deux valeurs).
CF = 1 s'il y a une retenue après l'addition ou la soustraction du bit de poids fort des opérandes. Exemples
(sur 8 bits pour simplifier) :

(Sur 16 bits)
PF (Parity Flag) :
Parité : si le résultat de  l'opération contient un  nombre pair de 1 cet indicateur est mis à 1, sinon zéro.
(sur 8bits)
AF (Auxiliary Carry) :
Demi-retenue : indique une retenue sur 4 bits (digit) de poids faible. Par exemple quand la somme des 2
digits de poids faible dépasse F(15).
ZF (Zero Flag) :
Zéro : Cet   indicateur est mis à 1 quand  le  résultat  d'une opération arithmétique ou logique est égal à
zéro. Il utilisé dans plusieurs instructions de sauts conditionnels. Lorsque l'on vient d'effectuer une

9
Cours Architecture des ordinateurs  : 1 er LFI chapitre N°3

soustraction (ou une  comparaison),  ZF=1  indique  que  les  deux  opérandes  étaient  égaux. Sinon, ZF
est positionné à 0.
SF (Sign Flag) :
SF est positionné à 1 si le bit de poids fort du résultat d'une addition ou soustraction est 1 ; sinon SF=0.
SF est utile lorsque l'on manipule des entiers signés, car le bit de poids fort donne alors le signe du
résultat. Exemples (sur 8 bits) :

OF (Overflow Flag) :
Débordement : si on a  un  débordement arithmétique  ce  bit est mis à 1, c.-à-d le résultat d'une opération
excède la capacité de l'opérande (registre ou case mémoire), sinon il est à 0.
DF (Direction Flag) :
Cet indicateur fixe la direction de l’auto incrémentation/décrémentation de SI et DI lors des instructions
de manipulation de chaines :
D=0 donc incrémentation des index
D=1 donc décrémentations des index
IF(Interrupt Flag) :
Masque d'interruption : il autorise ou non la reconnaissance des interruptions
I=0 interruptions autorisées
I=1 interruptions non autorisées
TF (Trap Flag) :
Trap (piege) met le processeur en mode pas à pas pour faciliter la recherche des défauts d’execution.

Remarque :
Les   instructions   de   branchements   conditionnels   utilisent   les indicateurs (drapeaux), qui sont des
bits spéciaux positionnés par l'UAL après certaines opérations. Chaque indicateur est manipulé
individuellement par des instructions spécifiques.

Ok vérifié
10