CHAPITRE II
LE MICROPROCESSEUR INTEL 8086
1
Schéma fonctionnel du 8086
2
Description et utilisation des signaux du 8086
CLK : entrée du signal d’horloge qui cadence le
fonctionnement du microprocesseur. Ce signal
provient d’un générateur d’horloge : le 8284.
RESET : entrée de remise à zéro du microprocesseur. Lorsque cette entrée est mise à
l’état haut pendant au moins 4 périodes d’horloge, le microprocesseur est réinitialisé : il
va exécuter l’instruction se trouvant à l’adresse FFFF0H (adresse de bootstrap). Le signal
de RESET est fourni par le générateur d’horloge.
READY : entrée de synchronisation avec la mémoire. Ce signal provient également
du générateur d’horloge.
TEST : entrée de mise en attente du microprocesseur d’un événement extérieur.
INTA : indique que le microprocesseur accepte l’interruption.
HOLD et HLDA : signaux de demande d’accord d’accès direct à la mémoire (DMA).
3
Description et utilisation des signaux du 8086
NMI et INTR : entrées de demande d’interruption.
INTR : interruption normale.
NMI (Non Maskable Interrupt) : interruption prioritaire.
S0 à S7 : signaux d’état indiquant le type d’opération en cours sur le bus.
A16/S3 à A19/S6 : 4 bits de poids fort du bus d’adresses, multiplexés avec 4 bits d’état.
AD0 à AD15 : 16 bits de poids faible du bus d’adresses, multiplexés avec 16 bits de données. Le
bus A/D est multiplexé (multiplexage temporel) d’où la nécessité d’un démultiplexage pour
obtenir séparément les bus d’adresses et de données :
16 bits de données (microprocesseur 16 bits) ;
20 bits d’adresses, d’où 220 = 1 Mo d’espace mémoire adressable par le 8086.
MN/MX : entrée de choix du mode de fonctionnement du microprocesseur :
mode minimum (MN/MX = 1) : le 8086 fonctionne de manière autonome, il génère lui-
même le bus de commande (RD, WR, ...) ;
mode maximum (MN/MX = 0) : ces signaux de commande sont produits par un contrôleur
de bus, le 8288. Ce mode permet de réaliser des systèmes multiprocesseurs.
4
Description et utilisation des signaux du 8086
Chronogramme du bus A/D
Le démultiplexage des signaux AD0 à AD15 (ou A16/S3 à A19/S6) se fait en
mémorisant l’adresse lorsque celle-ci est présente sur le bus A/D, à l’aide d’un verrou
(latch), ensemble de bascules D. La commande de mémorisation de l’adresse est générée
par le microprocesseur : signal ALE (Address Latch Enable).
5
Description et utilisation des signaux du 8086
Circuit de démultiplexage A/D
Fonctionnement :
• si ALE = 1, le verrou est transparent (Q = D) ;
• si ALE = 0, mémorisation de la dernière
valeur de D sur les sorties Q;
• les signaux de lecture (RD) ou d’écriture (WR)
ne sont générés par le microprocesseur que
lorsque les données sont présentes sur le bus
A/D.
Exemples de bascules D : circuits 8282, 74373, 74573.
6
Description et utilisation des signaux du 8086
RD : signal de lecture d’une donnée.
WR : signal d’écriture d’une donnée.
M/IO : (Memory/Input-Output) indique si le 8086 adresse la mémoire (M/IO = 1) ou les
entrées/sorties (M/IO = 0).
DEN : (Data Enable) indique que des données sont en train de circuler sur le bus A/D
(équivalent de ALE pour les données).
DT/R : (Data Transmit/Receive) indique le sens de
transfert des donnes :
DT/R = 1 : données émises par le
microprocesseur (écriture) ;
DT/R = 0 : données reçues par le
microprocesseur (lecture).
7
Description et utilisation des signaux du 8086
Les signaux DEN et DT/R sont utilisés pour la
commande de tampons de bus (buffers)
permettant d’amplifier le courant fourni par le
microprocesseur sur le bus de données.
Exemples de tampons de bus : circuits
transmetteurs bidirectionnels 8286 ou 74245.
BHE : (Bus High Enable) signal de lecture de l’octet de
poids fort du bus de données. Le 8086 possède un bus
d’adresses sur 20 bits, d’où la capacité d’adressage de 1
Mo ou 512 Kmots de 16 bits (bus de données sur 16 bits).
Le méga-octet adressable est divisé en deux banques de
512 Ko chacune : la banque inférieure (ou paire) et la
banque supérieure (ou impaire).
Ces deux banques sont sélectionnées par :
A0 pour la banque paire qui contient les octets de
poids faible ;
BHE pour la banque impaire qui contient les octets
8
de poids fort.
Description et utilisation des signaux du 8086
Seuls les bits A1 à A19 servent à désigner une case mémoire dans chaque banque de
512 Ko. Le microprocesseur peut ainsi lire et écrire des données sur 8 bits ou sur 16 bits :
BHE A0 Octets transférés
0 0 Les deux octets (mot complet)
0 1 Octet fort (adresse impaire)
1 0 Octet faible (adresse paire)
1 1 Aucun octet
Remarque : le 8086 ne peut lire une donnée sur 16 bits en une seule fois, uniquement si
l’octet de poids fort de cette donnée est rangé à une adresse impaire et l’octet de poids
faible à une adresse paire (alignement sur les adresses paires), sinon la lecture de cette
donnée doit se faire en deux opérations successives, d’où une augmentation du temps
d’exécution du transfert dû à un mauvais alignement des données.
9
Description et utilisation des signaux du 8086
Réalisation des deux banques avec plusieurs boîtiers mémoire :
10
Description et utilisation des signaux du 8086
Création du bus système du 8086 :
11
Architecture interne
un microprocesseur exécute un programme en répétant les cycles suivants :
Cycle de recherche.
Cycle d’exécution.
Alors que l’architecture du 8086 ; pour effectuer les mêmes étapes, alloue deux unités
de traitement :
Unité d’exécution EU.
Unité d’interface avec le Bus BIU.
Les deux unités peuvent fonctionner de façons indépendantes. Pendant que l’unité de
commande décode l’instruction présente dans le registre d’instruction, l’unité
d’interface avec le Bus recherche l’instruction suivante en mémoire.
12
Architecture interne
Registres
généraux Registres de
segments
Pointeurs
13
Architecture interne: Unité d’exécution : EU
Cette unité reçoit les
instructions de la file
d’attente, les décode et
les exécute. Elle contient
une unité arithmétique
et logique 16 bits reliés
au indicateur d’état de
CPU, un décodeur
d’instruction et elle
manipule aussi les
registres généraux du
CPU.
14
Architecture interne: Unité d’interface avec le Bus : BIU
Son travail principal est de
calculer les adresses
réelles sur 20 bits, et de
charger la file d’attente
d’instruction. Cette unité
anticipe la recherche des
instructions en mémoire.
Ce mécanisme
d’anticipation permet
d’éliminer les temps mort
de recherche de
l’instruction suivante en
mémoire.
15
Architecture interne: Les registres généraux
AX, BX, CX, DX, SP, BP, SI, DI
Ils servent à contenir les
AX
opérandes arithmétiques et BX
CX
logiques. DX
Les registres AX, BX, CX et DX
peuvent être considérées
comme des registres double de
8bits et peuvent donc être
utilisé sur 8 ou 16 bits.
16
Architecture interne: Les registres généraux
Certains des registres généraux interviennent
implicitement selon les instructions :
AX et DX : interviennent pour toutes
instructions de multiplication, de division et
d’entrée/sortie.
CX : est forcement utilisé pour toutes les
instructions de la boucle, de décalage(CL).
17
Architecture interne: Les registres généraux
BX et BP : ont le titre de registres de bases, car
ils sont souvent désignés pour contenir l’adresse
de base d’une structure de données en
mémoire. (Exemple : l’adresse de base d’un
tableau).
SI et DI : sont appelées registres d’index
puisqu’ils ont souvent pour objet, de contenir
un index qui s’incrémente au fur et à mesure de
l’examen d’une structure de données.
SP : il a la fonction classique de pointeur de pile.
18
Architecture interne: Les registres de segments
CS, DS, SS, ES
Les unités centrales de la famille 8086
permettent à un programme en cours
d’exécution, d’accéder immédiatement à 4
segments de la mémoire. Les registres de
segment sont utilisés pour identifier ces
quatre segments (Le registre de segment
pointe sur l’origine du segment).
19
Architecture interne: Les registres de segments
CS : registre de
segment de code.
DS :registre de
segment de
données.
ES : registre de
segment de
données extra.
SS :registre de
segment de pile.
20
Architecture interne: Le registre d’indicateur
a) Les indicateurs d’états:
CF : Bit de retenue : indique qu’une retenue s’est
propagée à partir du bit le plus significatif d’un
opérande 8bits ou 16bits à la suite de
l’exécution d’une opération arithmétique.
Dépassement de capacité de l’accumulateur en
cas d’addition, passage en dessous de zéro pour
la soustraction.
PF : Indicateur de parité : prend la valeur 1 si le
résultat d’une opération contient un nombre
pair de 1.
21
Architecture interne: Le registre d’indicateur
22
Architecture interne: Le registre d’indicateur
AF : Indicateur de retenue auxiliaire : prend
la valeur 1 pour indiquer qu’une retenue
s’est propagée à partir du bit 3 (utiliser
DCB).
ZF : bit de zéro : prend la valeur 1 si le
résultat d’une opération est nul.
23
Architecture interne: Le registre d’indicateur
SF : bit de signe : prend la valeur 1 si le bit
le plus significatif du résultat d’une
opération est 1.
OF : bit de débordement de capacité :
utilisé en arithmétique signé, indique
que le résultat d’une opération
arithmétique est sortie de la gamme du
système de numération signé.
24
Architecture interne: Le registre d’indicateur
b) Les Indicateurs de commandes :
TF : bit de mode pas à pas : positionné à 1, impose
au processeur le mode d’exécution en pas à pas
dans un but d’aide à la mise au point des
programmes.
DF : bit de direction : DF contrôle le sens
d’évolution dans une chaîne de donnée. Si DF=1,
il y a auto-décrémentation des registres SI et DI.
Et si DF=0, il y a auto-incrémentation dans ces
registres.
25
Architecture interne: Le registre d’indicateur
IF : bit de validation des interruptions :
positionné à 1, les interruptions externes du
type INTR sont autorisées.
26
Segmentation
Un segment est un espace mémoire pouvant
aller jusqu’à 65536 octets (64 koctets).
1- Segment de code : contient le code
exécutable du programme courant. L’origine
de ce segment sera placée dans le registre de
segment CS.
CS : IP pointe toujours l’instruction suivante
à exécuter.
27
Segmentation
2- Segment de donnée : contient toutes les données
courante du programme. C’est le segment source
lors d’une opération de traitement de chaîne de
données. L’origine de ce segment sera placée dans
le registre de segment DS. Le registre index
combiné avec ce registre c’est le SI.
DS : SI pointe toujours l’élément de la chaîne
source (pour le cas des instructions de traitement
de chaîne ).
28
Segmentation
3- Segment de donnée extra : c’est le segment
destination lors d’une opération sur une
chaîne de donnée. L’origine de ce segment
est placé dans ES. Le registre indexe combiné
avec celui-ci est le DI.
ES : DI pointe toujours l’élément de la chaîne
destination (pour le cas des instructions de
traitement de chaîne ).
29
Segmentation
4- Segment de pile : contient toutes les
informations stockées dans la pile. L’origine
de ce segment est placée dans le registre SS.
A ce registre de segment sera associés le
pointeur de pile SP.
SS : SP pointe toujours le dernier élément
empilé.
30
Gestion de la mémoire par le 8086
L’espace mémoire adressable par le 8086 est de 220 = 1 048 576 octets = 1 Mo (20 bits
d’adresses). Cet espace est divisé en segments. Un segment est une zone mémoire de 64
Ko (65 536 octets) définie par son adresse de départ qui doit être un multiple de 16.
Dans une telle adresse, les 4 bits de poids faible sont à zéro. On peut donc représenter
l’adresse d’un segment avec seulement ses 16 bits de poids fort, les 4 bits de poids faible
étant implicitement à 0.
Pour désigner une case mémoire parmi les 216 = 65 536 contenues 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 (appel´e aussi adresse effective)
dans ce segment.
Cette méthode de gestion de la mémoire est
appelée segmentation de la mémoire.
31
Gestion de la mémoire par le 8086
La donnée d’un couple (segment, offset) définit une adresse logique, notée sous la forme
segment : offset.
L’adresse d’une case mémoire donnée sous la forme d’une quantité sur 20 bits est
appelée adresse physique car elle correspond à la valeur envoyée réellement sur le bus
d’adresses A0 - A19.
Correspondance entre adresse logique et adresse physique :
Ainsi, l’adresse physique se calcule par l’expression :
adresse physique = 16 × segment + offset
car le fait d’injecter 4 zéros en poids faible du segment revient à effectuer un décalage de
4 positions vers la gauche, c’est à dire une multiplication par 24.
32
Adressage de microprocesseur 8086
1- Les types d’adresses :
a) Adresse réelle : l’adresse réelle est obtenue
en décalant le registre de segment de 4
positions binaires vers la gauche et en lui
ajoutant l’offset (déplacement). Le résultat
sera une adresse physique en mémoire sur 20
bits.
33
Adressage de microprocesseur 8086
b) Adresse effective : c’est le déplacement
relatif au début de segment physique
(offset).
c) Adresse logique : cette adresse est formulée
sur un double mot (1mot= 2 octets = 16bits).
Le premier mot représente le segment. Le
second mot, c’est l’adresse effective (offset).
(Segment : offset) Exemple, CS:IP.
34
Adressage de microprocesseur 8086
Exemple
• DS=A23Bh, SI=12C5h
• Donner l’adresse logique et calculer l’adresse
physique.
• Adresse logique=A23B:12C5
• Adresse physique=A23B*16+12C5
=A23B0+12C5=A3675h
35
Adressage de microprocesseur 8086
Exemple
• Calculer l’adresse réelle (physique) de
l’instruction à exécuter si DS = 1111h; CS =
3333h; ES = 4444h; et SS = 2222h ; BP =
4444h; BX = 5555h; DI = 7777h et IP = 6666h
• 1) SS:BP = 22220h+4444h = ……………..
• 2) DS:BX = 11110h + 5555h = 16665h
• 3) ES:DI = 44440h + 7777h = 4BBB7h
• 4) CS:IP = 33330h + 6666h =39996h
36
Adressage de microprocesseur 8086
Le nombre de segments utilisé définit le modèle mémoire du programme.
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 1ère instruction exécutée
par le 8086 se trouve donc à l’adresse logique 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.
37
Adressage de microprocesseur 8086
2- Les modes d’adressage :
a) Adressage immédiat : l’opérande se
trouve dans le deuxième mot de l’instruction.
Exemple : MOV BX, 4500 ; BX4500
b) Adressage registre : l’opérande se trouve
dans un registre.
Exemple : MOV AX, BX ; AXBX
38
Adressage de microprocesseur 8086
c) Adressage direct : le déplacement qui
permet d’accéder à l’opérande est contenu
dans l’instruction.
Exemple : MOV AL, [200h]
d) Adressage indirect : le déplacement qui
permet d’accéder à l’opérande est contenu
dans l’un des registres SI, DI, BX, BP.
Exemple : MOV AL, [BX]
39
Adressage de microprocesseur 8086
e) Adressage Basé : Le déplacement qui
permet d’accéder à l’opérande est égale à la
somme du déplacement mentionné dans
l’instruction et du contenu du registre de base
BX ou BP.
Exemple : MOV CL, [BX+40]
f) Adressage Indexé : Le déplacement qui
permet d’accéder à l’opérande est égale à la
somme du déplacement mentionné dans
l’instruction et du contenue de registre d’index
de SI ou DI.
Exemple : MOV AL, [SI+200h].
40
Adressage de microprocesseur 8086
g) Adressage Basé Indexé : Le déplacement
qui permet d’accéder à l’opérande est égale à
la somme du contenue du registre de base,
du contenue du registre d’index et du
déplacement mentionné dans l’instruction.
Exemple : MOV AL, [BX+SI+40h].
Ce mode d’adressage est surtout intéressant
pour accéder à l’élément d’une matrice où à
un tableau bidimensionnel.
41
Adressage de microprocesseur 8086
h) Adressage de Chaîne : L’adressage de
chaîne fait implicitement appelle aux index SI
pour la source et DI pour le destinataire.
Exemple: MOVSB
MOVSW
42
Adressage de microprocesseur 8086
i) Adressage des Entrées Sorties : L’adressage se
fait de deux manières :
Adressage direct : (utilisé si [Link]<FFh)
L’adresse du port est contenu dans le deuxième
octet de l’instruction. Le transfert de la donnée
se fait entre le port et AX dans le cas des mots,
le port et AL dans le cas des octets.
Exemple: IN AX, 40h
OUT 42h, AL
43
Adressage de microprocesseur 8086
Adressage par registre : L’adresse du port est
contenu dans le registre DX. Le transfert de la
donnée se fait entre le port et AX pour le cas
des mots, le port et AL dans le cas des octets.
Exemple : MOV DX,300h MOV DX,378h
IN AL, DX OUT DX, AL
44
Adressage de microprocesseur 8086
j) Adressage de Pile : Le sommet de la pile est
pointé par le registre SP dans le segment de
la pile qui est pointé par le SS. Les données à
empiler ou à dépiler sont uniquement des
mots. La provenance ou la destination est un
registre ou un emplacement mémoire. Le SP
est décrémentée de 2 à chaque empilement
et incrémentée de 2 à chaque dépilement.
45