Vous êtes sur la page 1sur 12

Etude du microprocesseur

Définition

Un microprocesseur ou CPU (Central Processor Unit) est un composant électronique minuscule, fabriqué le


plus souvent en silicium, qui regroupe un certain nombre de transistors élémentaires interconnectés. Son rôle
est d'interpréter les instructions et traiter les données d'un programme. En informatique, le microprocesseur  est
l'élément le plus important de  l'ordinateur.
 Remarque : nous devons mettre en tête que dans un ordinateur, il n'y a pas un seul processeur mais  il existe de
nombreux processeurs qui gèrent indépendamment : la carte son, la carte graphique, la carte SCSI, etc. Mais
c'est le microprocesseur ou CPU (Central Processor Unit) qui est chargé de traiter toutes les informations de ces
composants.
Architecture du microprocesseur
Un microprocesseur est composé de trois éléments :
 Une unité de commande (UC) ;
 Une unité arithmétique et logique (UAL) ;
 Des registres.
Le microprocesseur échange des informations avec la mémoire et l’unit´e d’E/S, sous forme de mots binaires,
au moyen d’un ensemble de connexions appelé bus.
Unité de commande
Unité de commande (UC) ou (unité de contrôle pour control Unit CU) permet de "séquencer" le déroulement
des instructions. Elle effectue la recherche en mémoire de l'instruction, le décodage, l'exécution et la
préparation de l'instruction suivante. L'unité de commande élabore tous les signaux de synchronisation internes
ou externes (bus des commandes) au microprocesseur.
Une unité arithmétique et logique (UAL)
L’unité arithmétique et logique (UAL ou ALU : Arithmetic and Logic Unit) est l'organe qui effectue les
opérations :
 arithmétiques : addition, soustraction, multiplication, ...
 logiques : et, ou, non, décalage, rotation, ....
Deux registres sont associés à l'UAL : l'accumulateur et le registre d'état.

L'accumulateur (nommé : A)
C'est une des deux entrées de l'UAL. Il est impliqué dans presque toutes les opérations réalisées par
l'UAL. Certains constructeurs ont des microprocesseurs à deux accumulateurs (Motorola : 6800)
Exemple : A étant l'accumulateur et B un registre, on peut avoir : A+BÄ A (ADD A,B : addition du
contenu du registre A avec celui du registre B, le résultat étant mis dans A)

Le registre d'état (Flags : F)


A chaque opération, le microprocesseur positionne un certain nombre de bascules d'état. Ces bascules
sont appelées aussi indicateurs d'état ou drapeaux (status, flags).
Par exemple, si une soustraction donne un résultat nul, l'indicateur de zéro (Z) sera mis à 1. Ces bascules
sont regroupées dans le registre d'état
On peut citer comme indicateur : 

retenue (carry : C)

retenue intermédiaire (Auxiliary-Carry : AC)

signe (Sign : S)

débordement (overflow : O)

zéro (Z)
parité (Parity : P)

Retenue : (carry : C)
stockage de la retenue arithmétique
Exemple: addition de nombres binaire sur 8 bits
11111100
+ 10000010                                FCH + 82H = 17EH
carry : 1 = 01111110 (252)10 + (130)10 = (382)10
La bascule C (carry) sert aussi à capter le bit expulsé lors d'une opération de décalage ou de rotation
exemple :
décalage à gauche d'un bit de cet octet : 10010110
la carry recueille le 1 du bit de poids fort carry : 1 00101100

Retenue intermédiaire : (Auxiliary Carry : AC)


Sur les opérations arithmétiques, ce drapeau signale une retenue entre groupes de 4 bits (Half-byte :
demi-octet) d'une quantité de 8 bits.

Signe: (S)
Cette bascule est mise à 1 lorsque le résultat de l'opération est négatif ( bit de plus fort poids du résultat
à1)

Débordement : (overflow : O)
Cet indicateur est mis 1, lorsqu'il y a un dépassement de capacité pour les opérations arithmétiques en
complément à 2. Sur 8 bits, on peut coder de -128 ( 1000 0000 ) à +127 ( 0111 1111 ).
104         0110 1000 - 18       1110 1110
+ 26 + 0001 1010 - 118 1000 1010
=130 = 1000 0010 (-126) -136 0111 1000 (120) avec C=1
L'indicateur débordement est une fonction logique (OU exclusif) de la retenue (C) et du signe (S).

Zéro : (Z)
Cette bascule est mise à 1 lorsque le résultat de l'opération est nul.

Parité : (P)
Cette bascule est mise à 1 lorsque le nombre de 1 de l'accumulateur est pair.
Remarque
La plupart des instructions modifient le registre d'état
exemple :
ADD A, B positionne les drapeaux : O, S, Z, A, P, C
OR B, C (B ou C -> B) positionne S, Z, P tandis que
MOV A, B (Move, Transférer le contenu de B dans A ) n'en positionne aucun
Les registres
Un emplacement mémoire interne au processeur et où l’on place les données à traiter ainsi que les instructions,
et où l’on trouve quelques millionièmes de seconde plus tard les résultats des calculs. Les registres servent aussi
à stocker les adresses utiles au système.
Il existe deux types de registres : les registres d'usage général, et les registres d'adresses (pointeurs)

Les registres d'usage général


Ce sont des mémoires rapides, à l'intérieur du microprocesseur, qui permettent à l'UAL de manipuler des
données à vitesse élevée. Ils sont connectés au bus données interne au microprocesseur. L'adresse d'un registre
est associée à son nom (on donne généralement comme nom une lettre) A, B, C...
Exemple : MOV C, B : transfert du contenu du registre "d'adresse" B dans le registre "d'adresse" C

Les registres d'adresses (pointeurs)


Ce sont des registres connectés sur le bus adresses.
On peut citer comme registre: 

Le compteur ordinal (pointeur de programme PC)

Le pointeur de pile (stack pointer SP)

Les registres d'index (index source SI et index destination DI)

Le compteur ordinal (pointeur de programme PC)


Il contient l'adresse de l'instruction à rechercher en mémoire. L'unité de commande incrémente le compteur
ordinal (PC) du nombre d'octets sur lequel l'instruction, en cours d'exécution, est codée. Le compteur ordinal
contiendra alors l'adresse de l'instruction suivante.
exemple : (PC)=10000H ; il pointe la mémoire qui contient l'instruction MOV C,B qui est codée sur deux octets
(89 D9H) ; l'unité de commande incrémentera de deux le contenu du PC : (PC) = 10002H (la mémoire sera
supposée être organisée en octets).

Compteur de Programme (PC)

Le pointeur de pile (stack pointer SP)


Il contient l'adresse de la pile. Celle-ci est une partie de la mémoire, elle permet de stocker des
informations (le contenu des registres) relatives au traitement des interruptions et des sous-programmes.
La pile est gérée en LIFO : (Last IN First Out) dernier entré premier sorti. Le fonctionnement est
identique à une pile d'assiette
Le pointeur de pile SP pointe le haut de la pile (31000H fig. 1), il est décrémenté avant chaque
empilement, et incrémenté après chaque dépilement.
Il existe deux instructions pour empiler et dépiler : PUSH et POP.
exemple:
PUSH A empilera le registre A et POP A le dépilera.

Sur la figure 1, on va montrer le fonctionnement de la pile lors d'instructions comme PUSH et POP.
Fig. 1 Sauvegarde sur la pile

Question?
Que se passera-t-il durant l'exécution du programme commençant en 12E30H? Que vaudra SP et que
contiendra la pile à cette adresse, à la fin du programme?

Fig. 2 exercice sur la pile

Réponse.
Le programme commence par sauvegarder le contenu de C dans la pile (PUSH C). Pour cela (SP) est
décrémenté de deux((SP)=31000H-2=30FFEH), puis on effectue l'écriture de (C) dans la mémoire à
l'adresse (SP) : (30FFEH) = 6142H.
Pour PUSH A on obtient : (30FFCH)=1234H, et pour PUSH B : (30FFAH)=2D5AH.
Pour l'instruction POP B, ((SP)) est chargé dans le registre B ((SP)=30FFAH ; (B)=2D5AH) puis (SP)
est incrémenté de deux ((SP)= 30FFAH+2=30FFCH). Enfin, pour POP A on obtient : (A)=1234H et
(SP)=30FFCH + 2 = 30FFEH

Les registres d'index (index source SI et index destination DI)


Les registres d'index permettent de mémoriser une adresse particulière (par exemple : début d'un
tableau).
Ces registres sont aussi utilisés pour adresser la mémoire de manière différente. C'est le mode
d'adressage indexé.
exemple : MOV A,[SI+10000H] place le contenu de la mémoire d'adresse 10000H+le contenu de SI,
dans le registre A.

Exemple sur le registre d'index


Les BUS
Le Bus est un ensemble de fils électriques (cuivre) où apparaît une information binaire (0 ou 1) c'est à dire (0V
ou 5V) sur chaque fil. C’est un canal de communication interne à un ordinateur et par lequel transitent les
informations, qu’il s’agisse de données ou de programmes.
Il existe trois types de bus et chaque bus a une fonction particulière :
 Le bus de données ;
 Le bus d’adresses ;
 Le bus de commande.
Bus des données
Il permet de véhiculer des données du microprocesseur vers un composant ou d'un composant vers le
microprocesseur. Il est donc bidirectionnel. Le nombre de fils de ce bus varie suivant les microprocesseurs (8 /
16 / 32 / 64 bits). Dans la littérature, les différents fils de ce bus sont appelés D0, D1, ..., Dp-1, si le bus a "p"
fils.
Bus des adresses
La mémoire est composée de nombreuses cases mémoires. Chaque case est repérée par une adresse. Lorsque le
microprocesseur veut, par exemple, lire une case, il doit indiquer à quelle adresse elle se trouve. Il met cette
adresse sur le bus des adresses. La case mémoire reconnaît alors son adresse et met sur le bus données son
contenu.
Exemple : Bus adresses 16 bits - données sur 8 bits

Fig. 2 bus adresses


Dans l'exemple précédent, le microprocesseur écrit la donnée 10101111 dans la case mémoire d'adresse 1011
1111 0110 1010. Le bus adresses est unidirectionnel : du microprocesseur vers les autres composants.
Il se compose de 16 à 32 fils suivant les microprocesseurs que l'on nomme A0, A1, ..., An-1.
16 bits adressage de 216 64x1024 mots = 64 Kmots

20 bits adressage de 220 1024x1024 mots = 1Mmots

32 bits adressage de 232 4096x1024 x1024 mots = 4 Gmots


Bus des commandes
Le bus des commandes est constitué d'un ensemble de fils de "commandes", permettant la synchronisation et
bien sûr la commande des boîters mémoires et entrées/sorties par le microprocesseur.
Dans le cas précédent, la cellule mémoire doit savoir à quel instant elle doit mettre son contenu sur le bus
données. Pour cela, le microprocesseur possède une broche appelée Read ( ) qu'il met à 0 (0v) lorsque la
cellule doit agir. De même, lors d'une écriture du microprocesseur vers la cellule, il met sa broche Write ( ) à
0 (0V). Les signaux RD et WR sont des signaux de synchronisation, de contrôle, de commande. Ils sont reliés
aux autres composants par un bus : le bus des commandes. Celui-ci comporte d'autres signaux de commandes.
Architectures standart
L'ensemble des composants cités ici est regroupé dans le schéma présenté figure suivante. L'architecture
présentée est dite "standard". Il en existe de multiples, notamment les architectures à plusieurs bus
internes ou à pipe line.

Exemple d'architecture d'un microprocesseur

Mode de fonctionnement d’un microprocesseur


Un microprocesseur exécute un programme. Le programme est une suite d’instructions stockées dans la
mémoire. Une instruction peut être codée sur un ou plusieurs octets.
Format d’une instruction :
Rangement en mémoire :

Pour exécuter les instructions dans l’ordre établi par le programme, le microprocesseur doit savoir à chaque
instant l’adresse de la prochaine instruction à exécuter. Le microprocesseur utilise un registre contenant cette
information. Ce registre est appelé pointeur d’instruction (IP : Instruction Pointer) ou compteur
d’instructions ou compteur ordinal.

Remarque : la valeur initiale du pointeur d’instruction est fixée par le constructeur du microprocesseur. Elle
vaut une valeur bien définie à chaque mise sous tension du microprocesseur ou bien lors d’une remise à zéro
(reset). Pour savoir quel type d’opération doit être exécuté (addition, soustraction, ...), le microprocesseur lit le
premier octet de l’instruction pointée par le pointeur d’instruction (code opératoire) et le range dans un registre
appelé registre d’instruction. Le code opératoire est décodé par des circuits de décodage contenus dans le
microprocesseur. Des signaux de commande pour l’UAL sont produits en fonction de l’opération demandée qui
est alors exécutée.
Remarque : pour exécuter une instruction, l’UAL utilise des registres de travail,
Exemple : l’accumulateur, registre temporaire recevant des données intermédiaires.
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon à pointer vers
l’instruction suivante :
Puis le processus de lecture et de décodage des instructions recommence. A la suite de chaque instruction, un
registre du microprocesseur est actualisé en fonction du dernier résultat : c’est le registre d’état du
microprocesseur. Chacun des bits du registre d’état est un indicateur d’état ou flag (drapeau).
Exemple : registre d’´etat du microprocesseur Z80 :

Les indicateurs d’état sont activés lorsqu’une certaine condition est remplie, exemple : le flag Z est mis à 1
lorsque la dernière opération a donné un résultat nul, le flag C est mis à un lorsque le résultat d’une addition
possède une retenue, ...
Les indicateurs d’état sont utilisés par les instructions de saut conditionnels : en fonction de l’état d’un (ou
plusieurs) flags, le programme se poursuit de manière différente.
Toutes ces étapes (lecture de l’instruction, décodage, exécution) sont synchronisées par un séquenceur qui
assure le bon déroulement des opérations :

Pour exécuter le programme contenu dans la mémoire centrale, le séquenceur du microprocesseur exécute lui-
même un programme appelé microcode, contenu dans une m´mémoire morte à l’intérieur du microprocesseur.
Le séquenceur est dirigé par une horloge qui délivre un signal de fréquence donnée permettant d’enchaîner les
différentes étapes de l’exécution d’une instruction :
Chaque instruction est caractérisée par le nombre de périodes d’horloge (ou microcycles) qu’elle utilise (donnée
fournie par le fabricant du microprocesseur).
Exemple : horloge `a 5 MHz, période T = 1/f = 0, 2 μs. Si l’instruction s’exécute en 3 microcycles, la durée
d’exécution de l’instruction est : 3 × 0,2 = 0, 6 μs.
L’horloge est constituée par un oscillateur à quartz dont les circuits peuvent être internes ou externes au
microprocesseur. Structure complète d’un microprocesseur simple : pour fonctionner, un microprocesseur
nécessite donc au minimum les éléments suivants :

Mode d’adressage
Partie 4 : les modes d'adressage

Un mode d'adressage est un moyen qui permet au microprocesseur d'avoir accès à une donnée. Cette donnée peut être
un nombre quelconque dont on aura besoin dans le programme, un nombre qui se trouve déjà dans un registre, ou
encore un nombre qui se trouve écrit quelque part en mémoire.
La connaissance des principaux modes d'adressage est obligatoire : elle permet d'écrire les programmes de la façon la
plus courte, la plus simple et la plus lisible possible.

4-1 L'adressage inhérent

L'adressage inhérent est habituellement réservé aux instructions qui agissent directement sur les valeurs contenues par
les registres. Ces instructions se composent d'elles-mêmes et n'ont aucunement besoin qu'on leur ajoute des indications.

Exemple : CPL

Tous les microprocesseurs possèdent ce genre d'instruction :elle signifie que le registre A (lui et pas un autre) se verra
complémenté. En clair, cela veut dire que chacun de ses bits prendra l'autre valeur binaire ; les chiffres 1 seront
remplacés par des 0 et réciproquement.

A contenait 143 décimal (par exemple) ; soit 10001111 binaire.

CPL

A contient 112 décimal, c'est à dire 01110000 binaire

4-2 L'adressage immédiat

Dans ce mode, une valeur apparaît après l'instruction assembleur.

Prenons par exemple LD A,100

La formule LD signifie que l'on va placer (charger) un nombre dans le registre A. Il est facile de voir qu'ici l'instruction LD
n'aurait pu être écrite toute seule, comme dans l'adressage inhérent. Il nous faut absolument rajouter des indications à la
suite : et, si l'on doit mettre un nombre dans l'accumulateur A, il faut bien dire lequel.

Dans le mode d'adressage immédiat, c'est la valeur marquée après la virgule (ici 100) qui sera écrite dans le registre que
l'on aura choisi en écrivant son nom devant la virgule. Dans notre exemple, c'est le registre A qui est concerné mais
n'importe quel autre registre de 8 bits ou 16 bits aurait fait l'affaire.

A contenait, par exemple, 50

LD A,100

A contient maintenant 100. Mais…

LD A,300

Cette ligne devrait, en principe, écrire dans A le nombre 300. Vous l'aurez deviné ; cela n'a aucun sens puisque A est un
registre 8 bits et que le nombre maximal qu'il peut contenir est 255.

4-3 L'adressage étendu

On l'appelle souvent adressage absolu car c'est un mode qui permet d'avoir accès directement au contenu de n'importe
quel octet de la mémoire.

LD A,(10)

L'accumulateur A sera chargé non par le nombre 10, comme il l'aurait été dans l'adressage immédiat, mais avec la valeur
écrite dans l'octet n°10. L'instruction BASIC équivalente est la suivante :

PRINT PEEK(10) => réponse : 185

En fin de compte, le registre A contiendra 185. Les parenthèses qui englobent la valeur 10 sont là pour éviter la confusion
entre les modes immédiat et étendu. Lorsqu'une valeur est " parenthésée ", elle correspond à l'adresse d'un octet de la
mémoire et c'est cet octet qu'il faut prendre ne compte. Un deuxième exemple :
LD A,(5000)

Un piège, comme dans le paragraphe précédent ? 5000 paraît bien trop important pour notre accumulateur 8 bits. Mais
non, cette ligne n'est pas un contre-sens : elle signifie que le registre A va contenir non pas le nombre 5000 mais le
nombre qui se trouve écrit dans l'octet ayant 5000 pour adresse.

PRINT PEEK(5000) => réponse : 0

Ce qui fait que A sera chargé, une fois l'instruction exécutée, par la valeur 0.

4-4 L'adressage registre

Ce mode d'adressage ne fait apparaître aucun nombre dans l'instruction et n'est utilisable que lorsque l'on veut intervenir
sur les contenus des registres. Exemple :

INC B

Cette instruction donne au microprocesseur l'odre d'incrémenter le registre B, c'est à dire d'augmenter sa valeur d'une
unité. B contenait 200 (par exemple).

INC B

B contient 201. Autre exemple :

LD C,D

Nous retrouvons le mnémonique de chargement LD. Il n'y a aucune difficulté à interpréter cette instruction. Si 20 et 30
sont, par exemple, écrits dans les registres C et D, l'exécution de l'instruction inscrira la valeur 30 dans C (et D restera
inchangé).

4-5 L'adressage indirect

Il est noté comme l'adressage étendu, mais l'expression qui se trouve entre parenthèses est, cette fois, le nom d'un
registre. Voici quelques exemples :

LD C,(HL)

Le simple registre C va être chargé avec la valeur qui se trouve dans l'octet ayant pour adresse le nombre écrit dans HL.
Supposons que, dans ce registre 16 bits, il y ait le nombre 48000.

PRINT PEEK(48000) => réponse : 146

Après LD C, (HL), il y aura dans le registre C la valeur 146. Cette instruction est donc tout à fait équivalente à LD C,
(48000) en adressage étendu. Deuxième exemple :

LD HL,45000
LD B,(HL)

Il faut considérer que la première instruction LD place directement dans le registre HL le nombre 45000 (mode
d'adressage immédiat. La seconde instruction va recopier dans le registre B le contenu de l'octet 45000.

PRINT PEEK(45000) => réponse 222

B contiendra donc la valeur 222.

4-6 L'adressage indexé

Prenons l'exemple suivant:

LD C,(IX+10)
Cette fois, le processeur va aller chercher, pour l'écrire dans C, la valeur qui se trouve dans l'octet ayant pour adresse le
nombre contenu dans IX auquel on ajoute 10. C'est plus facile à comprendre qu'à expliquer ! admettons que IX contienne
la valeur 46000. On ajoute 10 à 46000 et l'octet concerné est alors le n°46010.

PRINT PEEK(46010) => réponse : 63

Ainsi dans cet exemple, C va être chargé avec le nombre 63. Un dernier exemple :

LD H,(IY-20)

En considérant que IY contient le nombre 47000 (par exemple), cette instruction indique à la machine qu'elle doit placer
dans H le nombre écrit dans l'octet 46980. Si l'on sait que le PEEK de cet octet vaut 132 , on en déduit que le registre H
aura vu son contenu porté à 132. remarquons que seuls les registres IX et IY ont le privilège de pouvoir accéder à une
case mémoire dont l'adresse est donnée par leurs contenus auxquels est ajoutée ou retranchée une valeur comprise
entre +127 et -128 (un octet signé). Les instructions du type :

LD A,(BC+5)
Ou 
LD A,(DE-3)

N'éxistent pas.

- Mode d’adressage
- Exécution d’un microprogramme (L/E)

Vous aimerez peut-être aussi