Microprocesseur Intel 8086

Cette leçon présente une étude détaillée du microprocesseur Intel 8086, un composant fondamental dans l'évolution des microprocesseurs 16 bits. Elle s'inscrit dans un cours d'architecture des microprocesseurs et couvre la description physique, les signaux, l'organisation interne, la gestion de la mémoire et le fonctionnement du bus système du 8086.

D'après le document Microprocesseur Intel 8086

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

Microprocesseur Intel 8086

Computer Architecture · PDF · 21 pages · 1978

Afficher l'aperçu du document

Consulter le document original →

Cette leçon présente une étude détaillée du microprocesseur Intel 8086, un composant fondamental dans l'évolution des microprocesseurs 16 bits. Elle s'inscrit dans un cours d'architecture des microprocesseurs et couvre la description physique, les signaux, l'organisation interne, la gestion de la mémoire et le fonctionnement du bus système du 8086.

Description physique et architecture du 8086

Le microprocesseur Intel 8086, apparu en 1978, est un microprocesseur 16 bits et le premier de la famille Intel 80x86. Il se présente sous la forme d’un boîtier DIP (Dual In-line Package) à 40 broches. Cette architecture a servi de base aux générations suivantes comme les 80186, 80286, 80386, 80486 et Pentium.

Les signaux du microprocesseur 8086

Le 8086 utilise plusieurs signaux essentiels pour son fonctionnement :

  • CLK : signal d’horloge qui cadence le microprocesseur, fourni par un générateur d’horloge 8284.
  • RESET : remise à zéro du microprocesseur. Lorsqu’il est mis à l’état haut pendant au moins 4 périodes d’horloge, le microprocesseur est réinitialisé et exécute l’instruction à l’adresse FFFF0H (adresse de bootstrap).
  • READY : synchronisation avec la mémoire, également fourni par le générateur d’horloge.
  • TEST : mise en attente du microprocesseur en attente d’un événement extérieur.
  • INTA : indique que le microprocesseur accepte une interruption.
  • HOLD et HLDA : gestion de la demande d’accès direct à la mémoire (DMA).
  • INTR et NMI : entrées de demande d’interruption. INTR est une interruption normale, tandis que NMI (Non Maskable Interrupt) est une 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 multiplexés entre bus d’adresses (poids faible) et bus de données.
  • MN/MX : sélection du mode de fonctionnement. MN/MX = 1 pour mode minimum (fonctionnement autonome), MN/MX = 0 pour mode maximum (contrôleur de bus 8288 utilisé, permettant un système multiprocesseur).

Multiplexage et démultiplexage des bus d’adresses et de données

Le bus AD0 à AD15 est multiplexé, c’est-à-dire qu’il transporte alternativement les adresses puis les données. Pour séparer ces deux types de signaux, un circuit de démultiplexage est nécessaire. Ce démultiplexage est réalisé à l’aide d’un verrou (latch) commandé par le signal ALE (Address Latch Enable) :

  • Si ALE = 1, le verrou est transparent (Q = D).
  • Si ALE = 0, le verrou mémorise la dernière valeur de D sur ses sorties Q.

Les signaux de lecture (RD) et d’écriture (WR) sont générés uniquement lorsque les données sont présentes sur le bus A/D.

Des exemples de circuits de bascules D utilisés pour ce démultiplexage sont les circuits 8282, 74373, 74573.

Signaux de contrôle et tampons de bus

  • RD : signal de lecture d’une donnée.
  • WR : signal d’écriture d’une donnée.
  • M/IO : 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 circulent sur le bus A/D, équivalent de ALE pour les données.
  • DT/R : Data Transmit/Receive, indique le sens du transfert des données :
    • DT/R = 1 : données émises par le microprocesseur (écriture).
    • DT/R = 0 : données reçues par le microprocesseur (lecture).

Les signaux DEN et DT/R pilotent des tampons (buffers) qui amplifient le courant sur le bus de données. Des exemples de circuits tampons bidirectionnels sont les 8286 ou 74245.

Gestion du bus de données et adressage mémoire

Le signal BHE (Bus High Enable) permet de sélectionner l’octet de poids fort sur le bus de données. Le 8086 possède un bus d’adresses de 20 bits, ce qui permet d’adresser 1 Mo de mémoire, soit 512 K mots de 16 bits. Cet espace mémoire est divisé en deux banques de 512 Ko chacune :

  • Banque inférieure (paire) sélectionnée par A0, contenant les octets de poids faible.
  • Banque supérieure (impaire) sélectionnée par BHE, contenant les octets de poids fort.

Seuls les bits A1 à A19 servent à désigner une case mémoire dans chaque banque. Le microprocesseur peut lire ou écrire des données sur 8 bits ou 16 bits selon la combinaison des signaux BHE et A0 :

BHE A0 Octets transférés
00Les deux octets (mot complet)
01Octet fort (adresse impaire)
10Octet faible (adresse paire)
11Aucun octet

Remarque importante : le 8086 ne peut lire un mot de 16 bits en une seule opération que si l’octet de poids fort est à une adresse impaire et l’octet de poids faible à une adresse paire (alignement sur adresses paires). Sinon, la lecture doit se faire en deux opérations successives, ce qui ralentit le transfert.

Organisation interne du microprocesseur 8086

Le 8086 est constitué de deux unités fonctionnant en parallèle :

  • EU (Execution Unit) : unité d’exécution qui traite les instructions.
  • BIU (Bus Interface Unit) : unité d’interface de bus qui récupère les instructions en mémoire et les place dans une file d’attente.

Ces deux unités fonctionnent simultanément, ce qui accélère l’exécution des programmes.

Les registres du 8086

Le microprocesseur contient 14 registres répartis en quatre groupes :

Registres généraux (4 registres 16 bits)

AX, BX, CX, DX, chacun pouvant être divisé en deux registres 8 bits (par exemple AX = AH, AL). Ils servent à contenir temporairement des données et peuvent avoir des usages spécifiques, par exemple AX comme accumulateur et CX comme compteur.

Registres de pointeurs et d’index (4 registres 16 bits)

  • Pointeurs :
    • SP (Stack Pointer) : pointeur de pile, zone de sauvegarde temporaire.
    • BP (Base Pointer) : pointeur de base, utilisé pour adresser des données sur la pile.
  • Index :
    • SI (Source Index) et DI (Destination Index) : utilisés pour les transferts de chaînes d’octets entre zones mémoire.

Pointeur d’instruction et registre d’indicateurs (flags) (2 registres 16 bits)

  • IP (Instruction Pointer) : contient l’adresse de la prochaine instruction à exécuter.
  • Flags : indicateurs d’état du processeur, comprenant notamment :
    • CF : indicateur de retenue (carry)
    • PF : indicateur de parité
    • AF : indicateur de retenue auxiliaire
    • ZF : indicateur de zéro
    • SF : indicateur de signe
    • TF : indicateur d’exécution pas à pas (trap)
    • IF : indicateur d’autorisation d’interruption
    • DF : indicateur de décrémentation
    • OF : indicateur de dépassement (overflow)

Registres de segments (4 registres 16 bits)

  • CS (Code Segment) : segment contenant le code du programme.
  • DS (Data Segment) : segment contenant les données.
  • SS (Stack Segment) : segment contenant la pile.
  • ES (Extra Segment) : segment supplémentaire pour les données.

Ces registres, associés aux pointeurs et index, permettent d’adresser l’ensemble de la mémoire.

Gestion de la mémoire et segmentation

Le 8086 peut adresser un espace mémoire de 2^20 = 1 048 576 octets (1 Mo) grâce à un bus d’adresses de 20 bits. Cet espace est divisé en segments de 64 Ko (65 536 octets), définis par une adresse de départ multiple de 16 (les 4 bits de poids faible sont donc à zéro).

La segmentation repose sur deux valeurs sur 16 bits :

  • l’adresse du segment
  • un offset (déplacement) dans ce segment

La combinaison de ces deux valeurs définit une adresse logique notée segment : offset.

L’adresse physique, envoyée sur le bus d’adresses A0 à A19, est calculée par :

adresse physique = 16 × segment + offset

Ce calcul correspond à un décalage de 4 bits vers la gauche du segment, équivalent à une multiplication par 2^4 = 16.

Segments accessibles et modèle mémoire

À un instant donné, le 8086 a accès à quatre segments dont les adresses sont dans les registres CS, DS, SS et ES :

  • CS est associé à IP et contient les instructions du programme.
  • DS et ES sont associés aux registres d’index SI et DI pour les données.
  • SS est associé aux pointeurs SP et BP pour la gestion de la pile.

Les segments peuvent se chevaucher ou se recouvrir complètement, ce qui influence le modèle mémoire utilisé par le programme.

Initialisation après RESET

Après un RESET, les registres contiennent les valeurs suivantes :

  • IP = 0000H
  • CS = FFFFH
  • DS = 0000H
  • ES = 0000H
  • SS = 0000H

La première instruction exécutée se trouve donc à l’adresse logique FFFFH : 0000H, soit l’adresse physique FFFF0H, appelée bootstrap. Cette instruction est généralement un saut vers le programme principal qui initialise ensuite les autres registres de segment.

Points clés

  • Le 8086 est un microprocesseur 16 bits avec un bus d’adresses de 20 bits, permettant d’adresser 1 Mo de mémoire.
  • Le bus AD0-AD15 est multiplexé entre adresses et données, nécessitant un démultiplexage via un verrou commandé par ALE.
  • Le microprocesseur fonctionne en mode minimum (autonome) ou maximum (avec contrôleur de bus 8288 pour systèmes multiprocesseurs).
  • La mémoire est organisée en segments de 64 Ko, identifiés par un registre de segment et un offset, formant une adresse logique.
  • L’adresse physique est calculée par la formule : adresse physique = 16 × segment + offset.
  • Le 8086 possède 14 registres répartis en registres généraux, pointeurs/index, pointeur d’instruction et flags, et registres de segments.
  • Le microprocesseur contient deux unités parallèles : l’unité d’exécution (EU) et l’unité d’interface de bus (BIU) pour optimiser la vitesse d’exécution.
  • Le signal BHE permet de gérer la lecture/écriture sur les octets pairs et impairs, avec une contrainte d’alignement pour les accès 16 bits.
  • Après RESET, le 8086 démarre l’exécution à l’adresse physique FFFF0H (bootstrap) avant d’initialiser le programme principal.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions