Vous êtes sur la page 1sur 52

Systèmes Microprogrammés

Systèmes à Microprocesseurs
--Cas du Microprocesseur Intel 8086--
Pr. A. AIT MADI

RST(S6)-ENSA -KENITRA 1
Plan

Chronologie des microprocesseurs


Rappels
Pourquoi 8086 ?
Brochage du 8086
Système minimum
Architecture du 8086
Registres du 8086
Segmentation de la mémoire
Calcul de l’adresse
Exercices

RST(S6)-ENSA -KENITRA 2
Chronologie des microprocesseurs
L'histoire des microprocesseurs est intimement liée à celle de la technologie des semi-
conducteurs dont voici les principales étapes :
 1947: Invention du transistor
 1958: TEXAS INSTRUMENTS produit le 1er circuit intégré (CI)
 1961: Mise au point des technologies bipolaires TTL et ECL
 1964: Intégration à petite échelle (SSI de 1 à 10 transistors)
 1965: Intégration à moyenne échelle (MSI de 10 à 500 transistors)
 1970: Mise au point de la technologie MOS
 1971: Intégration à grande échelle (LSI de 500 à 20 000 transistors)
 1985: Intégration à très grande échelle (VLSI plus de 20 000 transistors)

C’est l’apparition de la technologie CMOS permettant un grand degré d’intégration qui


a ouvert la voie à la fabrication de composants capables de contenir l’unité de
contrôle et l’unité de traitement d’un ordinateur sur une seule puce. Ce composant
portera le nom du « microprocesseur »

RST(S6)-ENSA -KENITRA 3
Chronologie des microprocesseurs

Grâce aux progrès de l'intégration, l'augmentation des performances a porté


sur :
 La vitesse de fonctionnement
 La largeur des mots traités (8, 16, 32, 64 bits)
 Le nombre et la complexité des opérations réalisables

L'intégration a également permis de rassembler le microprocesseur et les éléments


associés (mémoire, organes d'entrée-sortie,...) au sein d'un seul circuit appelé
"microcontrôleur". Ce type de composant s'est répandu dans
un très grand nombre de domaines (télécommunications, télévision,
électroménager, hifi...).

RST(S6)-ENSA -KENITRA 4
Chronologie des microprocesseurs
 Années 1970

Dans les années


1970 les
microprocesseurs
traitent des mots
de 8 bits et sont
surtout fabriqués
en technologie
NMOS

RST(S6)-ENSA -KENITRA 5
Chronologie des microprocesseurs
 Années 1980

Dans les années


1980 les
microprocesseurs
traitent des mots
de 16 et même 32
bits et sont surtout
fabriqués en
technologie
CMOS.

RST(S6)-ENSA -KENITRA 6
Chronologie des microprocesseurs
 Années 1990

Dans les
années 1990 les
microprocesseu
rs traitent des
mots de 32 bits.
La fréquence du
bus ne peut
plus suivre celle
du
microprocesseur
. Apparaissent
donc deux
horloges : une
externe et une
interne, plus
rapide.

RST(S6)-ENSA -KENITRA 7
Chronologie des microprocesseurs
 Années 1990

RST(S6)-ENSA -KENITRA 8
Chronologie des microprocesseurs
 Années 2000
Dans les années
2000, la
progression de la
fréquence ralentit
sensiblement à
cause de
l'augmentation
rapide de la
dissipation
thermique, et ce
malgré les
diminutions
successives de la
finesse de gravure.
Des processeurs
multi-cœur font
peu à peu leur
apparition.

RST(S6)-ENSA -KENITRA 9
Chronologie des microprocesseurs
 Année 2000

RST(S6)-ENSA -KENITRA 10
Chronologie des microprocesseurs
 Année 2010

Dans les années 2010, la fréquence de l'horloge est stable. Le nombre de cœurs
augmente peu à peu

Dans la suite de ce cours nous allons nous intéresser à l’étude du


microprocesseur de la famille Intel 8086

RST(S6)-ENSA -KENITRA 11
Rappels
Architecture d'un système à base de microprocesseur :

Un système à base de microprocesseur est formé par :


 Une unité CPU (central processing unit )
 Une mémoire (ROM et RAM)
 Des ports d'entrées/sorties.
 Des Bus (adresse, données et contrôles)

RST(S6)-ENSA -KENITRA 12
Rappels
Architecture d'un CPU:

Une CPU est formée par les trois éléments fonctionnels interconnectés suivants :
 Registres (élément de mémorisation interne au processeur et contenant une
valeur)
 UAL (ALU en anglais) : Unité arithmétique et logique. (opération arithmétiques
et logiques)
 Unité de contrôle (lecture en mémoire et décodage de l’instruction)

RST(S6)-ENSA -KENITRA 13
Rappels
Ecriture en mémoire:
Pour écrire une donnée dans la mémoire le microprocesseur doit:
 placer l'adresse de la donnée sur le bus d'adresses (son emplacement dans la
mémoire)
 puis placer la donnée sur le bus de données
 et enfin générer le signal WRITE (ordre d'écriture dans la mémoire).

RST(S6)-ENSA -KENITRA 14
Rappels
Lecture d’une mémoire:
Pour lire une donnée de la mémoire le microprocesseur doit:
 connaître son emplacement, en effet déposer son adresse sur le bus d'adresses
 puis générer le signal READ (demande une opération de lecture de la mémoire)
 recevoir la donnée acheminée à travers le bus de données. La donnée sera
stockée dans un registre dans le microprocesseur.

RST(S6)-ENSA -KENITRA 15
Pourquoi 8086 ?

 L'Intel 8086 (également appelé iAPX 86) est un microprocesseur CISC 16 bits
fabriqué par Intel à partir de 1978

 C'est le premier processeur de la famille Intel x86 (8086, 80186, 80286, 80386,
80486, Pentium, ...),

 qui est devenue l'architecture de processeur la plus répandue dans le monde des
ordinateurs personnels, stations de travail et serveurs informatiques.

 La majeure partie des ordinateurs sont équipés de Microprocesseurs Intel


compatibles avec le 8086

 un ancien programme écrit pour un 8086 fonctionne toujours sur ordinateur


équipé d'un Pentium IV…

 Maitriser la programmation en assembleur 8086 ouvre un grand pas vers la


programmation des PCs actuels

RST(S6)-ENSA -KENITRA 16
Brochage du 8086

RST(S6)-ENSA -KENITRA 17
Brochage du 8086
Schéma fonctionnel

RST(S6)-ENSA -KENITRA 18
Brochage du 8086
 Le 8086 se présente sous la forme d’un boitier de 40 broches
 Il dispose de 20 lignes pour le bus d’adresse A19..A16AD15..AD0
 Un Bus de donnée de 16 lignes
 Il peut adresser une mémoire de 1Mo
 Vcc et GND: assurent l’alimentation du microprocesseur
 CLK (Clock): entrée destinée à recevoir les signaux de l’horloge système

 INT(Interrupt request) : entrée de demande d’interruption en provenance des


entrées/sorties
 RESET : permet d’initialiser le microprocesseur, c’est-à-dire exécuter
l’instruction se trouvant à l’adresse mémoire FFFF0h(adresse de BootStrap)
 /WR: ce signal provoque l’exécution d’une écriture par le processeur
 /RD : ce signal, actif à l’état bas, indique à l’environnement qu’une phase de
lecture est entamée par le microprocesseur
 AD15..AD0: broches à 3 états (0,1,HZ) servant à la fois pour les données et
les adresses

RST(S6)-ENSA -KENITRA 19
Brochage du 8086
 READY: entrée de synchronisation avec la mémoire
 /TEST: entrée de mise en attente du microprocesseur d’un événement
extérieur
 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 commandes sont produits par
un contrôleur de bus, le 8288. ce mode permet de réaliser des systèmes
multiprocesseurs
 NMI et INTR : entrées de demande d’interruption. INTR : interruption normale,
NMI (Non Maskable Interrupt) : interruption prioritaire.
 /INTA : (Interrupt Acknowledge), indique que le microprocesseur accepte
l’interruption.
 HOLD et HLDA : signaux de demande d’accord d’accès direct à la mémoire
(DMA).
 S0 à S7 : signaux d’état indiquant le type d’opération en cours sur le bus.
 A16/S3 `a A19/S6 : 4 bits de poids fort du bus d’adresses, multiplexés avec 4
bits d ’état

RST(S6)-ENSA -KENITRA 20
Brochage du 8086
 ALE(Adress Latch Enable): commande de la mémorisation de l’adresse
générée par le microprocesseur. La mémorisation se fait dans une bascule
Verrou (Latch)
Circuit de démultiplexage du bus AD

ALE=1: le verrou est transparent ; Q copie D


ALE=0 : mémorisation de la dernière valeur de D
RST(S6)-ENSA -KENITRA 21
Brochage du 8086
Chronogramme du BUS AD avec signaux de contrôles (ALE, /RD et /WR)

Les signaux de contrôle /RD et /WR ne sont générés que lorsque les
données sont présentes sur le bus ADi

RST(S6)-ENSA -KENITRA 22
Brochage du 8086
 M//IO (Memory Input/Output): indique si le 8086 adresse une mémoire
(M//IO =1) ou une interface d’entrée/sortie (M//IO =0)
 /DNE (Data Enable): indique que des données sont en train de circuler sur le
bus AD (équivalent de ALE pour les adresses)

 DT//R (Data Transmit/Receive): indique le sens de 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)

/DNE et DT//R permettent


la commande de tampons
du bus (Buffers) permettant
d’amplifier le courant du
bus de données

RST(S6)-ENSA -KENITRA 23
Brochage du 8086
 /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 (impaire) et la banque supérieure (paire) 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 de poids fort

RST(S6)-ENSA -KENITRA 24
Brochage du 8086

RST(S6)-ENSA -KENITRA 25
Générateur Système minimum Exemple de buffers:
d’horloge 2 transmetteurs
3 Latchs 8 bits
bidirectionnels 8 bits
chacun

RST(S6)-ENSA -KENITRA 26
Architecture du 8086

RST(S6)-ENSA -KENITRA 27
Architecture du 8086
On distingue deux unités internes:
 Unité d’Interfaçage de Bus (UIB) qui a pour rôle de:
• récupérer et stocker les informations à traiter
• établir les transmissions avec les bus du système
 Unité d’Exécution (UE) qui a pour rôle de:
• exécuter les instructions qui lui sont transmises par l'UIB

Le traitement des instructions se passait comme suit:


 Génération des adresses de données mémoire
 Extraction des instructions par l'UIB à partir de la mémoire et les range dans une
file d’attente de 6 octets
 L’unité UE reçoit les instructions de la file d’attente, les décodent et les exécutent
 Extraction de nouvelles instructions par l'UIB

RST(S6)-ENSA -KENITRA 28
Registres du 8086
Le microprocesseur 8086 dispose de 14 registres

 4 registres généraux (AX, BX, CX, DX) de 16 bits


 4 Registres pointeurs et indexes (SP, BP, SI et DI) de 16 bits
 4 Registres segments (CS, DS, SS et ES) de 16 bits
 1 Registre IP (Instruction Pointer) de 16 bits
 1 registre d’état de 16 bits

RST(S6)-ENSA -KENITRA 29
Registres du 8086
 4 registres généraux (AX, BX, CX, DX) de 16 bits
• Ils peuvent être utilisés dans toutes les opérations arithmétiques et logiques
• chaque registre est divisé en deux registres distincts de 8 bits
• on peut utiliser une partie du registre si on veut y stocker une valeur n'excédant
pas 8 bits
• Si la valeur qu’on désire ranger dans ce type de registre excède 8 bits, on
utilise le registre complet

RST(S6)-ENSA -KENITRA 30
Registres du 8086
• Registre AX (Accumulateur): avec ce registre se font:
 Toutes les opérations de transfert de données avec les entrées/sorties
 Toutes les opérations de traitement des chaines de caractères
 Toutes les opérations arithmétiques et logiques
• Registre BX (registre de base)
 Utilisé pour l’adressage de données dans une zone mémoire différente de
la zone code
• Registre CX (registre compteur)
 Sert comme compteur avec des instructions de boucles, pour compter le
nombre d’itérations
 Remarque: le compteur CL sert en tant que compteur de nombre de
décalage et de rotation (à droite ou à gauche) de bits
• Registre DX (registre de données)
 Utilisé lors des opérations de multiplication et de division

RST(S6)-ENSA -KENITRA 31
Registres du 8086

 1 Registre IP (Instruction Pointer) de 16 bits


• Il s’agit du compteur programme
• Il contient l'adresse de l'emplacement mémoire où se situe la prochaine
instruction à exécuter
• 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

RST(S6)-ENSA -KENITRA 32
Registres du 8086
 1 registre d’état de 16 bits:
• Le registre d'état sert à contenir l'état de certaines opérations effectuées par le
processeur
• L’état d’une opération est donné par 9 drapeaux (Flags) ou indicateurs

 X: bit non utilisé


 CF (Carry Flag) :
o Mis à 1 lorsqu’il y a une retenue du résultat à 8 ou 16 bits
o Il intervient dans les opérations d'additions (retenue) et de soustractions
(emprunt) sur des entiers naturels

RST(S6)-ENSA -KENITRA 33
Registres du 8086
 PF (Parity Flag) :
o Mis à 1 lorsque le résultat de l’opération contient un nombre pair de 1
o Sinon il est mis à 0
 AF (Auxiliary Carry Flag) :
o Ce flag est à 1 lorsqu’un débordement non signé a lieu sur les 4 bits de
poids faible
 ZF (Zero Flag)
o Ce flag est à 1 lorsque le résultat est nul
 SF(Sign Flag)
o Ce flag est positionné à 1 si le bit du poids fort du résultat d’une addition ou
soustraction est 1

RST(S6)-ENSA -KENITRA 34
Registres du 8086

 OF (Overflow Flag) :
o Indique un dépassement de capacité quand on travaille avec des nombres
signés. Comme par exemple si la somme de 2 nombres positifs donne un
nombre négatif ou inversement. (40h + 40h = 80h et OF=1)
 DF (Direction Flag) :
o Ce flag est utilisé par quelques instructions pour traiter les chaines de
caractères
o Lorsque ce flag est placé à 0, la chaine est traitée octet par octet en
incrémentant les registres d’indexe SI et DI
o Lorsque ce flag est placé à 1, la chaine est traité octet par octet en
décrémentant les registres d’indexe SI et DI

RST(S6)-ENSA -KENITRA 35
Registres du 8086

 IF (Interrupt Flag)
o IF=1: les interruptions, générées par des dispositifs externes, sont
autorisées
o IF=0: ces interruptions sont masquées
 TF (Trap Flag) :
o Mis à 1 pour que le microprocesseur exécute le programme pas à pas,
pour faciliter la recherche des erreurs d’exécution

RST(S6)-ENSA -KENITRA 36
Registres du 8086
 4 Registres pointeurs et indexes (SP, BP, SI et DI) de 16 bits
• Ces registres sont plus spécialement adaptés au traitement des
éléments dans la mémoire
• Ils sont en général munis de propriétés d'incrémentation et de
décrémentation

RST(S6)-ENSA -KENITRA 37
Registres du 8086

• Registre SI (Source Index)


 Permet de pointer la mémoire
 Il sert pour les instructions de chaines de caractères: il pointe sur le caractère
source
• Registre DI (Destination Index)
 Il pointe aussi sur la mémoire
 Il sert pour le traitement des chaine de caractères: il pointe sur le caractère
destination
• Registre SP et BP (Stack Pointer et Base Pointer)
 Ils pointent sur l’adresse une zone mémoire appelée Pile (Stack)
 Le registre BP a un rôle proche de celui de BX, mais généralement utilisé
avec le segment de pile

RST(S6)-ENSA -KENITRA 38
Registres du 8086

 4 Registres segments (CS, DS, SS et ES) de 16 bits


• 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

un segment =un bloc mémoire

RST(S6)-ENSA -KENITRA 39
Segmentation de la mémoire

• le 8086 a 20 lignes d’adresses et peut adresser


donc 220 cases mémoire, soit 1Mo
de 00000h à FFFFFH
• Chaque case mémoire contient 1 byte (octet)
• Comme les registres n’ont que 16 bits,
un registre seule ne peut accéder qu’à 64Ko
de mémoire
• Pour accéder à toutes les adresses de
la mémoire on se sert des registres segments

• Il y a 4 segments de mémoire:
 1 segment de code ( le programme)
 2 segments de données (les variables)
 1 segment pour la pile (voir plus loin)

RST(S6)-ENSA -KENITRA 40
Segmentation de la mémoire

• CS : pointe sur le segment qui contient les codes des instructions du


programme en cours
• DS : pointe sur le segment des variables globales du programme
• ES : pointe sur le segment de données supplémentaire. Il est utilisé par le
microprocesseur lorsque l'accès aux autres registres est devenu difficile ou
impossible pour modifier des données
• SS : pointe sur la pile
• Les registres segments ont 16 bits. Leur valeur multipliée par 16 (ajouter un 0h
à droite) donne la première adresse d’un segment sur 20 bits

RST(S6)-ENSA -KENITRA 41
Segmentation de la mémoire

• Les segments peuvent être superposés (Overlap): les segments ne sont pas
nécessairement distincts les uns des autres, ils peuvent se chevaucher ou se
recouvrir complétement.

RST(S6)-ENSA -KENITRA 42
Calcul de l’adresse
• Adresse logique
• L’adresse logique d’un emplacement mémoire dans un segment est:

Segment:Offset
Segment=Contenu d’un registre segment
Offset = Déplacement par rapport à Segment

• Chaque registre segment peut être associé à un ou plusieurs registres (appelés


registres d’adressage) afin de former une adresse logique

RST(S6)-ENSA -KENITRA 43
Calcul de l’adresse

Les registres pointeurs et indexes SP,BP, IP,


SI et DI et de 16 bits permettent l'adressage
d'un opérande à l'intérieur d'un segment de 64
ko (216 positions mémoires)

• Pour le segment de pile les adresses


SS:SP et SS:BP peuvent être utilisées.
• Pour le segment de données, l’adresse
DS:BX peut être utilisée pour chercher
des données en mémoire
• DS:SI et ES:DI peuvent être utilisées
pour travailler sur des tableaux ou des
chaines de caractères

On place le registre segment au début d’une zone mémoire de 64Ko, ensuite on


fait varier le registre d’offset qui précise l’adresse relative par rapport à cette
position

RST(S6)-ENSA -KENITRA 44
Calcul de l’adresse
• Adresse physique
 Le bus d’adresse du 8086 possède 20 bits
 Chaque adresse de 20 bits est formée par la juxtaposition d'un registre
segment (16 bits de poids fort) et d'un déplacement (offset, 16 bits de
poids faible)
Adresse physique= Segment * 16+ offset

 calculer l’adresse physique pour


CS=1111h et IP=AAAAh ? (résultat
1BBBAh)
 Calculer les adresses physiques qui
correspondent aux adresses logiques
3500:AB00 et 0222:FFFF ?

RST(S6)-ENSA -KENITRA 45
Exercices

• Exercice 1
 On donne le découpage mémoire suivant:

 Dans quel segment se trouvent les adresses physiques suivantes 20350,


E1265 et F586A ? Donner les contenus des registres segments ainsi que
les Offsets correspondants ?

RST(S6)-ENSA -KENITRA 46
Exercices

• Exercice 2
 De combien s’incrémente une adresse physique si on incrémente le segment
de 100 ? (1600)

• Exercice 3
 Soit l’adresse mémoire physique suivante CCB01h
o Choisir 4 adresses sous la forme Segment:Offset correspondantes?
(C000:CB01, C001:CAF1, C002:CAE1, C003:CAD1)
o Calculer le segment, si l’offset est égale à FFF1h ? (BCB1)
o Calculer l’Offset, si le segment est égale à BFFFh ? (CB11)

RST(S6)-ENSA -KENITRA 47
Exercices

• Exercice 4
 Pour initialiser le microprocesseur le signal de contrôle RESET doit être
maintenu à 1 pendant au moins 4 périodes d’horloge. Après RESET les
registres segments CS, ES, DS et SS ainsi que le pointeur d’instruction IP
sont initialisés comme suit:

CS=FFFFh, ES=0000h, DS=0000h, SS=0000h et IP=0000h


o Calculer l’adresse physique de la première instruction à exécuter après
RESET ?

RST(S6)-ENSA -KENITRA 48
Exercices

• Exercice 4 (corrigé)
 L’adresse logique est donnée par l’association:
CS:IP=FFFFh:0000h
 L’adresse physique (adresse de BootStrap) est donnée par:

CS*16+IP=FFFF0h
 L’instruction se trouvant à l’adresse FFFF0h est généralement un saut vers le
programme principal qui initialise ensuite les autres registres de segment.

RST(S6)-ENSA -KENITRA 49
Exercices
• Exercice 5
 La pile est une zone mémoire gérée d’une façon particulière. Elle est
organisée comme une pile d’assiettes. On pose et on retire les assiettes
toujours sur le haut de la pile

 Un seul registre d’adresse suffit donc pour la gérer, c’est le stack pointer SP.
On dit que c’est une pile LIFO (Last IN, First Out).
Empiler une donnée : sauvegarder une donnée sur (le sommet) de la pile
Dépiler une donnée : retirer une donnée (du sommet) de la pile

RST(S6)-ENSA -KENITRA 50
Exercices
 À partir des trois figures, expliquer le principe de l’empilement et le dépilement
d’une pile ?

RST(S6)-ENSA -KENITRA 51
Exercices
• Exercice 5 (corrigé)
 Le registre segment de la pile SS contient 1050
 Etat initial: (voir figure de gauche): le registre pointeur (Offset) SP contient
0008h. Il pointe sur le sommet de la pile (TOS: Top of Stack)
 Principe de l’empilement: (voir figure du milieu)
o On demande de sauvegarder (PUSH AX) le registre AX (16 bits) dans la pile
 On décrémente d’abord le pointeur SP de 2 (SP=SP-2) SP contient 0006h
 On écrit les deux octets de AX dans le nouveau TOS (12 et 34)
 Principe de dépilement : (voir la figure de droite)
o On demande de restituer (POP AX) le registre AX de la pile
 On retire d’abord les deux octets de donnée 12 et 34 vers le registre AX
 On incrémente le pointeur SP de 2 (SP=SP+2: SP=0058)
o On demande de mettre (POP BX) dans le registre le contenu pointé par le
nouveau TOS
 On retire les deux octets AA et BB vers le registre BX
 On incrémente le pointeur SP de 2 (SP=005Ah)
RST(S6)-ENSA -KENITRA 52

Vous aimerez peut-être aussi