Vous êtes sur la page 1sur 11

CHAPITRE III

Etude d’un microprocesseur 16 bits (Intel 8086)

III.1 Architecture interne, brochage


Le 8086 (développé en 1978) est le premier microprocesseur 16 bits de la firme Intel. Il
est équipé d'un bus de données de 16 bits multiplexé avec un bus d'adresses de 20 bits et
fonctionne à 5, 8 ou 10 MHz selon les versions. Son boîtier est de forme DIL à 40 pattes (figure
III.1). Il contient 29000 transistors gravés selon le process 3µm. Sa puissance de calcul varie
de 0,33 MIPS à 0,75 MIPS. Le 8086 est l'ancêtre des microprocesseurs actuels, l'architecture
x86 veut dire une compatibilité avec le microprocesseur 8086.

Figure III.1 Brochage du 8086 (mode Min et Max). [7]

32
Chapitre III Etude d’un microprocesseur 16 bits (8086)

Son architecture est basée sur deux unités internes distinctes : l'unité d'exécution (UE)
et l'unité d'interfaçage avec le bus (UIB). Le rôle de l'UIB est de récupérer et stocker les
informations à traiter, et d'établir les transmissions avec les bus du système. L'UE exécute les
instructions qui lui sont transmises par l'UIB (figure III.2).

Figure III.2 Architecture interne du 8086. [8]

L'unité d'exécution contient essentiellement un décodeur d'instructions, une unité


arithmétique et logique et quelques registres de travail. Le tout relié par un bus interne. L’unité
d'interfaçage avec le bus comporte un tampon de bus externe, une file d'attente de 6 octets pour
les instructions et quelques registres pour calculer et générer les adresses.

III.2 Traitement des instructions


Avec les microprocesseurs sortis avant le 8086, le traitement des instructions se passait
comme suit : 1) Extraction d'une instruction par l'UIB, 2) Exécution de l'instruction. L'unité
d’exécution (UE) reste inactive un court instant, pendant que l'unité d'interfaçage avec le bus
(UIB) extrait l'instruction suivante. Le traitement pipeline a été introduit dans le 8086 pour
remédier à ce problème. Pendant que l'UE exécute l'instruction en cours, l'instruction suivante
est chargée dans l'UIB. Les instructions qui suivront sont placées dans une file d'attente pour
être exécutées à tour de rôle. De cette façon, l'UE est continuellement en activité.

33
Chapitre III Etude d’un microprocesseur 16 bits (8086)

III.3 Registres internes


Le 8086 possède quatre types de registres de 16 bits. Il y a huit registres généraux
subdivisés en deux ensembles : registres de données et registres de pointeurs et d'indexes, ainsi
que quatre registres de segments, un pointeur d’instructions et un registre d’état.

III.3.1 Registres de données


Les quatre registres de données AX, BX, CX, DX, servent d'accumulateur et de registres
d’opérande. On les utilise pour les opérations arithmétiques et logiques et pour les transferts,
bien qu'ils aient chacun une spécificité : AX est utilisé comme accumulateur, BX sert de registre
de base pour adressage, CX sert de
compteur de données et DX sert pour les
divisions et les multiplications en
association avec AX. Chaque registre est
en réalité divisé en deux registres distincts
de 8 bits.

III.3.2 Registres de pointeurs et d’indexes


Ce sont les registres SI, DI, SP et BP. Ils participent aux opérations arithmétiques et
logiques. Les deux premiers sont pris par
défaut pour exprimer un déplacement à
l’intérieur du segment données, les deux
derniers sont pris par défaut pour
exprimer un déplacement à l’intérieur du
segment pile.

III.3.3 Registres de segments


Le 8086 a quatre registres segments de 16 bits chacun : CS (code segment), DS (Data
segment), ES (Extra segment) et SS (stack
segment). 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 (64 Ko).

34
Chapitre III Etude d’un microprocesseur 16 bits (8086)

III.3.4 Pointeur d'instructions et registre d'état


Le registre IP (compteur de programme) : Instruction Pointer ou compteur de
programme, contient l'adresse de l'emplacement mémoire où se situe la prochaine instruction à
exécuter (à l'intérieur du segment de code). 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.

Le registre d'état (Flags) est formé de plusieurs bits appelés drapeaux ou indicateurs qui
sont positionnés automatiquement par l'unité arithmétique et logique après chaque opération.
Trois (3) de ces bits participent au control du microprocesseur. (Figure III.3)

Figure III.3 Registre d’état. [9]

CF (Carry Flag) : Indicateur de report ou retenue. Ce bit est mis à 1 si une addition ou une
soustraction a générée une retenue ou un report.

PF (Parity Flag) : Indicateur de parité paire. Ce bit est mis à 1 si (après une opération
arithmétique ou logique) le résultat contient un nombre pair de ʺ1ʺ.

AF (Auxiliary Carry Flag) : Indicateur de retenue auxiliaire. Ce bit est mis à 1 s’il y a retenue
du quartet de poids faible vers le quartet de poids plus fort (calcul BCD).

ZF (Zero Flag) : Indicateur de zéro. Ce bit est mis à 1 si le résultat d’une opération arithmétique
ou logique et nul.

SF (Sign Flag) : Indicateur de signe. Ce bit est mis à 1 si le résultat d’une opération arithmétique
ou logique est négatif.

TF (Trap Flag) : Indicateur d’exécution pas à pas. On met ce bit à 1 pour une exécution du
programme pas à pas.

35
Chapitre III Etude d’un microprocesseur 16 bits (8086)

IF (Interrupt Flag) : Indicateur d’interruption. En mettant ce bit à 1, les interruptions sont


autorisées. Pour masquer les interruptions, ce bit doit être mis à 0.

DF (Direction Flag) : Indicateur de direction. En traitant les chaînes de caractères, si ce bit est
mis à 1, on commence par les adresses hautes vers les adresses basses (auto
décrémentation de SI et DI). Si le bit est mis à 0, on fait les traitements en inverse.

OF (Overflow Flag) : Indicateur de dépassement arithmétique. Ce bit est mis à 1 lorsque la taille
du résultat d'une opération excède la capacité de son emplacement de destination.
(Un bit significatif a été perdu). [7]

III.4 Gestion de la mémoire

Tous les registres du 8086 ont une taille de 16 bits. Avec cette taille on peut accéder à
65536 emplacements mémoires différents (216 = 64 Ko). La largeur du bus d’adresses du 8086
est de 20 bits soit un espace mémoire adressable de 1 Méga (220 = 1 Mo). Nul registre ne couvre
la totalité de cet espace mémoire. Pour résoudre ce problème, Intel propose de segmenter la
mémoire en petit bloc de 64Ko chacun. Pour indiquer une adresse mémoire au processeur on
doit utiliser deux registres. Chaque segment débute à l'endroit spécifié par le registre segment.
Le déplacement (offset) à l'intérieur de chaque segment se fait par un autre registre qui permet
de trouver une information à l'intérieur du segment.

L'unité d'interfaçage avec le bus (UIB) présente à l’intérieur du microprocesseur


possède un module de génération d’adresses qui permet de calculer une adresse physique (sur
20 bits) à partir d’une adresse logique (une paire de registres) et mettre le résultat dans le tampon
du bus d’adresse. L’adresse physique = Segment * 16 + offset. Comme exemple la paire de
registres CS:IP pointe sur le code d'une instruction qui a comme adresse physique CS*16+IP.

Figure III.4 Génération de l’adresse physique. [9]


36
Chapitre III Etude d’un microprocesseur 16 bits (8086)

III.5 Organisation de la mémoire


III.5.1 Organisation logique
Logiquement la mémoire est organisée comme indiqué sur la figure III.5. Ça ressemble
à un tableau linéaire avec des cases mémoires numérotées de manière ascendante (figure III.5a)
ou descendante (figure III.5b).

Figure III.5 Organisation logique de la mémoire. [7]

Certains emplacements en mémoire sont réservés à des opérations spécifiques du


microprocesseur (figure III.5b). Les emplacements allant de l'adresse FFFF0h à FFFFFh sont réservés
pour des opérations comprenant un saut vers la routine de chargement du programme initial. Après
RESET, le microprocesseur commence toujours l'exécution à l'emplacement FFFF0h où le saut doit être
placé. Les emplacements de 00000h à 003FFh sont réservés aux opérations d'interruption. La routine de
service de chacun des 256 types d'interruption possibles est pointée par un élément de pointeur de 4
octets constitué d'une adresse de segment de 16 bits et d'une adresse de décalage de 16 bits.
Les éléments de pointeur sont supposés avoir été stockés aux emplacements respectifs dans
la mémoire réservée avant l'occurrence des interruptions.

III.5.2 Organisation physique


La mémoire est divisée logiquement en des zones appelées segments de 64 Ko
maximum chacune. A chaque zone est associé un registre segment. Ces segments sont appelés
segment de code, segment de données, segment de données supplémentaires et segments de
pile. Chaque type de données doit être stocké dans la zone ou segment approprié pour faciliter

37
Chapitre III Etude d’un microprocesseur 16 bits (8086)

l’accès. Le poids fort de l’adresse de chaque zone est la valeur contenue dans le registre
segment, l’emplacement mémoire voulu dans ce segment est référencé par un registre d’offset.

Toutes les références de mémoire sont faites par rapport aux adresses de base contenues
dans les registres de segments. Les types de segments ont été choisis en fonction des besoins
des programmes. Le registre de segment à sélectionner, s’il n’est spécifié explicitement, sera
automatiquement choisi selon le tableau de correspondance suivant :

Tableau III.1 Table de correspondance des registres segments. [7]

Référence mémoire Registre segment utilisé

Instruction Code (CS)

Pile Stack (SS)

Donnée locale Data (DS)

Donnée externe (globale) Extra (ES)

Le microprocesseur 8086 est un processeur 16 bits (bus de données de 16 bits), ce qui


lui donne la possibilité d'accéder en même temps à deux cases mémoires de 8 bits. En effet pour
le 8086, la mémoire est organisée en deux bancs (un banc pair et un banc impair chacun de 512
Ko) comme le montre la figure III.6.

Si on veut accéder à un mot : le poids faible sera chargé sur les lignes D0..D7 et le poids
fort sera chargé sur les lignes D8..D15 (si l'adresse est paire, l'accès se fait avec un seul cycle).
Si l’adresse du mot voulu est impaire, alors l’accès se fait en deux cycles. Le premier cycle pour
chercher l’octet de l’adresse impaire et le second pour chercher l’octet de l’adresse paire. Le
flux de données est toujours extrait de la mémoire sous forme de mots et est adressé en interne
par le processeur au niveau de l'octet si nécessaire. Le microprocesseur doit ensuite permuter
ces deux octets pour avoir le poids faible sur les lignes D0..D7 et le poids fort sur les lignes
D8..D15.

38
Chapitre III Etude d’un microprocesseur 16 bits (8086)

Figure III.6 Organisation logique de la mémoire.

III.6 Schéma d’un système à base de 8086

Le 8086 possède un bus d'adresses et de données combiné communément appelé bus


multiplexé dans le temps. Cette technique fournit l'utilisation la plus efficace des broches sur le
processeur tout en permettant l'utilisation d'un boîtier standard à 40 pattes. Le bus peut être
démultiplexé au niveau du processeur avec un seul ensemble de verrous d'adresse si un bus
standard non multiplexé est souhaité pour le système.

Le 8086 supporte deux modes de fonctionnement, le mode minimum et le mode

maximum. La broche 33 (MN/ MX ) du 8086 permet de définir la configuration du système.

III.6.1 Configuration typique en mode minimum

Ce mode permet de réduire au minimum le nombre de circuits externes nécessaires pour

réaliser un petit système monoprocesseur. La broche MN/ MX doit être maintenue à l’état

haut, le 8086 contrôle alors lui-même le bus et génère les signaux de commande de bus sur les
broches 24 à 31 (figure III.7). Pour maintenir stable les 20 bits d’adresse, on a besoin de trois
tampons d’adresses (8282 ou autres). Le signal ALE est utilisé à cet effet.

Pour renforcer les signaux du bus de données, on utilise deux driver de bus
bidirectionnels 8286 ou autres. Ces deux circuits sont optionnels puisque le microprocesseur

maintient les données valides tout le long du cycle d’écriture/lecture. Le signal DT/ R est

utilisé pour déterminer la direction du flux de données à travers ces drivers.

39
Chapitre III Etude d’un microprocesseur 16 bits (8086)

Figure III.7 Configuration en mode minimum. [7]


40
Chapitre III Etude d’un microprocesseur 16 bits (8086)

III.6.2 Configuration typique en mode maximum


Ce mode étend l’architecture du système pour permettre une configuration multi-

processeurs. Lorsque la broche MN/ MX est à l’état bas, le 8086 traite les broches 24 à 31 en

mode maximum. Un contrôleur de bus tel que le circuit 8288 est nécessaire. Ce dernier
interprète les informations d'état codées en S0, S2, S2 (figure III.1) pour générer les signaux de
synchronisation et de commande de bus compatibles avec l'architecture MULTIBUS
(figureIII.8).

Dans ce mode le jeu d’instruction du microprocesseur est étendu pour inclure les

instructions du coprocesseur numérique [10]. Le signal de lecture RD est désormais séparé en

deux signaux par le contrôleur de bus 8288 ; un signal de lecture mémoire ( MRDC ) et un

signal de lecture d’E/S ( IORC ). La même chose s’applique au signal d’écriture WR ; l’un

pour la mémoire ( MWTC ) et l’autre pour les E/S ( IOWC ).

41
Chapitre III Etude d’un microprocesseur 16 bits (8086)

Figure III.8 Configuration en mode maximum. [7]

42

Vous aimerez peut-être aussi