Vous êtes sur la page 1sur 84

Chapitre GENERALITES


1- Définitions de base

2- Historique des ordinateurs

3- Rappels : présentation des informations dans


un ordinateur
Introduction
Bases de numérisation
Codification des nombres entiers
Représentation des caractères
Représentation des nombres réels (norme
IEEE)

ISET de Sfax
Cours Architecture des Ordinateurs 1
1- DEFINITIONS DE BASE
L'informatique : contraction d'INFORmation et autoMATIQUE, est la science du traitement automatique
de l'information. Apparue au milieu du 20ème siècle, elle a connu une évolution extrêmement rapide. A
sa motivation initiale qui était de faciliter et d'accélérer le calcul, se sont ajoutées de nombreuses
fonctionnalités, comme l'automatisation, le contrôle et la commande de processus, la communication ou
le partage de l'information.

L'architecture d'un système à microprocesseur représente l’organisation de ses différentes unités et de


leurs interconnexions. Le choix d'une architecture est toujours le résultat d'un compromis:
 Entre performances et coûts ;
 Entre efficacité et facilité de construction ;
 Entre performances d'ensemble et facilité de programmation ;
 Etc …

L'Ordinateur : un calculateur électronique doté de mémoire à grande capacité et de moyens de calcul


ultra-rapides pouvant s’adapter aux circonstances et prendre des décisions complexes. Il possède les
caractéristiques suivantes:
 Rapidité;
 Capacité de mémorisation importante;
 Exactitude et précision.

Fig 1.1 Composants d’un ordinateur

Le microprocesseur : un circuit intégré complexe. Il résulte de l’intégration sur une puce de fonctions
logiques combinatoires (logiques et/ou arithmétiques) et séquentielles (registres, compteur, etc…). Il est
capable d'interpréter et d'exécuter les instructions d'un programme. Son domaine d’utilisation est donc
presque illimité.

ISET de Sfax
Cours Architecture des Ordinateurs 2
Fig 1.2 microprocesseur d’un ordinateur

Les applications des systèmes à microprocesseurs sont multiples et variées :


 Ordinateur, PDA ;
 Console de jeux ;
 Calculatrice ;
 Télévision ;
 Téléphone portable ;
 Distributeur automatique d’argent ;
 Robotique ;
 Lecteur carte à puce, code barre ;
 Automobile ;
 Instrumentation ;
 Etc…

Fig 1.3 Equipements à base de


microprocesseur
La mise en œuvre de ces systèmes s’appuie sur deux modes de réalisation distincts, le matériel et le
logiciel. Le matériel (hardware) correspond à l’aspect concret du système : unité centrale, mémoire,
organes d’entrées-sorties, etc. Le logiciel (software) correspond à un ensemble d’instructions, appelé
programme, qui sont contenues dans les différentes mémoires du système et qui définissent les actions
effectuées par le matériel.

Programme = instructions + données ; c’est une suite d’instructions rédigé en langage informatique et qui
établit la nature et l’ensemble des opérations à réaliser pour effectuer un travail précis.

Il y a trois types de langages informatiques :


 LANGAGE BINAIRE : langage machine ; c’est le langage de base de l’ordinateur. Une
instruction machine est du point de vue programmation l’unité élémentaire de travail de
l’ordinateur. Elle est construite d’une séquence de 0 et 1. C’est le seul langage directement
compréhensible par l’ordinateur car ces valeurs peuvent être interprétées physiquement. Elles
sont adaptées à une représentation physique à l’aide de dispositifs à deux états :
1 → marche / le courant passe / présence de trou / surface magnétisée
0 → arrêt / le courant ne passe pas/ absence de trou / surface non magnétisée
ISET de Sfax
Cours Architecture des Ordinateurs 3
 LANGAGE SYMBOLIQUE : Tout simplement les instructions binaires sont traduites par des
symboles alphanumériques selon des codes de traduction bien définis. Mais bien évidemment la
possibilité d’écrire un programme en langage symbolique nécessite une étape supplémentaire. La
traduction du programme symbolique au langage binaire qui est la seule forme exécutable.

 LANGAGE EVOLUE : c’est un langage voisin des langages naturels (langues vivantes)
nécessitant avant exécution par l’ordinateur une traduction en langage machine par un
compilateur. Il est indépendant de la machine.

2 - HISTORIQUE DES ORDINATEURS


Naissance de l’ordinateur :
En 1945, ECKERT et MANCHLY construisent l’ENIAC (Electronic Numérical Integrator And
Calculator), machine universelle programmable, numérique, basée sur le système décimal et entièrement
électronique avec ses 1800 tubes et ses 30 tonnes de poids et sa surface de 200 m2, l’ENIAC pouvait
multiplier deux nombres de dix chiffres en 3 millisecondes ! 1000 fois plus rapide que les calculateurs
électromécaniques.

Fig 1.4 Ordinateur ENIAC


❖ 30 t ;
❖ 17468 tubes, 70000 résistances, 1500 relais, 6000 commutateurs manuels ;
❖ 150 kW.

En 1947, JON VON NEWMANN a réussi pour la première fois à enregistrer des programmes dans la
mémoire de l’équipement électronique. De plus il a introduit l’emploi des nombres binaires à la place des
nombres décimaux. La machine a gagné ainsi en souplesse et en vitesse puisque instructions et données
sont stockées dans la mémoire même de la machine. Le déroulement du programme peut être commandé
par des sauts et des branchements conditionnels dans le programme. L’ordinateur est né ! C’est la
machine de VON NEWMANN.
Selon VON NEWMANN l’ordinateur possède les caractéristiques suivantes :
❖ Une machine universelle contrôlée par programme ;
❖ Les instructions du programme sont codées sous forme numérique (binaire et enregistrées en
mémoire) ;
❖ Le programme peut modifier ses propres instructions qui sont normalement exécutées en
séquence :
❖ Des instructions existent permettent des ruptures de séquence ;
❖ Il possède l’architecture suivante :
 L’unité arithmétique et logique UAL ;

ISET de Sfax
Cours Architecture des Ordinateurs 4
 L’unité de commande ;
 La mémoire centrale ;
 Les unités d’entrée ;
 Les unités de sortie.

Il a construit ensuite EDVAC (Electrical Discrète Variable Automatic Computer) et l’EDSAC (Electrical
Delay Storage Automatic Calculator).

Fig 1.5 Ordinateur EDVAC

Les différentes générations :


La première génération 1945-1955: TUBES A VIDE
 Ces matériels avaient les caractéristiques suivantes :
 Programmation en langage machine ;
 Mise au point en ligne en examinant le contenu binaire des registres et de la mémoire ;
 Périphérique d’entrées/sorties primitifs ;
 Pas de système d’exploitation.
Ils présentent les inconvénients suivants :
 Encombrement ;
 Consommation élevée d’énergie ;
 Dégagement de chaleur ;
 Taux de pannes élevé.

La deuxième génération 1955-1965: LE TRANSISTOR


En 1957 control DATA lance 1604 utilisant les premiers transistors inventés par BARDEEN,
BRATTAIN et SCHOKLEY au laboratoire Bell en 1948.

Remarques :
La réalisation de circuits intégrés de plus en plus complexe a été rendue possible par l’apparition
du transistor en 1948. La vitesse a augmenté, la fiabilité a augmenté et le coût des composants a
diminué. Les nouveautés de cette génération sont :
 La multiprogrammation ;
 La pagination ;
 Les disques durs ;
 La naissance des langages ALGOL, PL1 et COBOL.

La troisième génération 1965-1980: CIRCUITS INTEGRES


ISET de Sfax
Cours Architecture des Ordinateurs 5
er
Il a fallu attendre 1958 pour voir apparaître le 1 circuit intégré réalisé par Texas Instrument. Un circuit
intégré peut remplacer un grand nombre de transistors. Le coût a diminué. On a noté l’apparition :
 Des micro-processeurs qui contiennent de plus en plus de circuits intégrés ;
 Des machines à mots 32 bits assemblés par octets, registres généraux ;
 Concept de mémoire virtuelle, le système d’exploitation organise et gère le partage des
ressources.
Une importance est accordée au temps de réponse et aux travaux interactifs.

La quatrième génération 1980...: VLSI (Very Scale Large Integration)


Circuits à grande échelle d’intégration au début des années 80 arrive des puces contenant des centaines de
milliers de transistors. On a noté l’apparition :
 Des micros ;
 Des mini-ordinateurs ;
 Des réseaux ;
 L’intelligence artificielle.

Evolution matérielle :
Génération 1 Génération 2 Génération 3 Génération 4
Composants Tubes électroniques Transistors Circuits intégrés CI à grande échelle
Miniaturisation Une armoire Un tiroir Partie d’un tiroir Un boitier
Fiabilité MTBF=10 mn Qq heures Qq jours Qq milliers
d’heures
vitesse Qq dizaines ms Qq ms Qq ns < 0.1 ns

Evolution logicielle
Génération 1 Génération 2 Génération 3 Génération 4
Passage par lot Simultanéité des E/S multiprogrammation Ateliers de génie logiciel
séquentiel

D’autre part l’évolution de l’informatique est caractérisée par :


 Une décroissance :
 Du prix du matériel;
 De son volume;
 Des alimentations nécessaires.
 Une croissance :
 Des capacités de traitement et de stockage;
 De la fiabilité des installations;
 De la vitesse et de la complexité du logiciel.

L’homme a crée l’ordinateur à son image !


Ordinateur = Homme

Matériel = Corps Logiciel =


Âme

Unité centrale= Périphériques = membres


cervau et organes de sens

Micro processeur Périphériques d’entrée Périphériques


ISET de Sfax= Mémoire =
de sortie =
cervau cervelet = oreilles, …
Cours Architecture des Ordinateurs 6
jambes, …

Périphériques
d’entrée/sorties =
bouche, yeux, …
Fig 1.6 Analogie entre l’être humain et l’Ordinateur

3- Représentation des informations dans un ordinateur


3.1- Introduction :
Les informations traitées par un ordinateur peuvent être de différents types (texte, nombres, instructions,
images, vidéo, etc.) mais elles sont toujours représentées et manipulées par l’ordinateur sous forme
binaire. Seul le codage changera suivant les différents types de données à traiter. Elles sont représentées
physiquement par 2 niveaux de tensions différents. Toute information sera traitée comme une suite de 0 et
de 1. L’unité d’information est le chiffre binaire (0 ou 1), que l’on appelle bit (pour binary digit, chiffre
binaire).

Une information plus complexe sera codée sur plusieurs bits. On appelle cet ensemble un mot. Un mot de
8 bits est appelé un octet.
Avec n bits on peut représenter 2n choses différentes.

Remarque :
10
1 kilobit = 2 bit = 1024 bit
10
1 mégabit = 2 kbit = 1024 kbit
10
1 gigabit = 2 Mbit = 1024 Mbit

3.2- Bases de numération


Avant d’aborder la représentation des différents types de données (caractères, nombres naturels,
nombres réels), il convient de se familiariser avec la représentation d’un nombre dans une base
quelconque (par la suite, nous utiliserons souvent les bases 2, 8, 10 et 16). Habituellement, on utilise la
base 10 pour représenter les nombres, c'est-à-dire que l’on écrit à l’aide de 10 symboles distincts, les
chiffres.

En base b, on utilise b chiffres. Notons ai la suite des chiffres utilisés pour écrire un nombre :
x = an an−1 ... a1 a0
a0 est le chiffre des unités.
 En décimal, b =10, ai appartient {0,1,2,3,4,5,6,7,8,9};
 En binaire, b=2, ai appartient {0,1} : 2 chiffres binaires, ou bits;
 En hexadécimal, b = 16, ai appartient {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

Représentation des nombres entiers :


En base 10, on écrit par exemple 1996 pour représenter le nombre 1996=1*103+9*102+9*101+6*100
Dans le cas général, en base b, le nombre représenté par une suite de chiffres a nan−1...a1a0 est donné par :

i
anan−1...a1a0 = ib
a0 est le chiffre de poids faible, et an le chiffre de poids fort.

ISET de Sfax
Cours Architecture des Ordinateurs 7
Exemple en base 2 :
(101)2= 1 * 22 + 0 * 21 + 1 * 20 = 4 + 0 + 1=5
La notation ( )b indique que le nombre est écrit en base b.

Représentation des nombres fractionnaires :


Les nombres fractionnaires sont ceux qui comportent des chiffres après la virgule. Dans le système
décimal, on écrit par exemple :
12,346 = 1 * 101 + 2 * 100 + 3 * 10−1 + 4 * 10−2 + 6 * 10−3

En général, en base b, on écrit :


anan−1...a1a0, a−1a−2...a−p= anbn + an−1bn−1 + ... + a0b0 + a−1b−1 + ... + a−pb−p

Passage d’une base quelconque à la base 10 :


Il suffit d’écrire le nombre comme ci-dessus et d’effectuer les opérations en décimal. C'est-à-dire
multiplier par les puissances successives de la base en commençant à droite.

Exemple en hexadécimal :
(AB)16=10 * 161 + 11 * 160 =160 + 11 =(171)10
(en base 16, A représente 10, B 11, et F 15).

Passage de la base 10 vers une base quelconque :


Pour les nombres entiers, on procède par divisions successives. On divise le nombre par la base, puis le
quotient obtenu par la base, et ainsi de suite jusqu’a obtention d’un quotient nul. La suite des restes (en
sens inverse) obtenus correspond aux chiffres dans la base visée, a0a1...an.

Exemple : soit à convertir (44)10 vers la base 2.


44 = 22 x 2 + 0 Donc a0=0
22 = 11 x 2 + 0 Donc a1=0
11 = 2 x 5+1 Donc a2=1
5 = 2 x 2+1 Donc a3=1
2 = 1 x 2+0 Donc a4=0
1 = 0 x 2+1 Donc a5=1
Donc (44)10 = (101100)2.

Pour les nombres fractionnaires, on multiplie la partie fractionnaire par la base en répétant l’opération sur
la partie fractionnaire du produit jusqu'à ce qu’elle soit nulle (ou que la précision voulue soit atteinte).
Pour la partie entière, on procède par divisions comme pour un entier.

Exemple : conversion de (54,25)10 en base 2


Partie entière :(54)10=(110110)2 par divisions.
Partie fractionnaire :
0,25 x 2 = 0,50 Donc a−1=0
0,50 x 2 = 1,00 Donc a−2=1
0,00 x 2 = 0,00 Donc a−3=0

Cas des bases 2, 8 et 16 :


Ces bases correspondent à des puissances de 2 (21,23 et 24), d’où des passages de l’une à l’autre très
simples. Les bases 8 et 16 sont pour cela très utilisées en informatique, elles permettent de représenter
rapidement et de manière compacte des configurations binaires.

La base 8 est appelée notation octale, et la base 16 notation hexadécimale.

Chaque chiffre en base 16 (24) représente un paquet de 4 bits consécutifs. Par exemple :

ISET de Sfax
Cours Architecture des Ordinateurs 8
(10011011)2 = (9B)16

De même, chaque chiffre octal représente 3 bits.

On manipule souvent des nombres formés de 8 bits, nommés octets, qui sont
donc notés sur 2 chiffres hexadécimaux.

Remarques :
- le nombre b s’écrit dans la base b par 10 : (b)10 = (10)b  b;
- 0 et 1 s’écrivent dans n’importe quelle base par 0 et 1
(0)10 = (0)b et (1)10 = (1)b  b;
- bn = 100...0 cad 1 et n fois 0.

Opérations arithmétiques :
Les opérations arithmétiques s’effectuent en base quelconque b avec les mêmes méthodes qu’en base 10.
Une retenue ou un report apparaît lorsque l’on atteint ou dépasse la valeur b de la base.

3.3- Codification des nombres entiers


La représentation (ou codification) des nombres est nécessaire afin de les stocker et manipuler par un
ordinateur. Le principal problème est la limitation de la taille du codage : un nombre mathématique peut
prendre des valeurs arbitrairement grandes, tandis que le codage dans l’ordinateur doit s’effectuer sur un
nombre de bits fixé.

Entiers naturels :
Les entiers naturels (positifs ou nuls) sont codés sur un nombre d’octets fixé (un octet est un groupe de 8
bits). On rencontre habituellement des codages sur 1, 2 ou 4 octets, plus rarement sur 64 bits (8 octets, par
exemple sur les processeurs DEC Alpha).
Un codage sur n bits permet de représenter tous les nombres naturels compris entre 0 et 2n −1. Par
exemple sur 1 octet, on pourra coder les nombres de 0 à 255=28−1.

Entiers relatifs :
Il faut ici coder le signe du nombre. On utilise le codage en complément à deux, qui permet d’effectuer
ensuite les opérations arithmétiques entre nombres relatifs de la même façon qu’entre nombres naturels.

Entiers positifs ou nuls : On représente le nombre en base 2 et on range les bits comme pour les entiers
naturels. Cependant, la cellule de poids fort est toujours à 0 : on utilise donc n-1 bits.
Le plus grand entier positif représentable sur n bits en relatif est donc 2n−1 - 1.

Entiers négatifs : Soit x un entier positif ou nul représenté en base 2 sur n-1 bits

La représentation de -x est obtenue par complémentation à 2n−1 de x. On dit complément à deux.


Pour obtenir le codage d’un nombre x négatif, on code en binaire sa valeur absolue sur n-1 bits, puis on
complémente (ou inverse) tous les bits et on ajoute 1.

Exemple : soit à coder la valeur -2 sur 8 bits. On exprime 2 en binaire, soit 00000010. Le complément à
2 est 11111101. On ajoute 1 et on obtient le résultat : 1111 1110.

Remarques :
le bit de poids fort d’un nombre négatif est toujours 1;
 sur n bits, le plus grand entier positif est 2n−1 -1 = 011...1;
 sur n bits, le plus petit entier négatif est -2n−1 = 111…1.

ISET de Sfax
Cours Architecture des Ordinateurs 9
3.4 - Représentation des caractères
Les caractères sont des données non numériques : il n’y a pas de sens à additionner ou multiplier deux
caractères. Par contre, il est souvent utile de comparer deux caractères, par exemple pour les trier dans
l’ordre alphabétique.

Les caractères, appelés symboles alphanumériques, incluent les lettres majuscules et minuscules, les
symboles de ponctuation (&~ , . ; # " - etc...), et les chiffres.

Un texte, ou chaîne de caractères, sera représenté comme une suite de caractères. Le codage des
caractères est fait par une table de correspondance indiquant la configuration binaire représentant chaque
caractère. Les deux codes les plus connus sont l’EBCDIC (en voie de disparition) et le code ASCII
(American Standard Code for Information Interchange).

Le code ASCII représente chaque caractère sur 7 bits (on parle parfois de code ASCII étendu, utilisant 8
bits pour coder des caractères supplémentaires).

3.5- Représentation des nombres réels (norme IEEE1)


Soit à codifier le nombre 3,25, qui s’écrit en base 2 par (11, 01)2.
On va normaliser la représentation en base 2 de telle sorte qu’elle s’écrive sous la forme : 1, ... * 2n

Dans notre exemple 11, 01 = 1, 101 * 21

La représentation IEEE code séparément le signe du nombre (ici +), l’exposant n (ici 1), et la mantisse (la
suite de bits après la virgule), le tout sur 32 bits.
Le codage a la forme : seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm.

• Le « s » représente le bit relatif au signe;


• Les « e » représentent les bits relatifs à l'exposant;
• Les « m » représentent les bits relatifs à la mantisse.

– Le signe est représenté sur le bit de poids forts, + est représenté par 0 et - par 1.
– L’exposant est codé sur les 8 bits e. On code en binaire la valeur n+127.
– La mantisse est codée sur les 23 bits de poids faibles m.

Remarques :
▪ Les exposants 00000000 et 11111111 sont interdits :
- L’exposant 00000000 signifie que le nombre est dénormalisé;
- L’exposant 11111111 indique que l’on n’a pas affaire à un nombre
(On note cette configuration NaN, « Not a Number », et on l’utilise pour signaler des
erreurs de calculs, comme par exemple une division par 0).
▪ Il faut rajouter 127 (01111111) à l'exposant pour une conversion de décimal vers un nombre réel
binaire. Les exposants peuvent ainsi aller de -254 à 255.

La formule d'expression des nombres réels est ainsi la suivante:

(-1)S * 2( E + 127 )
où:

• S est le bit de signe et l'on comprend alors pourquoi 0 est positif (-10 = 1).
• E est l'exposant auxquels on doit bien ajouter 127 pour obtenir son équivalent codé.

1
IEEE 754 : est un standard pour la représentation des nombres à virgule flottante en binaire.
ISET de Sfax
Cours Architecture des Ordinateurs 10
Exemples:
1) Soit à coder la valeur 525,5.

• 525,5 est positif donc le 1er bit sera 0.


• Sa représentation en base 2 est la suivante : 1000001101,1
• En normalisant, on trouve : 1,0000011011*29
• On ajoute 127 à l'exposant qui vaut 9 ce qui donne 136, soit en base 2 : 10001000
• La mantisse est composée de la partie décimale de 525,5 en base 2 normalisée, c'est-à-dire
0000011011.
• Comme la mantisse doit occuper 23 bits, il est nécessaire d'ajouter des zéros pour la compléter :
00000110110000000000000
• La représentation du nombre 525,5 en binaire avec la norme IEEE est donc :

0 1000 1000 00000110110000000000000 , soit :


0100 0100 0000 0011 0110 0000 0000 0000 (44036000 en hexadécimal)

2) Soit à coder la valeur un réel négative -0,625.


Le bit s vaut 1 car -0,625 est négatif

0,625 s'écrit en base 2 de la façon suivante : 0,101

On souhaite l'écrire sous la forme 1,01 x 2-1

Par conséquent l'exposant vaut 1111110 car 127 - 1 = 126 (soit 1111110 en binaire)

La mantisse est 01000000000000000000000 (seuls les chiffres après la virgule sont représentés,
le nombre entier étant toujours égal à 1)

La représentation du nombre 0,625 en binaire avec la norme IEEE est :

1 1111 1110 01000000000000000000000


1111 1111 0010 0000 0000 0000 0000 0000 (FF 20 00 00 en hexadécimal)

Exercice d'application : A quels nombres réels correspondent la valeur hexa C2ED4000 h?


Rep. soit 1100 0010 1110 1101 0100 0000 0000 0000 (float) = −118,625 (dec)

Remarque : Voici un tableau résumant la norme IEEE754, avec des exemples de nombres 32 bits
simple précision.

Type Exposant Mantisse Valeur


Zéro 0000 0000 000 0000 0000 0000 0000 0000 0,0
1 0111 1111 000 0000 0000 0000 0000 0000 1,0
Nombre dénormalisé 0000 0000 100 0000 0000 0000 0000 0000 5,9×10−39
Grand nombre normalisé 1111 1110 111 1111 1111 1111 1111 1111 3,4×1038
Petit nombre normalisé 0000 0001 000 0000 0000 0000 0000 0000 1,18×10−38
Infini 1111 1111 000 0000 0000 0000 0000 0000 Infini
NaN 1111 1111 010 0000 0000 0000 0000 0000 NaN

ISET de Sfax
Cours Architecture des Ordinateurs 11
Chapitre
ARCHITECTURE DE

 BASE

1- Modèle de VON NEUMANN 9

ISET de Sfax
Cours Architecture des Ordinateurs 12
2- L’unité centrale 9

3- La mémoire principale 10

4- Les interfaces d’entrées / sorties 11

5- Les bus 15

6 Décocage d’adresses

ISET de Sfax
Cours Architecture des Ordinateurs 13
1- MODELE DE VON NEUMANN :
Pour traiter une information, un microprocesseur seul ne suffit pas, il faut l’insérer au sein d’un système
minimum de traitement programmé de l’information. John Von Neumann est à l'origine d'un modèle de
machine universelle de traitement programmé de l’information (1946). Cette architecture sert de base à la
plupart des systèmes à microprocesseur actuel. Elle est composée des éléments suivants :

▪ Une unité centrale ;


▪ Une mémoire principale ;
▪ Des interfaces d’entrées/sorties.

Les différents organes du système sont reliés par des voies de communication appelées bus.

Fig 2.1 Modèle de Von neumann

2- L’UNITE CENTRALE :
Elle est composée par le microprocesseur qui est chargé d’interpréter et d’exécuter les instructions d’un
programme, de lire ou de sauvegarder les résultats dans la mémoire et de communiquer avec les unités
d’échange. Toutes les activités du microprocesseur sont cadencées par une horloge.

On caractérise le microprocesseur par :


 Sa fréquence d’horloge : en MHz ou GHz ;
 Le nombre d’instructions par secondes qu’il est capable d’exécuter : en MIPS ;
 La taille des données qu’il est capable de traiter : en bits.

Fig 2.2 Unité Centrale

3- LA MEMOIRE PRINCIPALE :
Elle contient les instructions du ou des programmes en cours d’exécution et les données associées à ce
programme. Physiquement, elle se décompose souvent en :
❖ Une mémoire morte (ROM = Read Only Memory) chargée de stocker le programme. C’est
une mémoire à lecture seule.
❖ Une mémoire vive (RAM = Random Access Memory) chargée de stocker les données intermédiaires ou
les résultats de calculs. On peut lire ou écrire des données dedans, ces données sont perdues à la mise hors
tension.

Remarque:
Les disques durs, disquettes, CDROM, etc… sont des périphériques de stockage et sont considérés

ISET de Sfax
Cours Architecture des Ordinateurs 14
comme des mémoires secondaires.

Fig 2.3 Mémoire centrale


4- LES INTERFACES D’ENTREES/SORTIES :
Elles permettent d’assurer la communication entre le microprocesseur et les périphériques. (capteur, clavier,
moniteur ou afficheur, imprimante, modem, etc…).

Les bus :
Un bus est un ensemble de fils qui assure la transmission du même type d’information. On retrouve trois
types de bus véhiculant des informations en parallèle dans un système de traitement programmé de
l’information :
❖ Un bus de données : bidirectionnel qui assure le transfert des informations entre le microprocesseur et
son environnement, et inversement. Son nombre de lignes est égal à la capacité de traitement du
microprocesseur.
❖ Un bus d'adresses: unidirectionnel qui permet la sélection des informations à traiter dans un espace
n
mémoire (ou espace adressable) qui peut avoir 2 emplacements, avec n = nombre de conducteurs du bus
d'adresses.
❖ Un bus de commande: constitué par quelques conducteurs qui assurent la synchronisation des flux
d'informations sur les bus des données et des adresses.

Décodage d’adresses :
La multiplication des périphériques autour du microprocesseur oblige la présence d’un décodeur d’adresse
chargé d’aiguiller les données présentes sur le bus de données.

En effet, le microprocesseur peut communiquer avec les différentes mémoires et les différents boîtier
d’interface. Ceux-ci sont tous reliés sur le même bus de données et afin d’éviter des conflits, un seul
composant doit être sélectionné à la fois. Lorsqu’on réalise un système microprogrammé, on attribue donc à
chaque périphérique une zone d’adresse et une fonction « décodage d’adresse » est donc nécessaire afin de
fournir les signaux de sélection de chacun des composants.

Fig 2.4 Interfaces d’Entrées/Sorties

ISET de Sfax
Cours Architecture des Ordinateurs 15
Chapitre LES MEMOIRES


1- Organisation d’une mémoire 21

2- Caractéristiques d’une mémoire 21

3- Différents types de mémoires 22


Les mémoires vives (RAM)
Les mémoires mortes (ROM)

4- Critère de chois d’une mémoire 16 23

5- Notion de hiérarchie mémoire 16 26

ISET de Sfax
Cours Architecture des Ordinateurs 16
Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de conserver et de restituer des
informations (instructions et variables). C’est cette capacité de mémorisation qui explique la polyvalence des
systèmes numériques et leur adaptabilité à de nombreuses situations. Les informations peuvent être écrites ou
lues. Il y a écriture lorsqu'on enregistre des informations en mémoire, lecture lorsqu'on récupère des
informations précédemment enregistrées.

1- ORGANISATION D’UNE MEMOIRE :


Une mémoire peut être représentée comme une armoire de rangement constituée de différents tiroirs. Chaque
tiroir représente alors une case mémoire qui peut contenir un seul élément : des données. Le nombre de cases
mémoires pouvant être très élevé, il est alors nécessaire de pouvoir les identifier par un numéro. Ce numéro
est appelé adresse. Chaque donnée devient alors accessible grâce à son adresse
n
Avec une adresse de n bits il est possible de référencer au plus 2 cases mémoire. Chaque case est remplie par
un mot de données (sa longueur m est toujours une puissance de 2). Le nombre de fils d’adresses d’un boîtier
mémoire définit donc le nombre de cases mémoire que comprend le boîtier. Le nombre de fils de données
définit la taille des données que l’on peut sauvegarder dans chaque case mémoire.

En plus du bus d’adresses et du bus de données, un boîtier mémoire comprend une entrée de commande qui
permet de définir le type d’action que l’on effectue avec la mémoire (lecture/écriture) et une entrée de
sélection qui permet de mettre les entrées/sorties du boîtier en haute impédance.
On peut donc schématiser un circuit mémoire par la figure suivante où l’on peut distinguer :

Fig 3.1 Mémoire et Bus d’E/S

❖ Les entrées d’adresses ;


❖ Les entrées de données ;
❖ Les sorties de données ;
❖ Les entrées de commandes :
 Une entrée de sélection de lecture ou d’écriture : (R/W) ;
 Une entrée de sélection du circuit : (CS).

Une opération de lecture ou d’écriture de la mémoire suit toujours le même cycle :


❖ Sélection de l’adresse ;
❖ Choix de l’opération à effectuer (R/W) ;
❖ Sélection de la mémoire (CS = 0) ;
❖ Lecture ou écriture de la donnée.

Remarque: :
Les entrées et sorties de données sont très souvent regroupées sur des bornes bidirectionnelles.

2- CARACTERISTIQUES D’UNE MEMOIRE :


• La capacité: c’est le nombre total de bits que contient la mémoire. Elle s’exprime aussi souvent en
octet.
• Le format des données: c’est le nombre de bits que l’on peut mémoriser par case mémoire. On dit
aussi que c’est la largeur du mot mémorisable.
• Le temps d’accès: c’est le temps qui s'écoule entre l'instant où a été lancée une opération de

ISET de Sfax
Cours Architecture des Ordinateurs 17
lecture/écriture en mémoire et l'instant où la première information est disponible sur le bus de
données.
• Le temps de cycle: il représente l'intervalle minimum qui doit séparer deux demandes successives de
lecture ou d'écriture.
• Le débit: c’est le nombre maximum d'informations lues ou écrites par seconde.
• Volatilité: elle caractérise la permanence des informations dans la mémoire. L'information stockée
est volatile si elle risque d'être altérée par un défaut d'alimentation électrique et non volatile dans le
cas contraire.

Exemple : Chronogramme d’un cycle de lecture

Fig 3.2 Chronogramme d’un cycle d’exécution


Remarque :
Les mémoires utilisées pour réaliser la mémoire principale d’un système à microprocesseur sont des
mémoires à semi-conducteur. Dans ce type de mémoire, on accède directement à n'importe quelle information
dont on connaît l'adresse et le temps mis pour obtenir cette information ne dépend pas de l'adresse. On dira
que l'accès à une telle mémoire est aléatoire ou direct.

A l'inverse, pour accéder à une information sur bande magnétique, il faut dérouler la bande en
repérant tous les enregistrements jusqu'à ce que l'on trouve celui que l'on désire. On dit alors que l'accès à
l'information est séquentiel. Le temps d'accès est variable selon la position de l'information recherchée.
L'accès peut encore être semi-séquentiel : combinaison des accès direct et séquentiel. Pour un disque
magnétique par exemple l'accès à la piste est direct, puis l'accès au secteur est séquentiel.

3- DIFFERENTS TYPES DE MEMOIRE :


3.1- Les mémoires vives (RAM)
Une mémoire vive sert au stockage temporaire de données. Elle doit avoir un temps de cycle très court pour
ne pas ralentir le microprocesseur. Les mémoires vives sont en général volatiles : elles perdent leurs
informations en cas de coupure d'alimentation. Certaines d'entre elles, ayant une faible consommation,
peuvent être rendues non volatiles par l'adjonction d'une batterie. Il existe deux grandes familles de mémoires
RAM (Random Acces Memory : mémoire à accès aléatoire) :
 Les RAM statiques ;
 Les RAM dynamiques ;

Les RAM statiques :


Le bit mémoire d'une RAM statique (SRAM) est composé d'une bascule. Chaque bascule contient entre 4 et 6
transistors.

ISET de Sfax
Cours Architecture des Ordinateurs 18
D7 D6 D5 D4 D3 D2 D1 D0

Les RAM dynamiques : Fig 3.3 Organisation d’un RAM statique


Dans les RAM dynamiques (DRAM), l'information est mémorisée sous la forme d'une charge électrique
stockée dans un condensateur (capacité grille substrat d'un transistor MOS).

D7 D6 D5 D4 D3 D2 D1 D0

Fig 3.4 Organisation d’un RAM Dynamique


Avantages :
Cette technique permet une plus grande densité d'intégration, car un point mémoire nécessite environ quatre
fois moins de transistors que dans une mémoire statique. Sa consommation s’en retrouve donc aussi très
réduite.

Inconvénients :
La présence de courants de fuite dans le condensateur contribue à sa décharge. Ainsi, l’information est perdue
si on ne la régénère pas périodiquement (charge du condensateur). Les RAM dynamiques doivent donc être
rafraîchies régulièrement pour entretenir la mémorisation : il s'agit de lire l'information et de la recharger. Ce
rafraîchissement indispensable a plusieurs conséquences :
• il complique la gestion des mémoires dynamiques car il faut tenir compte des actions de
rafraîchissement qui sont prioritaires.
• la durée de ces actions augmente le temps d'accès aux informations.

D’autre part, la lecture de l’information est destructive. En effet, elle se fait par décharge de la capacité du
point mémoire lorsque celle-ci est chargée. Donc toute lecture doit être suivie d’une réécriture.
En général les mémoires dynamiques, qui offrent une plus grande densité d'information et un coût par bit plus
faible, sont utilisées pour la mémoire centrale, alors que les mémoires statiques, plus rapides, sont utilisées
lorsque le facteur vitesse est critique, notamment pour des mémoires de petite taille comme les caches et les
registres.

Remarques:

Voici un historique de quelques DRAM qui ont ou sont utilisées dans les PC :

 La DRAM FPM (Fast Page Mode, 1987) : Elle permet d'accéder plus rapidement à des données en
introduisant la notion de page mémoire. (33 à 50 Mhz) ;

 La DRAM EDO (Extended Data Out, 1995) : Les composants de cette mémoire permettent de conserver

ISET de Sfax
Cours Architecture des Ordinateurs 19
plus longtemps l'information, on peut donc ainsi espacer les cycles de rafraîchissement. Elle apporte aussi
la possibilité d’anticiper sur le prochain cycle mémoire. (33 à 50 Mhz) ;

 La DRAM BEDO (Bursted EDO) : On n'adresse plus chaque unité de mémoire individuellement lorsqu'il
faut y lire ou y écrire des données. On se contente de transmettre l'adresse de départ du processus de
lecture/écriture et la longueur du bloc de données ( Burst ). Ce procédé permet de gagner beaucoup de
temps, notamment avec les grands paquets de données tels qu'on en manipule avec les applications
modernes. (66 Mhz) ;

 La Synchronous DRAM (SDRAM, 1997) : La mémoire SDRAM a pour particularité de se synchroniser


sur une horloge. Les mémoires FPM, EDO étaient des mémoires asynchrones et elle induisaient des
temps d'attentes lors de la synchronisation. Elle se compose en interne de deux bancs de mémoire et des
données peuvent être lues alternativement sur l'un puis sur l'autre de ces bancs grâce à un procédé
d'entrelacement spécial. Le protocole d'attente devient donc tout à fait inutile. Cela lui permet de
supporter des fréquences plus élevées qu’avant (100 Mhz) ;

 La DDR-I ou DDR-SDRAM (Double Data Rate Synchronous DRAM, 2000) : La DDR-SDRAM permet
de recevoir ou d'envoyer des données lors du front montant et du front descendant de l’horloge. (133 à
200 MHz).

3.2- Les mémoires mortes (ROM) :


Pour certaines applications, il est nécessaire de pouvoir conserver des informations de façon permanente
même lorsque l'alimentation électrique est interrompue. On utilise alors des mémoires mortes ou mémoires à
lecture seule (ROM : Read Only Memory). Ces mémoires sont non volatiles. Contrairement aux RAM, elles
ne peuvent être que lues. L’inscription en mémoire des données reste possible mais est appelée
programmation. Suivant le type de ROM, la méthode de programmation changera. Il existe donc plusieurs
types de ROM :
• ROM Simple;
• PROM ;
• EPROM ;
• EEPROM ;
• FLASH EPROM.

Fig 3.5 Exemple de mémoires mortes


3.2.1 La ROM Simple

La ROM Simple : Elle est programmée par le fabricant et son contenu ne peut plus être ni modifié, ni effacé
par l'utilisateur.

Structure:
Cette mémoire est composée d'une matrice dont la programmation s’effectue en reliant les lignes aux
colonnes par des diodes. L'adresse permet de sélectionner une ligne de la matrice et les données sont alors
reçues sur les colonnes (le nombre de colonnes fixant la taille des mots mémoire).

Programmation :
L'utilisateur doit fournir au constructeur un masque indiquant les emplacements des diode dans la matrice.

Avantages:
☺ Densité élevée ;
☺ Non volatile ;
☺ Mémoire rapide ;

ISET de Sfax
Cours Architecture des Ordinateurs 20
Inconvénients:
 Écriture impossible ;
 Modification impossible (toute erreur est fatale) ;
 Délai de fabrication (3 à 6 semaines) ;
 Obligation de grandes quantités en raison du coût élevé qu'entraîne la production du masque et le processus
de fabrication.

3.2.2 La PROM
C’est une ROM qui peut être programmée une seule fois par l'utilisateur (Programmable ROM). La
programmation est réalisée à partir d’un programmateur spécifique.

Structure:
Les liaisons à diodes de la ROM sont remplacées par des fusibles pouvant être détruits ou des jonctions
pouvant être court-circuitées.

Programmation:
Les PROM à fusible sont livrées avec toutes les lignes connectées aux colonnes (0 en chaque point mémoire).
Le processus de programmation consiste donc à programmer les emplacements des ‘’1’’ en générant des
impulsions de courants par l’intermédiaire du programmateur ; les fusibles situés aux points mémoires
sélectionnés se retrouvant donc détruits.

Le principe est identique dans les PROM à jonctions sauf que les lignes et les colonnes sont déconnectées (1
en chaque point mémoire). Le processus de programmation consiste donc à programmer les emplacements
des ‘’0’’ en générant des impulsions de courants par l’intermédiaire du programmateur; les jonctions situées
aux points mémoires sélectionnés se retrouvant court-circuitées par effet d’avalanche.

Avantages:
☺ idem ROM;
☺ Claquage en quelques minutes;
☺ Coût relativement faible;

Inconvénients:
 Modification impossible (toute erreur est fatale).

3.2.3 L’EPROM ou UV-EPROM


Pour faciliter la mise au point d'un programme ou tout simplement permettre une erreur de programmation, il
est intéressant de pouvoir reprogrammer une PROM. La technique de claquage utilisée dans celles-ci ne le
permet évidemment pas. L'EPROM (Erasable Programmable ROM) est une PROM qui peut être effacée.

Structure:
Dans une EPROM, le point mémoire est réalisé à partir d’un transistor FAMOS (Floating gate Avalanche
injection Metal Oxyde Silicium). Ce transistor MOS a été introduit par Intel en 1971 et a la particularité de
posséder une grille flottante.

Programmation:
La programmation consiste à piéger des charges dans la grille flottante. Pour cela, il faut tout d’abord
appliquer une très forte tension entre Grille et Source. Si l’on applique ensuite une tension entre D et S, la
canal devient conducteur. Mais comme la tension Grille-Source est très importante, les électrons sont déviés
du canal vers la grille flottante et capturés par celle-ci. Cette charge se maintient une dizaine d'années en
condition normale.

L’exposition d’une vingtaine de minutes à un rayonnement ultraviolet permet d’annuler la charge stockée
dans la grille flottante. Cet effacement est reproductible plus d’un millier de fois. Les boîtiers des EPROM se
caractérisent donc par la présence d’une petite fenêtre transparente en quartz qui assure le passage des UV.
ISET de Sfax
Cours Architecture des Ordinateurs 21
Afin d’éviter toute perte accidentelle de l’information, il faut obturer la fenêtre d’effacement lors de
l’utilisation.

Avantages:
☺ Reprogrammable et non Volatile ;

Inconvénients :
 Impossible de sélectionner une seule cellule à effacer ;
 Impossible d’effacer la mémoire in-situ ;
 l’écriture est beaucoup plus lente que sur une RAM. (environ 1000x).

3.2.4 L’EEPROM
L’EEPROM (Electically EPROM) est une mémoire programmable et effaçable électriquement. Elle répond
ainsi à l’inconvénient principal de l’EPROM et peut être programmée in situ.

Fig 3.6 Image d’une EEPROM


Structure:
Dans une EEPROM, le point mémoire est réalisé à partir d’un transistor SAMOS reprenant le même principe
que le FAMOS sauf que l’épaisseur entre les deux grilles est beaucoup plus faible.

Programmation:
Une forte tension électrique appliquée entre grille et source conduit à la programmation de la mémoire. Une
forte tension inverse provoquera la libération des électrons et donc l’effacement de la mémoire.

Avantages:
☺ Comportement d'une RAM non Volatile.
☺ Programmation et effacement mot par mot possible.

Inconvénients:
 Très lente pour une utilisation en RAM ;
 Coût de réalisation.

3.2.5 La FLASH EPROM


La mémoire Flash s'apparente à la technologie de l’EEPROM. Elle est programmable et effaçable
électriquement comme les EEPROM.

Structure:
Il existe deux technologie différentes qui se différencient par l’organisation de leurs réseaux mémoire :
l’architecture NOR et NAND. L’architecture NOR propose un assemblage des cellules élémentaires de
mémorisation en parallèle avec les lignes de sélection comme dans une EEPROM classique. L’architecture
NAND propose un assemblage en série de ces mêmes cellules avec les lignes de sélection. D’un point de vue
pratique, la différence majeure entre NOR et NAND tient à leurs interfaces. Alors qu’une NOR dispose de
bus d’adresses et de données dédiés, la NAND est dotée d’une interface d’E/S indirecte. Par contre, la
structure NAND autorise une implantation plus dense grâce à une taille de cellule approximativement 40 %
plus petite que la structure NOR.
ISET de Sfax
Cours Architecture des Ordinateurs 22
Programmation:
NOR et NAND exploitent toutes deux le même principe de stockage de charges dans la grille flottante d’un
transistor. Les Flash NOR autorise un adressage aléatoire qui permet de la programmer octet par octet alors
que la Flash NAND autorise un accès séquentiel aux données et permettra seulement une programmation par
secteur comme sur un disque dur.

Avantages:
Flash NOR:
☺ Comportement d'une RAM non Volatile;
☺ Programmation et effacement mot par mot possible;
☺ Temps d’accès faible.

Flash NAND:
☺ Comportement d'une RAM non Volatile ;
☺ Forte densité d’intégration ;
☺ Coût réduit ;
☺ Rapidité de l’écriture/lecture par paquet ;
☺ Consommation réduite.

Inconvénients:
Flash NOR:
 Lenteur de l’écriture/lecture par paquet ;
 coût.

Flash NAND:
 Ecriture/lecture par octet impossible ;
 Interface E/S indirecte.

La Flash EPROM a connu un essor très important ces dernières années avec le boom de la téléphonie
portable et des appareils multimédia (PDA, appareil photo numérique, lecteur MP3, etc...).

3.4- Critères de choix d’une mémoire :


Les principaux critères à retenir sont :
❖ Capacité ;
❖ Vitesse ;
❖ Consommation ;
❖ Coût.

3.5 Notion de hiérarchie mémoire :


Une mémoire idéale serait une mémoire de grande capacité, capable de stocker un maximum d’informations
et possédant un temps d’accès très faible afin de pouvoir travailler rapidement sur ces informations. Mais il se
trouve que les mémoires de grande capacité sont souvent très lentes et que les mémoires rapides sont très
chères. Et pourtant, la vitesse d’accès à la mémoire conditionne dans une large mesure les performances d’un
système. En effet, c’est là que se trouve le goulot d’étranglement entre un microprocesseur capable de traiter
des informations très rapidement et une mémoire beaucoup plus lente (ex : processeur actuel à 3Ghz et
mémoire à 400 MHz). Or, on n’a jamais besoin de toutes les informations au même moment. Afin d’obtenir le
meilleur compromis coût performance, on définie donc une hiérarchie mémoire. On utilise des mémoires de
faible capacité mais très rapide pour stocker les informations dont le microprocesseur se sert le plus et on
utilise des mémoires de capacité importante mais beaucoup plus lente pour stocker les informations dont le
microprocesseur se sert le moins. Ainsi, plus on s’éloigne du microprocesseur et plus la capacité et le temps
d’accès des mémoires vont augmenter.

ISET de Sfax
Cours Architecture des Ordinateurs 23
Fig 3.7 Hiérarchie mémoire
Remarques:
 Les registres sont les éléments de mémoire les plus rapides. Ils sont situés au niveau du processeur et
servent au stockage des opérandes et des résultats intermédiaires.
 La mémoire cache est une mémoire rapide de faible capacité destinée à accélérer l’accès à la mémoire
centrale en stockant les données les plus utilisées.
 La mémoire principale est l’organe principal de rangement des informations. Elle contient les
programmes (instructions et données) et est plus lente que les deux mémoires précédentes.
 La mémoire d’appui sert de mémoire intermédiaire entre la mémoire centrale et les mémoires de masse.
Elle joue le même rôle que la mémoire cache.
 La mémoire de masse est une mémoire périphérique de grande capacité utilisée pour le stockage
permanent ou la sauvegarde des informations. Elle utilise pour cela des supports magnétiques (disque dur,
ZIP) ou optiques (CDROM, DVDROM).

Fig 3.8 Mémoire de masse

ISET de Sfax
Cours Architecture des Ordinateurs 24
Chapitre LE

 MICROPROCESSEUR

1- Architecture de base d’un microprocesseur


L’unité de commande
L’unité de traitement
Schéma fonctionnel

2- Cycle d’exécution d’une instruction


Interface de connexion au modem
Bloc d’émission
Bloc de réception

3- Jeu d’instructions
Définition
Type d’instruction
Codage
Mode d’adressage
Temps d’exécution

4 Langage de programmation
5 Performance d’un microprocesseur
6 Notion d’architecture RISC ET CISC
L’architecture CISC
L’architecture RISC
Comparaison
7 Amélioration de l’architecture de base
Architecture pipeline
Notion de cache mémoire
Architecture superscalaire
Architecture pipeline et superscalaire

ISET de Sfax
Cours Architecture des Ordinateurs 25
8 Processeurs spéciaux
Le microprocesseur
Le processeur de signal
9 Exemples
AMD ATHLON
INTEL PENTIUM III

ISET de Sfax
Cours Architecture des Ordinateurs 26
Un microprocesseur est un circuit intégré complexe caractérisé par une très grande intégration et doté des
facultés d'interprétation et d'exécution des instructions d'un programme. Il est chargé d’organiser les tâches
précisées par le programme et d’assurer leur exécution. Il doit aussi prendre en compte les informations
extérieures au système et assurer leur traitement. C’est le cerveau du système.

1- ARCHITECTURE DE BASE D’UN MICROPROCESSEUR


A l’heure actuelle, un microprocesseur regroupe sur quelques millimètres carrés des fonctionnalités toujours
plus complexes. Leur puissance continue de s’accroître et leur encombrement diminue régulièrement
respectant toujours, pour le moment, la fameuse loi de Moore (1).
Un microprocesseur est construit autour de deux éléments principaux :
❖ Une unité de commande ;
❖ Une unité de traitement.

Associés à des registres chargés de stocker les différentes informations à traiter. Ces trois éléments sont reliés
entre eux par des bus interne permettant les échanges d’informations.

Fig 4.1 Architecture de base d’un microprocesseur

Remarques :
Il existe deux types de registres :
 Les registres d'usage général permettent à l'unité de traitement de manipuler des données à vitesse
élevée. Ils sont connectés au bus de données interne au microprocesseur.
 Les registres d'adresses (pointeurs) connectés sur le bus adresses.

1.1- L’unité de commande


Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche en mémoire de
l'instruction. Comme chaque instruction est codée sous forme binaire, elle en assure le décodage pour enfin
réaliser son exécution puis effectue la préparation de l'instruction suivante. Pour cela, elle est composée par :
❖ Le compteur de programme constitué par un registre dont le contenu est initialisé avec l'adresse de la
première instruction du programme. Il contient toujours l’adresse de l’instruction à exécuter.
❖ Le registre d'instruction et le décodeur d'instruction : chacune des instructions à exécuter est rangée dans
le registre instruction puis est décodée par le décodeur d’instruction.
❖ Bloc logique de commande (ou séquenceur) : Il organise l'exécution des instructions au rythme d’une
horloge. Il élabore tous les signaux de synchronisation internes ou externes (bus de commande) du
microprocesseur en fonction des divers signaux de commande provenant du décodeur d’instruction ou du
registre d’état par exemple. Il s'agit d'un automate réalisé soit de façon câblée (obsolète), soit de façon
micro-programmée, on parle alors de micromicroprocesseur.

1.2- L’unité de traitement


C’est le cœur du microprocesseur. Elle regroupe les circuits qui assurent les traitements nécessaires à
l'exécution des instructions :

ISET de Sfax
Cours Architecture des Ordinateurs 27
❖ L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions logiques (ET,
OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).
❖ Le registre d'état est généralement composé de 8 bits à considérer individuellement. Chacun de ces bits
est un indicateur dont l'état dépend du résultat de la dernière opération effectuée par l’UAL. On les
appelle indicateur d’état ou flag ou drapeaux. Dans un programme le résultat du test de leur état
conditionne souvent le déroulement de la suite du programme. On peut citer par exemple les indicateurs
de :
▪ Retenue (carry : C) ;
▪ Retenue intermédiaire (Auxiliary-Carry : AC) ;
▪ Signe (Sign : S) ;
▪ Débordement (overflow : OV ou V) ;
▪ Zéro (Z) ;
▪ Parité (Parity : P) .

Les accumulateurs sont des registres de travail qui servent à stocker une opérande au début d'une opération
arithmétique et le résultat à la fin de l'opération.

1.3 - Schéma fonctionnel

Fig 4.2 Schéma fonctionnel d’un microprocesseur

2- CYCLE D’EXECUTION D’UNE INSTRUCTION


Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en binaire. Le
traitement d’une instruction peut être décomposé en trois phases :

➢ Phase 1: Recherche de l'instruction à traiter :


1. Le PC contient l'adresse de l'instruction suivante du programme. Cette valeur est placée sur le bus
d'adresses par l'unité de commande qui émet un ordre de lecture.
2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire sélectionnée
est disponible sur le bus des données.
3. L'instruction est stockée dans le registre instruction du processeur.

ISET de Sfax
Cours Architecture des Ordinateurs 28
Fig 4.3 Recherche de l'instruction à traiter

➢ Phase 2 : Décodage de l’instruction et recherche de l'opérande :


Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut être codée sur plusieurs
mots. Ce premier mot contient le code opératoire qui définit la nature de l'opération à effectuer (addition,
rotation,...) et le nombre de mots de l'instruction.
❖ L'unité de commande transforme l'instruction en une suite de commandes élémentaires nécessaires au
traitement de l'instruction.
❖ Si l'instruction nécessite une donnée en provenance de la mémoire, l'unité de commande récupère sa
valeur sur le bus de données.
❖ L’opérande est stocké dans un registre.

Fig 4.4 Décodage de l’instruction et recherche de l'opérande

➢ Phase 3 : Exécution de l'instruction


1. Le micro-programme réalisant l'instruction est exécuté.
2. Les drapeaux sont positionnés (registre d'état).
3. L'unité de commande positionne le PC pour l'instruction suivante.

ISET de Sfax
Cours Architecture des Ordinateurs 29
Fig 4.5 Exécution de l’instruction

3- JEU D’INSTRUCTIONS
3.1- Définition
La première étape de la conception d’un microprocesseur est la définition de son jeu d’instructions. Le jeu
d’instructions décrit l’ensemble des opérations élémentaires que le microprocesseur pourra exécuter. Il va
donc en partie déterminer l’architecture du microprocesseur à réaliser et notamment celle du séquenceur. A un
même jeu d’instructions peut correspondre un grand nombre d’implémentations différentes du
microprocesseur.
3.2- Type d’instructions
Les instructions que l’on retrouve dans chaque microprocesseur peuvent être classées en 4 groupes :
• Transfert de données pour charger ou sauver en mémoire, effectuer des transferts de registre à
registre, etc…
• Opérations arithmétiques : addition, soustraction, division, multiplication
• Opérations logiques : ET, OU, NON, NAND, comparaison, test, etc.
• Contrôle de séquence : branchement, test, etc.
3.3- Codage
Les instructions et leurs opérandes (paramètres) sont stockés en mémoire principale. La taille totale
d’une instruction (nombre de bits nécessaires pour la représenter en mémoire) dépend du type d’instruction et
aussi du type d’opérande. Chaque instruction est toujours codée sur un nombre entier d’octets afin de faciliter
son décodage par le processeur. Une instruction est composée de deux champs :
• le code instruction, qui indique au processeur quelle instruction réaliser
• le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire (son adresse).

Exemple :

Le nombre d'instructions du jeu d'instructions est directement lié au format du code instruction. Ainsi
un octet permet de distinguer au maximum 256 instructions différentes.
3.4- Mode d’adressage
Un mode d'adressage définit la manière dont le microprocesseur va accéder à l’opérande. Les
différents modes d'adressage dépendent des microprocesseurs mais on retrouve en général :
• L'adressage de registre où l’on traite la données contenue dans un registre
ISET de Sfax
Cours Architecture des Ordinateurs 30
• L'adressage immédiat où l’on définit immédiatement la valeur de la donnée
• L'adressage direct où l’on traite une données en mémoire

Selon le mode d’adressage de la donnée, une instruction sera codée par 1 ou plusieurs octets.
3.5- Temps d’exécution
Chaque instruction nécessite un certain nombre de cycles d’horloges pour s’effectuer. Le nombre de
cycles dépend de la complexité de l’instruction et aussi du mode d’adressage. Il est plus long d’accéder à la
mémoire principale qu’à un registre du processeur. La durée d’un cycle dépend de la fréquence d’horloge du
séquenceur.
4- LANGAGE DE PROGRAMMATION
Le langage machine est le langage compris par le microprocesseur. Ce langage "Langage bas niveau"
est difficile à maîtriser puisque chaque instruction est codée par une séquence propre de bits. Afin de faciliter
la tâche du programmeur, on a créé différents langages plus ou moins évolués.
Le langage assembleur est le langage le plus « proche » du langage machine. Il est composé par des
instructions en général assez rudimentaires que l’on appelle des mnémoniques. Ce sont essentiellement des
opérations de transfert de données entre les registres et l'extérieur du microprocesseur (mémoire ou
périphérique), ou des opérations arithmétiques ou logiques. Chaque instruction représente un code machine
différent. Chaque microprocesseur peut posséder un assembleur différent.
La difficulté de mise en œuvre de ce type de langage, et leur forte dépendance avec la machine a nécessité la
conception de langages de haut niveau, plus adaptés à l'homme, et aux applications qu'il cherchait à
développer. Faisant abstraction de toute architecture de machine, ces langages permettent l'expression
d'algorithmes sous une forme plus facile à apprendre, et à dominer (C, Pascal, Java, etc…). Chaque
instruction en langage de haut niveau correspondra à une succession d’instructions en langage assembleur.
Une fois développé, le programme en langage de haut niveau n’est donc pas compréhensible par le
microprocesseur. Il faut le compiler pour le traduire en assembleur puis l’assembler pour le convertir en code
machine compréhensible par le microprocesseur. Ces opérations sont réalisées à partir de logiciels spécialisés
appelés compilateur et assembleur.

Exemple de programme :
Code machine (68HC11) Assembleur (68HC11) Langage C
@00 C6 64 LDAB #100 A=0 ;
@01 B6 00 LDAA #0 for ( i=1 ; i<101 ; i++) A=A+i
@03 1B ret ABA ;
@04 5A DECB

5- PERFORMANCES D’UN MICROPROCESSEUR


On peut caractériser la puissance d’un microprocesseur par le nombre d’instructions qu’il est capable
de traiter par seconde. Pour cela, on définit :
❖ Le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge nécessaire pour
l’exécution d’une instruction pour un microprocesseur donné.
❖ Le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de traitement du
microprocesseur.

MIPS= avec Fh en MHZ

ISET de Sfax
Cours Architecture des Ordinateurs 31
Pour augmenter les performances d’un microprocesseur, on peut donc soit augmenter la fréquence d'horloge
(limitation matérielle), soit diminuer le CPI (choix d'un jeu d'instruction adapté).

6- NOTION D’ARCHITECTURE RISC ET CISC


Actuellement l’architecture des microprocesseurs se composent de deux grandes familles :
• L’ architecture CISC (Complex Instruction Set Computer)
• L’ architecture RISC (Reduced Instruction Set Computer)

6.1- L’architecture CISC


Par le passé la conception de machines CISC était la seule envisageable. En effet, vu que la mémoire
travaillait très lentement par rapport au processeur, on pensait qu’il était plus intéressant de soumettre au
microprocesseur des instructions complexes. Ainsi, plutôt que de coder une opération complexe par plusieurs
instructions plus petites (qui demanderaient autant d’accès mémoire très lent), il semblait préférable d’ajouter
au jeu d’instructions du microprocesseur une instruction complexe qui se chargerait de réaliser cette
opération. De plus, le développement des langages de haut niveau posa de nombreux problèmes quant à la
conception de compilateurs. On a donc eu tendance à incorporer au niveau processeur des instructions plus
proches de la structure de ces langages.
C’est donc une architecture avec un grand nombre d’instructions où le microprocesseur doit exécuter
des tâches complexes par instruction unique. Pour une tâche donnée, une machine CISC exécute ainsi un petit
nombre d’instructions mais chacune nécessite un plus grand nombre de cycles d’horloge. Le code machine de
ces instructions varie d’une instruction à l’autre et nécessite donc un décodeur complexe (micro-code)

6.2- L’architecture RISC


Des études statistiques menées au cours des années 70 ont clairement montré que les programmes
générés par les compilateurs se contentaient le plus souvent d'affectations, d'additions et de multiplications
par des constantes. Ainsi, 80% des traitements des langages de haut niveau faisaient appel à seulement 20%
des instructions du microprocesseur. D’où l’idée de réduire le jeu d’instructions à celles le plus couramment
utilisées et d’en améliorer la vitesse de traitement.
C’est donc une architecture dans laquelle les instructions sont en nombre réduit (chargement,
branchement, appel sous-programme). Les architectures RISC peuvent donc être réalisées à partir de
séquenceur câblé. Leur réalisation libère de la surface permettant d’augmenter le nombre de registres ou
d’unités de traitement par exemple. Chacune de ces instructions s’exécute ainsi en un cycle d’horloge. Bien
souvent, ces instructions ne disposent que d’un seul mode d’adressage. Les accès à la mémoire s’effectuent
seulement à partir de deux instructions (Load et Store). Par contre, les instructions complexes doivent être
réalisées à partir de séquences basées sur les instructions élémentaires, ce qui nécessite un compilateur très
évolué dans le cas de programmation en langage de haut niveau.

6.3- Comparaison
Le choix dépendra des applications visées. En effet, si on diminue le nombre d'instructions, on crée
des instructions complexes (CISC) qui nécessitent plus de cycles pour être décodées et si on diminue le
nombre de cycles par instruction, on crée des instructions simples (RISC) mais on augmente alors le nombre
d'instructions nécessaires pour réaliser le même traitement.

ISET de Sfax
Cours Architecture des Ordinateurs 32
7- AMELIORATIONS DE L’ARCHITECTURE DE BASE
L'ensemble des améliorations des microprocesseurs visent à diminuer le temps d'exécution du
programme.
La première idée qui vient à l’esprit est d’augmenter tout simplement la fréquence de l’horloge du
microprocesseur. Mais l’accélération des fréquences provoque un surcroît de consommation ce qui entraîne
une élévation de température. On est alors amené à équiper les processeurs de systèmes de refroidissement ou
à diminuer la tension d’alimentation.
Une autre possibilité d’augmenter la puissance de traitement d’un microprocesseur est de diminuer le
nombre moyen de cycles d’horloge nécessaire à l’exécution d’une instruction. Dans le cas d’une
programmation en langage de haut niveau, cette amélioration peut se faire en optimisant le compilateur. Il
faut qu’il soit capable de sélectionner les séquences d’instructions minimisant le nombre moyen de cycles par
instructions. Une autre solution est d’utiliser une architecture de microprocesseur qui réduise le nombre de
cycles par instruction.

7.1- Architecture PIPELINE


Principe :
L’exécution d’une instruction est décomposée en une succession d’étapes et chaque étape correspond
à l’utilisation d’une des fonctions du microprocesseur. Lorsqu’une instruction se trouve dans l’une des
étapes, les composants associés aux autres étapes ne sont pas utilisés. Le fonctionnement d’un
microprocesseur simple n’est donc pas efficace.
L’architecture pipeline permet d’améliorer l’efficacité du microprocesseur. En effet, lorsque la
première étape de l’exécution d’une instruction est achevée, l’instruction entre dans la seconde étape de son
exécution et la première phase de l’exécution de l’instruction suivante débute. Il peut donc y avoir une
instruction en cours d’exécution dans chacune des étapes et chacun des composants du microprocesseur peut
être utilisé à chaque cycle d’horloge. L’efficacité est maximale. Le temps d’exécution d’une instruction n’est
pas réduit mais le débit d’exécution des instructions est considérablement augmenté. Une machine pipeline se
caractérise par le nombre d’étapes utilisées pour l’exécution d’une instruction, on appelle aussi ce nombre
d’étapes le nombre d’étages du pipeline.

Exemple de l’exécution en 4 phases d’une instruction :

ISET de Sfax
Cours Architecture des Ordinateurs 33
Modèle classique :

Modèle pipeliné :

Gain de performance :
Dans cette structure, la machine débute l’exécution d’une instruction à chaque cycle et le pipeline est
pleinement occupé à partir du quatrième cycle. Le gain obtenu dépend donc du nombre d’étages du pipeline.
En effet, pour exécuter n instructions, en supposant que chaque instruction s’exécute en k cycles d’horloge, il
faut :
❖ n.k cycles d’horloge pour une exécution séquentielle.
❖ k cycles d’horloge pour exécuter la première instruction puis n-1 cycles pour les n-1 instructions
suivantes si on utilise un pipeline de k étages

Le gain obtenu est donc de :

G=

Donc lorsque le nombre n d’instructions à exécuter est grand par rapport à k, on peut admettre qu’on divise le
temps d’exécution par k.
Remarques :
Le temps de traitement dans chaque unité doit être à peu près égal sinon les unités rapides doivent
attendre les unités lentes.

Exemples :
L’Athlon d’AMD comprend un pipeline de 11 étages.
Les Pentium 2, 3 et 4 d’Intel comprennent respectivement un pipeline de 12, 10 et 20 étages.

Problèmes :
La mise en place d’un pipeline pose plusieurs problèmes. En fait, plus le pipeline est long, plus le
nombre de cas où il n’est pas possible d’atteindre la performance maximale est élevé. Il existe 3 principaux
cas où la performance d’un processeur pipeliné peut être dégradée ; ces cas de dégradations de performances
sont appelés des aléas :
 Aléa structurel qui correspond au cas où deux instructions ont besoin d’utiliser la même ressource du
processeur (conflit de dépendance),
 Aléa de données qui intervient lorsqu’une instruction produit un résultat et que l’instruction suivante
utilise ce résultat avant qu’il n’ait pu être écrit dans un registre,
 Aléa de contrôle qui se produit chaque fois qu’une instruction de branchement est exécutée.

ISET de Sfax
Cours Architecture des Ordinateurs 34
Lorsqu’une instruction de branchement est chargée, il faut normalement attendre de connaître
l’adresse de destination du branchement pour pouvoir charger l’instruction suivante. Les instructions
qui suivent le saut et qui sont en train d’être traitées dans les étages inférieurs le sont en général pour
rien, il faudra alors vider le pipeline. Pour atténuer l’effet des branchements, on peut spécifier après le
branchement des instructions qui seront toujours exécutées. On fait aussi appel à la prédiction de
branchement qui a pour but de recenser lors de branchements le comportement le plus probable. Les
mécanismes de prédiction de branchement permettent d'atteindre une fiabilité de prédiction de l'ordre
de 90 à 95 %.

Lorsqu’un aléa se produit, cela signifie qu’une instruction ne peut continuer à progresser dans le
pipeline. Pendant un ou plusieurs cycles, l’instruction va rester bloquée dans un étage du pipeline, mais les
instructions situées plus en avant pourront continuer à s’exécuter jusqu’à ce que l’aléa ait disparu. Plus le
pipeline possède d’étages, plus la pénalité est grande. Les compilateurs s’efforcent d’engendrer des séquences
d’instructions permettant de maximiser le remplissage du pipeline. Les étages vacants du pipeline sont
appelés des « bulles » de pipeline, en pratique une bulle correspond en fait à une instruction NOP (No
OPeration) émise à la place de l’instruction bloquée.

7.2- Notion de cache mémoire


Problème posé
L’écart de performance entre le microprocesseur et la mémoire ne cesse de s’accroître. En effet, les
composants mémoire bénéficient des mêmes progrès technologique que les microprocesseurs mais le
décodage des adresses et la lecture/écriture d’une données sont des étapes difficiles à accélérer. Ainsi, le
temps de cycle processeur décroît plus vite que le temps d’accès mémoire entraînant un goulot
d’étranglement. La mémoire n'est plus en mesure de délivrer des informations aussi rapidement que le
processeur est capable de les traiter. Il existe donc une latence d’accès entre ces deux organes.
Principe
Depuis le début des années 80, une des solutions utilisées pour masquer cette latence est de disposer
une mémoire très rapide entre le microprocesseur et la mémoire. Elle est appelée cache mémoire. On
compense ainsi la faible vitesse relative de la mémoire en permettant au microprocesseur d’acquérir les
données à sa vitesse propre. On la réalise à partir de cellule SRAM de taille réduite (à cause du coût). Sa
capacité mémoire est donc très inférieure à celle de la mémoire principale et sa fonction est de stocker les
informations les plus récentes ou les plus souvent utilisées par le microprocesseur. Au départ cette mémoire
était intégrée en dehors du microprocesseur mais elle fait maintenant partie intégrante du microprocesseur et
se décline même sur plusieurs niveaux.

Le principe de cache est très simple : le microprocesseur n’a pas conscience de sa présence et lui
envoie toutes ses requêtes comme s’il agissait de la mémoire principale :
➢ Soit la donnée ou l’instruction requise est présente dans le cache et elle est alors envoyée directement
au microprocesseur. On parle de succès de cache. (a)
➢ Soit la donnée ou l’instruction n’est pas dans le cache, et le contrôleur de cache envoie alors une
requête à la mémoire principale. Une fois l’information récupérée, il la renvoie au microprocesseur
tout en la stockant dans le cache. On parle de défaut de cache. (b)

ISET de Sfax
Cours Architecture des Ordinateurs 35
Fig 4.6 Mécanisme de mémoire cache

Bien entendu, le cache mémoire n’apporte un gain de performance que dans le premier cas. Sa performance
est donc entièrement liée à son taux de succès. Il est courant de rencontrer des taux de succès moyen de
l’ordre de 80 à 90%.

Remarque :
Un cache utilisera une carte pour savoir quels sont les mots de la mémoire principale dont il possède une
copie. Cette carte devra avoir une structure simple.
Il existe dans le système deux copies de la même information : l’originale dans la mémoire principale et la
copie dans le cache. Si le microprocesseur modifie la donnée présente dans le cache, il faudra prévoir une
mise à jour de la mémoire principale. Lorsque le cache doit stocker une donnée, il est amené à en effacer une
autre. Il existe donc un contrôleur permettant de savoir quand les données ont été utilisées pour la dernière
fois. La plus ancienne non utilisée est alors remplacée par la nouvelle. A noter que l’on peut reprendre le
même principe pour les disques durs et CD/DVD.

7.3- Architecture SUPERSCALAIRE


Une autre façon de gagner en performance est d’exécuter plusieurs instructions en même temps.
L'approche superscalaire consiste à doter le microprocesseur de plusieurs unités de traitement travaillant en
parallèle. Les instructions sont alors réparties entre les différentes unités d'exécution. Il faut donc pouvoir
soutenir un flot important d’instructions et pour cela disposer d’un cache performant.
Architecture scalaire :

Architecture superscalaire :

C'est le type d'architecture mise en oeuvre dans les premiers Pentium d'Intel apparus en 1993.
7.4- Architecture PIPELINE ET SUPERSCALAIRE
Le principe est d’exécuter les instructions de façon pipelinée dans chacune des unités de traitement
ISET de Sfax
Cours Architecture des Ordinateurs 36
travaillant en parallèle.

8- PROCESSEURS SPECIAUX
8.1- Le microcontroleur
Ce sont des systèmes minimum sur une seule puce. Ils contiennent un CPU, de la RAM, de la ROM et
des ports d’Entrée/Sorties (parallèles, séries, I2C, etc..). Ils comportent aussi des fonctions spécifiques comme
des compteurs programmables pour effectuer des mesures de durées, des CAN voir des CNA pour s’insérer
au sein de chaînes d’acquisition, des interfaces pour réseaux de terrain, etc.
Il est adapté pour répondre au mieux aux besoins des applications embarquées (appareil
électroménagers, chaîne d’acquisition, lecteur carte à puce, etc.). Il est par contre généralement moins
puissant en terme de rapidité, de taille de données traitables ou de taille de mémoire adressable qu’un
microprocesseur.

8.2- Le processeur de signal


Le processeur de signal est beaucoup plus spécialisé. Alors qu'un microprocesseur n'est pas conçu
pour une application spécifique, le processeur DSP (Digital Signal Processor) est optimisé pour effectuer du
traitement numérique du signal (calcul de FFT, convolution, filtrage numérique, etc.).
Les domaines d’application des D.S.P étaient à l’origine les télécommunications et le secteur
militaire. Aujourd’hui, les applications se sont diversifiées vers le multimédia (lecteur CD, MP3, etc..)
l’électronique grand public (télévision numérique, téléphone portable, etc.), l’automatique, l’instrumentation,
l’électronique automobile, etc.

9- EXEMPLE
Intel pentium III :

ISET de Sfax
Cours Architecture des Ordinateurs 37
Caractéristiques :
 Plusieurs unités de traitement mais au 5 instructions exécutées en même temps sur 5 ports :
▪ Port 0 : ALU, FPU, AGU MMX et SSE
▪ Port 1 : ALU, SSE, MMX
▪ Port 2 : AGU (load)
▪ Port 3 : AGU (store)
▪ Port 4 : Store Data Unit
 Pipeline entier : 12 à 17 étages, pipeline flottant : environ 25 étages
 Prédiction dynamique et exécution du traitement "dans le désordre" (out-of-order)
 3 unités de décodage parallèles : 1 micro-programmée, 2 câblées.
 5 pipelines de 10 étages
 Cache mémoire de niveau 1 (L1) : 32 Ko
▪ 16 Ko pour les données
▪ 16 Ko pour les instructions
 Contrôleur de cache L2 supportant jusqu’à 512 Ko à ½ de la vitesse CPU
 9.5 millions de transistors

ISET de Sfax
Cours Architecture des Ordinateurs 38
Chapitre INTRODUCTION

 AU LANGAGE
MACHINE

1- Caractéristiques du processeur étudié 36

2- Jeu d’instruction 36

Types d’instructions
Codage des instructions et modes d’adressage
Temps d’exécution
Ecriture des instructions en langage symbolique
Utilisation du programme DEBUG

3- Branchements 40
Saut inconditionnel
Indicateurs
Sauts conditionnels
4- Instructions arithmétiques et logiques
Instruction de décalage et de rotation
Instructions logiques

ISET de Sfax
Cours Architecture des Ordinateurs 39
Dans cette partie du cours, nous allons étudier la programmation en langage machine et en
assembleur d’un microprocesseur. L’étude complète d’un processeur réel, comme le 80486 ou le Pentium
fabriqués par Intel, dépasse largement le cadre de ce cours : le nombre d’instructions et de registres est très
élevé. Nous allons ici nous limiter à un sous ensemble du microprocesseur 80486 (seuls les registres et les
instructions les plus simples seront étudiés). De cette façon, nous pourrons tester sur un PC les programmes
en langage machine que nous écrirons.

1- CARACTERISTIQUES DU PROCESSEUR ETUDIE


La gamme de microprocesseurs 80x86 équipe les micro-ordinateurs de type PC et compatibles. Les
premiers modèles de PC, commercialisés au début des années 1980, utilisaient le 8086, un microprocesseur
16 bits 1.
Les modèles suivants sont utilisé successivement le 80286, 80386, 80486 et Pentium (ou 80586). Chacun de
ces processeurs est plus puissant que les précédents : augmentation de la fréquence d’horloge, de la largeur de
bus (32 bits d’adresse et de données), introduction de nouvelles instructions (par exemple calcul sur les réels)
et ajout de registres.
Chacun d’entre eux est compatible avec les modèles précédents; un programme écrit dans le langage machine
du 286 peut s’exécuter sans modification sur un 486. L’inverse n’est pas vrai, puisque chaque génération a
ajouté des instructions nouvelles. On parle donc de compatibilité ascendante.
Du fait de cette compatibilité, il est possible de programmer le 486, utilisé dans nos salles de Travaux
Pratiques, comme un processeur 16 bits. C’est ce que nous ferons cette année par souci de simplification.
Ainsi, nous n’utiliserons que des registres de 16 bits.

Voici les caractéristiques du processeur simplifié que nous étudierons :


 CPU 16 bits à accumulateur :
• Bus de données 16 bits;
• Bus d’adresse 32 bits;
 Registres :
• Accumulateur AX (16 bits);
• Registres auxiliaires BX et CX (16 bits);
• Pointeur d’instruction IP (16 bits);
• Registres segments CS, DS, SS (16 bits);
• Pointeur de pile SP (16 bits), et pointeur BP (16 bits).

Les registres IP et AX (accumulateur) ont déjà été étudiés. Les autres le seront progressivement dans ce
chapitre.
Nous verrons plus loin que les registres de données de 16 bits peuvent parfois être utilisés comme deux
registres indépendants de 8 bits (AX devient la paire (AH,AL)) :

Noter que nous évoquons ici uniquement les registres qui apparaissent explicitement dans l’écriture des
instructions, et pas les registres intermédiaires tels que RI, RTUAL et RTA.

2- JEUX D’INSTRUCTION
2.1- Types d’instructions
Instructions d’affectation :
Déclenchent un transfert de données entre l’un des registres du processeur et la mémoire principale.
• Transfert : CPU← Mémoire Principale (lecture);
• Transfert : CPU→ Mémoire Principale (écriture);

Instructions arithmétiques et logiques :


Opérations entre une donnée et l’accumulateur AX. Le résultat est placé dans l’accumulateur. La donnée peut
être une constante ou une valeur contenue dans un emplacement mémoire.
ISET de Sfax
Cours Architecture des Ordinateurs 40
Exemples :
• Addition : AX← AX + donnée;
• Soustraction : AX← AX - donnée;
• Incrémentation de AX : AX← AX + 1;
• Décrémentation : AX← AX - 1;
• Décalages à gauche et à droite;

Instructions de comparaison :
Comparaison du registre AX à une donnée et positionnement des indicateurs.
Instructions de branchement :
La prochaine instruction à exécuter est repérée en mémoire par le registre IP. Les instructions de branchement
permettent de modifier la valeur de IP pour exécuter une autre instruction (boucles, tests, etc.).
On distingue deux types de branchements :
• Branchements inconditionnels : IP← adresse d’une instruction;
• Branchements conditionnels : Si une condition est satisfaite, alors branchement, sinon passage simple
à l’instruction suivante.

2.2- Codage des instructions et modes d’adressage


Les opérandes (paramètres) sont stockés en mémoire principale.
La taille totale d’une instruction (nombre de bits nécessaires pour la représenter en mémoire) dépend du type
d’instruction et aussi du type d’opérande. Chaque instruction est toujours codée sur un nombre entier d’octets,
afin de faciliter son décodage par le processeur.

Une instruction est composée de deux champs :


Lle code opération, qui indique au processeur quelle instruction réaliser;
• Le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire (son adresse).

Selon la manière dont la donnée est spécifiée, c’est à dire selon le mode d’adressage de la donnée, une
instruction sera codée par 1, 2, 3 ou 4 octets.
Nous distinguerons ici quatre modes d’adressage: implicite, immédiat, direct et relatif (nous étudierons plus
tard un autre mode, l’adressage indirect).
Adressage implicite
L’instruction contient seulement le code opération, sur 1 ou 2 octets.

L’instruction porte sur des registres ou spécifie une opération sans opérande (exemple: “incrémenter AX”).
Adressage immédiat :
Le champ opérande contient la donnée (une valeur constante sur 1 ou 2 octets).

Exemple :
“Ajouter la valeur 5 à AX”. Ici l’opérande 5 est codée sur 2 octets puisque l’opération porte sur un registre 16
bits (AX).
Adressage direct
Le champ opérande contient l’adresse de la donnée en mémoire principale sur 2 octets.

Attention : dans le 80x86, les adresses sont toujours manipulées sur 16 bits, quelle que soit la taille réelle du
bus. Nous verrons plus tard comment le processeur fabrique les adresses réelles sur 32 bits.
ISET de Sfax
Cours Architecture des Ordinateurs 41
Exemple : “Placer dans AX la valeur contenue à l’adresse 130H”.
Adressage relatif :
Ce mode d’adressage est utilisé pour certaines instructions de branchement. Le champ opérande contient un
entier relatif codé sur 1 octet, nommé déplacement, qui sera ajouté à la valeur courante de IP.

2.3- Temps d’exécution


Chaque instruction nécessite un certain nombre de cycles d’horloges pour s’effectuer.
Le nombre de cycles dépend de la complexité de l’instruction et aussi du mode d’adressage: il est plus long
d’accéder à la mémoire principale qu’à un registre du processeur.
La durée d’un cycle dépend bien sur de la fréquence d’horloge de l’ordinateur. Plus l’horloge bat rapidement,
plus un cycle est court et plus on exécute un grand nombre d’instructions par seconde.

2.4- Ecriture des instructions en langage symbolique


Voici un programme en langage machine 80486, implanté à l’adresse 0100H :
A1 01 10 03 06 01 12 A3 01 14
Ce programme additionne le contenu de deux cases mémoire et range le résultat dans une troisième. Nous
avons simplement transcrit en hexadécimal le code du programme. Il est clair que ce type d’écriture n’est pas
très utilisable par un être humain.
A chaque instruction que peut exécuter le processeur correspond une représentation binaire sur un ou
plusieurs octets, comme on l’a vu plus haut. C’est le travail du processeur de décoder cette représentation
pour effectuer les opérations correspondantes.
Afin de pouvoir écrire (et relire) des programmes en langage machine, on utilise une notation symbolique,
appelée langage assembleur. Ainsi, la première instruction du programme ci-dessus (codeA1 01 10) sera
notée :
MOV AX, [0110]
Elle indique que le mot mémoire d’adresse 0110H est chargé dans le registre AX du processeur.
On utilise des programmes spéciaux, appelés assembleurs, pour traduire automatiquement le langage
symbolique en code machine.
Voici une transcription langage symbolique du programme complet. L’adresse de début de chaque instruction
est indiquée à gauche(en hexadécimal).
Adresse Contenu MP Langage Symbolique Explication en français
0100 A1 01 10 MOV AX, [0110] Charger AX avec le
contenu de 0110.
0103 03 06 01 12 ADD AX, [0112] Ajouter le contenu de
0112 à AX (résultat dans
AX).
0107 A3 01 14 MOV [0114], AX Ranger AX en 0114

Sens des mouvements de données :


La plupart des instructions spécifient des mouvements de données entre la mémoire principale et le
microprocesseur. En langage symbolique, on indique toujours la destination, puis la source. Ainsi
l’instruction
MOV AX, [0110]
Transfère le contenu de l’emplacement mémoire 0110H dans l’accumulateur, tandis que MOV [0112], AX
transfère le contenu de l’accumulateur dans l’emplacement mémoire 0112.
L’instruction MOV (de l’anglais move, déplacer) s’écrit donc toujours :
MOV destination, source
Modes d’adressage :

ISET de Sfax
Cours Architecture des Ordinateurs 42
• En adressage immédiat : on indique simplement la valeur de l’opérande en hexadécimal.
Exemple :
MOV AX, 12
• En adressage direct : on indique l’adresse d’un emplacement en mémoire principale
en hexadécimal entre crochets :
MOV AX, [A340]
• En adressage relatif : on indique simplement l’adresse (hexa). L’assembleur traduit
automatiquement cette adresse en un déplacement (relatif sur un octet).

Exemple :
JNE 0108
(Nous étudierons l’instruction JNE plus loin).
Tableau des instructions
Le tableau 2.2.4 donne la liste de quelques instructions importantes du 80x86.
Retour au DOS
A la fin d’un programme en assembleur, on souhaite en général que l’interpréteur de commandes du DOS
reprenne le contrôle du PC. Pour cela, on utilisera la séquence de deux instructions (voir tableauu2.2.4) :
MOV AH, 4C
INT 21

2.5- Utilisation du programme DEBUG


Debug est un programme qui s’exécute sur PC (sous DOS) et qui permet de manipuler des
programmes en langage symbolique. Il est normalement distribué avec toutes les versions du système
MS/DOS. Nous l’utiliserons en travaux pratiques.
Les fonctionnalités principales de debug sont les suivantes :
• Affichage du contenu d’une zone mémoire en hexadécimal
• Modification du contenu d’une case mémoire quelconque;
• Affichage en langage symbolique d’un programme;
• Entrée d’un programme en langage symbolique; debug traduit les instructions en langage
machine et calcule automatiquement les déplacements en adressage relatif.
• Affichage et modification de la valeur des registres du processeur;
Branchements :
Normalement, le processeur exécute une instruction puis passe à celle qui suit en mémoire, et ainsi de
suite séquentiellement. Il arrive fréquemment que l’on veuille faire répéter au processeur une certaine suite
d’instructions, comme dans le programme :
Répéter 3 fois:
ajouter 5 au registre BX
En d’autres occasions, il est utile de déclencher une action qui dépend du résultat d’un test :
Si x < 0:
y=-x
sinon
y=x

ISET de Sfax
Cours Architecture des Ordinateurs 43
TAB. 2.1 – Quelques instructions du 80x86. Le code de l’instruction est donné en hexadécimal dans la
deuxième colonne. La colonne suivante précise le nombre d’octets nécessaires pour coder l’instruction
complète (opérande inclus). On note valeur une valeur sur 16 bits, et adr une adresse sur 16 bits également.
Dans ces situations, on doit utiliser une instruction de branchement, ou saut, qui indique au processeur
l’adresse de la prochaine instruction à exécuter.
Rappelons que le registre IP du processeur conserve l’adresse de la prochaine instruction à exécuter. Lors
d’un déroulement normal, le processeur effectue les actions suivantes pour chaque instruction :
1. lire et décoder l’instruction à l’adresse IP;
2. IP← IP +taille de l’instruction;
3. exécuter l’instruction.
Pour modifier le déroulement normal d’un programme, il suffit que l’exécution de l’instruction modifie la
valeur de IP. C’est ce que font les instructions de branchement.
On distingue deux catégories de branchements, selon que le saut est toujours effectué (sauts inconditionnels)
ou qu’il est effectué seulement si une condition est vérifiée (sauts conditionnels).
Saut inconditionnel :
La principale instruction de saut inconditionnel est JMP. En adressage relatif, l’opérande de JMP est un
déplacement, c’est à dire une valeur qui va être ajoutée à IP.
L’action effectuée par JMP est :
IP = IP +déplacement
Le déplacement est un entier relatif sur codée 8 bits. La valeur du déplacement à utiliser pour atteindre une
certaine instruction est :
déplacement = adr. instruction visée - adr. instruction suivante
ISET de Sfax
Cours Architecture des Ordinateurs 44
Exemple :
Le programme suivant écrit indéfiniment la valeur 0 à l’adresse 0140H. La première instruction est implantée
à l’adresse 100H.
Adresse Contenu MP Langage Symbolique Explication en français
0100 B8 00 00 MOV AX, 0 met AX à zéro
0103 A3 01 40 MOV [140], AX écrit à l’adresse 140
0106 EB FC JMP 0103 branche en 103
0107 xxx -> instruction jamais exécutée
Le déplacement est ici égal à FCH, c’est à dire -4 (=103H-107H).
Indicateurs :
Les instructions de branchements conditionnels utilisent les indicateurs, qui sont des bits spéciaux positionnés
par l’UAL après certaines opérations. Les indicateurs sont regroupés dans le registre d’état du processeur. Ce
registre n’est pas accessible globalement par des instructions; chaque indicateur est manipulé
individuellement par des instructions spécifiques.
Nous étudierons ici les indicateurs nommés ZF, CF, SF et OF.
ZF Zero Flag
Cet indicateur est mis à 1 lorsque le résultat de la dernière opération est zéro.
Lorsque l’on vient d’effectuer une soustraction (ou une comparaison), ZF=1 indique que les deux
opérandes étaient égaux. Sinon, ZF est positionné à 0.
CF Carry Flag
C’est l’indicateur de report (retenue), qui intervient dans les opérations d’addition et de soustractions
sur des entiers naturels. Il est positionné en particulier par les instructions ADD, SUB et CMP.
CF = 1 s’il y a une retenue après l’addition ou la soustraction du bit de poids fort des opérandes.
Exemples (sur 4 bits pour simplifier) :
0100 1100 1111
+ 0110 + 0110 + 0001
--------- --------- --------
CF=0 1 0 1 0 CF=1 0 0 1 0 CF=1 0 0 0 0
SF Sign Flag
SF est positionné à 1 si le bit de poids fort du résultat d’une addition ou soustraction est 1; sinon
SF=0. SF est utile lorsque l’on manipule des entiers relatifs, car le bit de poids fort donne alors le
signe du résultat. Exemples (sur 4 bits) :
0100 1100 1111
+ 0110 + 0110 + 0001
--------- --------- --------
SF=1 1 0 1 0 SF=0 0 0 1 0 SF=0 0 0 0 0
OF OverflowFlag
Indicateur de débordement4 OF=1 si le résultat d’une addition ou soustraction donne un nombre qui
n’est pas codable en relatif dans l’accumulateur (par exemple si l’addition de 2 nombres positifs
donne un codage négatif).
0100 1100 1111
+ 0110 + 0110 + 0001
--------- --------- --------
OF=1 1 0 1 0 OF=0 0 0 1 0 OF=1 0 0 0 0
Lorsque l’UAL effectue une addition, une soustraction ou une comparaison, les quatre indicateurs sont
positionnés. Certaines autres instructions que nous étudierons plus loin peuvent modifier les indicateurs.
Instruction CMP :
Il est souvent utile de tester la valeur du registre AX sans modifier celui-ci. L’instruction CMP effectue
exactement les mêmes opérations que SUB, mais ne stocke pas le résultat de la soustraction. Son seul effet est
donc de positionner les indicateurs.
Exemple : après l’instruction
CMP AX, 5
On aura ZF = 1 si AX contient la valeur 5, et ZF = 0 si AX est différent de 5.
Débordement, ou dépassement de capacité, overflow en anglais.
ISET de Sfax
Cours Architecture des Ordinateurs 45
Instructions STC et CLC :
Ces deux instructions permettent de modifier la valeur de l’indicateur CF.

Sauts conditionnels :
Les instructions de branchements conditionnels effectuent un saut (comme JMP) si une certaine
condition est vérifiée. Si ce n’est pas le cas, le processeur passe à l’instruction suivante (l’instruction ne fait
rien).
Les conditions s’expriment en fonction des valeurs des indicateurs. Les instructions de branchement
conditionnel s’utilisent en général immédiatement après une instruction de comparaison CMP.
Voici la liste des instructions de branchement les plus utiles :
JE Jump if Equal
saut si ZF = 1;
JNE Jump if Not Equal
saut si ZF = 0;
JG Jump if Greater
saut si ZF = 0 et SF = OF;
JLE Jump if Lower or Equal
saut si ZF=1 ou SF=OF;
JA Jump if Above
saut si CF=0 et ZF=0;
JBE Jump if Below or Equal
saut si CF=1 ou ZF=1.
JB Jump if Below
saut si CF=1.

Note: les instructions JE et JNE sont parfois écrites JZ et JNZ (même code opération).
Instructions Arithmétiques et logiques :
Les instructions arithmétiques et logiques sont effectuées par l’UAL. Nous avons déjà vu les instructions
d’addition et de soustraction (ADD, SUB). Nous abordons ici les instructions qui travaillent sur la
représentation binaire des données : décalages de bits, opérations logiques bit à bit.
Notons que toutes ces opérations modifient l’état des indicateurs.
Instructions de décalage et de rotation :
Ces opérations décalent vers la gauche ou vers la droite les bits de l’accumulateur.
Elles sont utilisées pour décoder bit à bit des données, ou simplement pour diviser ou multiplier rapidement
par une puissance de 2. En effet, décaler AX de n bits vers la gauche revient à le multiplier par 2 n (sous
réserve qu’il représente un nombre naturel et qu’il n’y ait pas de dépassement de capacité). De même, un
décalage vers la droite revient à diviser par 2n.
Voici les variantes les plus utiles de ces instructions. Elles peuvent opérer sur les registres AX ou BX (16 bits)
ou sur les registres de 8 bits AH, AL, BH et BL.
SHL registre, 1 (ShiftLeft)
Décale les bits du registre d’une position vers la gauche. Le bit de gauche est transféré dans
l’indicateur CF. Les bits introduits à droite sont à zéro.

SHR registre, 1 (ShiftRight)


Comme SHL mais vers la droite. Le bit de droite est transféré dans CF.

SHL et SHR peuvent être utilisé pour multiplier/diviser des entiers naturels (et non des relatifs car le bit de
signe est perdu).

ISET de Sfax
Cours Architecture des Ordinateurs 46
ROL registre, 1 (RotateLeft)
Rotation vers la gauche : le bit de poids fort passe à droite, et est aussi copié dans CF. Les autres bits sont
décalés d’une position.

ROR registre, 1 (RotateRight)


Comme ROL, mais à droite.

RCL registre, 1 (RotateCarryLeft)


Rotation vers la gauche en passant par l’indicateur CF. CF prend la place du bit de poids faible; le bit de poids
fort part dans CF.

RCR registre, 1 (RotateCarryRight)


Comme RCL, mais vers la droite.

RCL et RCR sont utiles pour lire bit à bit le contenu d’un registre6.

Instructions logiques :
Les instructions logiques effectuent des opérations logiques bit à bit. On dispose de trois opérateurs logiques :
ET, OU et OU exclusif. Il n’y a jamais propagation de retenue lors de ces opérations (chaque bit du résultat
est calculé indépendamment des autres).
0011 0011 0011
OU 0 1 0 1 ET 0 1 0 1 OU EX 0101
----------- ----------- ----------
0111 0001 0110
Les trois instructions OR, AND et XOR sont de la forme
OR destination, source.
Destination désigne le registre ou l’emplacement mémoire (adresse) où doit être placé le résultat. Source
désigne une constante (adressage immédiat), un registre (adressage implicite),ou une adresse (adressage
direct).
Exemples :
OR AX, FF00 ; AX <- AX ou FFOO
OR AX, BX ; AX <- AX ou BX
OR AX, [1492] ; AX <- AX ou [1492]
OR destination, source (OU)
OU logique. Chaque bit du résultat est égal à 1 si au moins l’un des deux bits opérande est 1.
OR est souvent utilisé pour forcer certains bits à 1. Par exemple après OR AX, FF00, l’octet de poids
fort de AX vaut FF, tandis que l’octet de poids faible est inchangé.
AND destination, source (ET)
ET logique. Chaque bit du résultat est égal à 1 si les deux bits opérandes sont à 1.
AND est souvent utilisé pour forcer certains bits à 0. Après AND AX, FF00, l’octet de poids faible de
AX vaut 00, tandis que l’octet de poids fort est inchangé.
XOR destination, source (OU EXCLUSIF)
ISET de Sfax
Cours Architecture des Ordinateurs 47
OU exclusif. Chaque bit du résultat est égal à 1 si l’un ou l’autre des bits opérandes (mais pas les
deux) vaut 1.
XOR est souvent utilisé pour inverser certains bits. Après XOR AX, FFFF, tous les bits de AX sont
inversés.

ISET de Sfax
Cours Architecture des Ordinateurs 48
TRAVAUX DIRIGES

ISET de Sfax
Cours Architecture des Ordinateurs 49
ISET SFAX DEPARTEMENT TECHNOLOGIE

AU 2019/2020 S1 DE L’INFORMATIQUE
TD01

Matière : ARCHITECTURE DES ORDINATEURS Classes : INF1


Exercice N°1
Compléter la représentation de chaque nombre dans les quatre bases :
Base Base binaire Base octale Base hexadécimale
décimale
567
1001101010011111
761
FC6D
5436
9876
101001100101001
9835
DA97

Exercice N°2
Donner le codage en entiers signés par complément à 2 sur 8 bits des entiers suivants :
Valeur Code en binaire Code en hexadécimal
décimale
78
-99
43
-123
-128
-127
54

ISET de Sfax
Cours Architecture des Ordinateurs 50
-99
-64
-98
-56
-78

Exercice N°3
Calculer les résultats des opérations suivantes et indiquer est ce que le résultat est valide
sachant qu’on utilise un codage en entiers signés par complément à 2 sur 8 bits:
Opérande1 Opérande2 Addition Soustraction Multiplication Division
01001100 11011110
10001100 10001000
01001111 01110000
01001000 11111111
11011010 10011001
11000011 00111111
01001111 11110000
Exercice N°4
Convertir les nombre décimaux suivant en virgule flottante suivant la norme IEEE
754 :
Valeur Code IEEE754 en binaire Code
décimale IEEE754
en Hexa
763, 5
981,25
572,75
0,125
0,0625
0,03125
0,53125
Exercice N°5

ISET de Sfax
Cours Architecture des Ordinateurs 51
Retrouver les valeurs décimales des codes en virgule flottante suivant la norme IEEE
754 suivant :
Code Code IEEE754 en binaire Valeur
IEEE754 décimale
en Hexa
42FB0000
439D2000
42B24000
C2AE2000
C2C41000
C1944000
C19F0000

Exercice N°6
Calculez la somme et donnez le résultat sous forme IEEE 754 et sous forme décimale.
Opérande1 Opérande2 Somme Somme Décimale
Hexa Hexa Hexa (IEEE754)
(IEEE754) (IEEE754)

42FB0000 C19F0000
439D2000 42FB0000
42B24000 439D2000
C2AE2000 42B24000
C2C41000 C2AE2000
C1944000 C2C41000
C19F0000 C1944000
42FB0000 C1944000
439D2000 C19F0000
42B24000 42FB0000
C2AE2000 439D2000
C2C41000 42B24000

ISET de Sfax
Cours Architecture des Ordinateurs 52
C1944000 C2AE2000
C19F0000 C2C41000
42FB0000 C2C41000
439D2000 C1944000
42B24000 C19F0000
C2AE2000 42FB0000
C2C41000 439D2000
C1944000 42B24000
C19F0000 C2AE2000

ISET de Sfax
Cours Architecture des Ordinateurs 53
INSTITUT SUPERIEUR DES ETUDES TECHNOLOGIQUES DE
SFAX

Département des Technologies de l'Informatique

TD Architecture N° 1

Enseignant : Rachid Souissi et Mofdi dhouib Classe : Info 1

Questions de cours :
1. Cocher la proposition correcte :
 Les registres sont des mémoires électriques ;
 Les registres sont des mémoires à base de semi-conducteurs ;
 Les mémoires caches sont des mémoires dynamiques ;
 Les mémoires caches sont à base de SRAM ;
 La mémoire centrale est une mémoire statique ;
 Les mémoires auxiliaire est une mémoire magnétique ou optiques.

2. Quelle est la différence entre mémoire dynamique et mémoire statique :

3. Différence entre mémoire vive et morte :

4. Quels sont les différents types de support de stockage ?

5. Rôle principal de la mémoire centrale :

6. Rôle d’un décodeur dans la logique d’adressage :

7. Rôle des commandes CS et R/W dans la mémoire centrale :

Exercice 1 :
Avec 16 bits d’adresse, combien de mots mémoires on peut adresser.

Exercice 2 :
Si la RAM est de 16 bits d’adresse, combien de mots mémoires on peut adresser ?
Si le mot mémoire est de 16 bits. Quelle est alors la taille de la mémoire ?

Exercice 3 :
Si le registre d’adresse comporte 32 bits alors :
a. Quel est Le nombre de mots adressables ?

ISET de Sfax
Cours Architecture des Ordinateurs 54
b. Si la taille d’un mot mémoire est de 1 octet. Quelle est la taille de la mémoire ?
c. Si la taille du mot mémoire est 4 octets ? Quel est le nombre de mots adressables
d. Donner La taille de la mémoire..

Exercice 4 :
Quelle est la plus haute adresse mémoire si le Registre d’adresse Mémoire est de 32 bits ?

Exercice 5 :
Si la taille du Registre d’Adresse Mémoire = 16 bits. Quel est le nombre de mots mémoires
adressables ;
Si la aille du Registre d’Informations Mémoire = 16 bits. Quelle est la taille du mot mémoire.
Donner la capacité de la mémoire..

Exercice 6 :
a. Taille de la RAM = 16 bits ;
b. Taille de la RIM = 32 bits ;
c. Quels est le nombre de mots adressables ;
d. Quelle est la taille de la mémoire ?

ISET de Sfax
Cours Architecture des Ordinateurs 55
INSTITUT SUPERIEUR DES ETUDES TECHNOLOGIQUES DE SFAX

Département des Technologies de l'Informatique

TD N°2
Architecture Des Ordinateurs

Enseignant : Souissi Rachid et Mofdi dhouib Classe : Info 1

Exercice 1 :
1. Quelle est la Différence entre une architecture superscalaire et une architecture pipeline :
2. Donner et classifier les unités de stockage de l’information :
Vitesse Temps d’accès Unité de Stockage Taille Capacité
+ 1 ns Registre < 400 Octets

3. Quel est le rôle de la mémoire centrale et celui de la mémoire cache ?

Exercice 2 :
Donner l’ordre d’exécution de chacune des étapes suivantes
Charger dans le registre IP l’adresse de l’instruction suivante ;
Exécuter l’instruction (instruction arithmétique, échange de données, …)
Analyser et décorer l’instruction contenue dans le registre RI ;
Reprendre à l’étape 1 (sauf si l’instruction qui vient d’être exécuter est 1 arrêt) ;
Repérer grâce au registre IP la prochaine instruction à exécuter et la charger dans RI ;
Exercice 3 :
1. Contenu des registres AX et BX après l’exécution de chaque instruction :

Instruction AX BX

MOV AX, 12

MOV BX, 6

ISET de Sfax
Cours Architecture des Ordinateurs 56
ADD AX, BX

SUB BX, AX

MUL BX, -1

SUB AX, BX

2. Que fait cette séquence ?


3. Faire un programme en assembleur qui réalise cette opération :
Exercice 4 :
1. Donner la taille de chaque instruction

Instruction Codage machine (en hexa) Taille

MOV AL, [adr] Ao adr

MOV [adr], AL A2 adr

SUB AL, [adr] 05 09 adr

2. Faire le Programme permettant de réaliser 003CH=003BH – 003AH

Programme assembleur codage machine (en hexa)

3. Quelle est l’adresse de chaque instruction


4 . Donner le Contenu de chaque registre :
Contenu (en hexa) des registres
Instructions

MOV AL, [003BH]

SUB AL, [003AH]

ISET de Sfax
Cours Architecture des Ordinateurs 57
MOV 003CH, AL

EVALUATION

ISET de Sfax
Cours Architecture des Ordinateurs 58
INSTITUT SUPERIEUR DES ETUDES TECHNOLOGIQUES DE SFAX

Département des Technologies de l'Informatique

DS Architecture des Ordinateurs


Durée : 1H --- Nbre de pages : 04 --- Mai 2011 Nom : …………………………….. Note :
Enseignants: Mofdi DHOUIB, Rachid SOUISSI, Mourad Prénom: ………………............... …………
MASMOUDI e Classe: ………… Module: …….. / 20
Calculatrices et documents non autorisés

QUESTIONS DE COURS : (7,5 pts)

Cocher la ou les bonne (s) réponse (s) ; Il peut y avoir une ou plusieurs bonnes réponses. Les réponses
correctes sont comptées positivement et incorrectes son comptées négativement, Ne rien cocher vaut 0.

Question 1 : l’informatique est la contraction de :


 Réponse 1 : INFORmation autoMATIQUE
 Réponse 2 : INFORmation téléMATIQUE
 Réponse 3 : traitement autoMATIQUE de l’INFORmation
 Réponse 4 : recherche autoMATIQUE de l’INFORmation
 Réponse 5 : sauvegarde autoMATIQUE de l’INFORmation

Question 2 : l’ordinateur possède, par rapport à l’être humain, les avantages suivants :
 Réponse 1 : rapidité
 Réponse 2 : capacité de mémorisation moins importante
 Réponse 3 : exactitude
 Réponse 4 : intelligence
 Réponse 5 : précision

Question 3 : On peut trouver les microprocesseurs dans :


 Réponse 1 : les consoles de jeux
 Réponse 2 : les automobiles
 Réponse 3 : les ordinateurs
 Réponse 4 : les robots
 Réponse 5 : les téléphones portables

Question 4 : l’ordinateur ne peut interpréter directement que le langage binaire pourquoi ?


 Réponse 1 : il est plus simple

ISET de Sfax
Cours Architecture des Ordinateurs 59
 Réponse 2 : l’ordinateur est bête
 Réponse 3 : tous les composants sont des circuits à deux états
 Réponse 4 : VON NEWMANN l’a conçu de cette façon
 Réponse 5 : il ne possède pas de système d’exploitation

Question 5 : On trouve dans un PC les types de mémoire suivants :


 Réponse 1 : mémoire vive
 Réponse 2 : mémoire cachée
 Réponse 3 : mémoire de masse
 Réponse 4 : mémoire naturelle
 Réponse 5 : mémoire morte

Question 6 : En informatique on utilise les unités suivantes :


 Réponse 1 : 1 kilobyte = 210 bit = 1024 bit
 Réponse 2 : 1 mégabit = 210 kbit = 1024 kbit = 220 bit
 Réponse 3 : 1 gigabit = 220 kbit = 1024 Mbit
 Réponse 4 : 1 pérabit = 210 gigabit = 1024 Gbit
 Réponse 5 : 1 térabit = 210 gigabit = 1024 Gbit

Exercice n° 1 : ( 3 pts )
On donne le tableau suivant résumant les types et les méthodes de conversion entre systèmes de numération.
Type de conversion Méthode de conversion

1. D’une base b quelconque à la base 10 a- On divise successivement par b


2. De la base 10 à une base quelconque b b- On multiplie par les puissances
3. De la base 2 à la base 8 ou 16 successives de b en commençant par la
4. De la base 8 ou 16 à la base 2 droite
5. De la base 8 à la base 16 et c- On utilise la base 2 comme base
réciproquement intermédiaire
6. D’une base quelconque à une autre base d- On utilise la base 10 comme base
quelconque (exp : 7 et 12) intermédiaire
e- On regroupe 3 par 3 ou 4 par 4 les bits et
on utilise la table de conversion
f- On éclate chaque chiffre en 3 ou 4 bits
selon la table de conversion

ISET de Sfax
Cours Architecture des Ordinateurs 60
Faire la liaison entre chaque type de conversion et la méthode de conversion correspondante dans le tableau
de réponses suivant :
Type de conversion Méthode de conversion
1. …
2. …
3. …
4. …
5. …
6. …

Exercice n° 2 : ( 6.0 pts )

1. Compléter le tableau suivant :


Décimale Binaire Octale Hexadécimal
. 1101011 . .
. . . 3D

2. Soit le nombre réel +123,250 (10) on demande de :


2.1 Convertir ce nombre en binaire (base 2) :
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
ISET de Sfax
Cours Architecture des Ordinateurs 61
2.2 Représenter ce nombre selon la norme IEEE.754 (32 bits)
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………

Exercice n° 3 : ( 3.5 points )


On se propose de coder des nombres à l’aide de n bits de données :
a. Quel est le plus grand entier naturel qu’on peut coder ? ;
…………………………………………………………………………………………………………
…………………………………………………………………………………………

b. Quels est le plus grand entier relatif positif qu’on peut coder ? ;
…………………………………………………………………………………………………………
…………………………………………………………………………………………

c. si n = 8, calculer le plus grand entier naturel et le plus grand entier relatif positif représentable.
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………

ISET de Sfax
Cours Architecture des Ordinateurs 62
INSTITUT SUPERIEUR DES ETUDES TECHNOLOGIQUES DE SFAX

Département des Technologies de l'Informatique

Examen Architecture des ordinateurs


Juin 2011

Enseignants Souissi Rachid, Mofdi dhouib, Masmoudi Mourad Classe : Info 1


Durée : 1H 30 Nombres de Pages : 4 Documents & Calculatrices : Non autorisés

Nom : ……………………………… Prénom : ………………………………. Groupe : ……….

Code : ……

Code : ……
Questions de Cours : (8 points)
1. Quelle(s) différence(s) entre mémoire statique et mémoire dynamique ?
…..……………………………………………………………………………………………………….………
…………………………………………………………………………………………………..…..……………
………………………………………………………………………………………….………………………
…………………………………………………………………………………..…..……………………………
…………………………………………………………………………
…..………………………………………………………………………………………………………

2. Donner le nom de la caractéristique de la mémoire qui correspond à chacune des définitions mentionnées
dans le tableau ci-contre, soit : format de données ou capacité ou volatilité ou débit ou temps de cycle :

Définition de la caractéristique Nom de la caractéristique

Nombre total de bits que contient la mémoire …………………………

Nombre de bits que l’on peut mémoriser par case mémoire …………………………

Nombre maximum d’informations lus ou écrits par secondes …………………………

Caractéristique de la permanence des Informations dans la mémoire …………………………

3. Ordonner de 1 à 4 les étapes spécifiant une opération de lecture ou d’écriture dans une mémoire selon
l’ordre chronologique :
Sélection de la mémoire (CS=0);
Choix de l’opération à effectuer (R/W) ;
Lecture ou écriture de la donnée ;
Sélection de l’adresse ;

ISET de Sfax
Cours Architecture des Ordinateurs 63
4. Quelles sont les phases constituant le cycle d’exécution d’une instruction par le microprocesseur de la
machine.
…..………………………….……………………………………………………………………………..……
……………………………………………….……………………………………………………….…..………
………………………………………..……………………………………………………….…………………
………………………………..…………………………………………………

Exercice 1 : (4 points)
Un Registre d’Adresse Mémoire (RAM) comporte 16 bits :
1. Si la taille d’un mot mémoire est de 8 bits :
a. Calculer le nombre de mots adressables :
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

b. Quelle est la plus haute adresse mémoire ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

c. Quel est le nombre de lignes de données ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

d. Quelle est la taille de la mémoire en Kilo Octets (Ko) ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…

ISET de Sfax
Cours Architecture des Ordinateurs 64
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………

2. Si la taille d’un mot mémoire est de 16 bits :


a. Calculer le nombre de mots adressables :
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

b. Quelle est la plus haute adresse mémoire ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

c. Quel est le nombre de lignes de données ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….

d. Quelle est la taille de la mémoire en Kilo Octets (Ko) ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………

Exercice 2 : (8 points)
Soit le processeur i80286 (16 bits de données, 24 bits d’adresses). On suppose que les instructions utilisées
sont codées sur 1 ou 2 octets, suivi éventuellement d’une opérande sur 3 octets. On dispose des instructions
suivantes :
Codage Machine
Instruction Signification
(Hexadécimal)
MOV AL, [ adr ] A0 adr AL  [ adr ]
ADC AL, [ adr ] 12 06 adr AL  AL + [ adr ] + CF
MOV [ adr ], AL A2 adr [ adr ]  AL

Avec : CF est l’indicateur Carry Flag, supposé initialement nul

1. Combien d’octets occupent chacune de ces Instructions ?


…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…

ISET de Sfax
Cours Architecture des Ordinateurs 65
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………

2. Ecrire avec ces instructions un programme qui additionne le contenu de la case mémoire d’adresse
000100H à deux fois le contenu de la case mémoire d’adresse 000101H et qui range le résultat dans la case
mémoire d’adresse 000102H :
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………

3. Sachant que la première instruction commence à l’adresse 001015H. Donner l’organisation de la mémoire
programme : adresse de début de chaque instruction du programme et contenu de chaque case mémoire :
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….………..…..…
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………

4. Donner après chaque instruction le contenu de chaque registre indiqué dans le tableau suivant, On
supposera que la valeur rangée dans 000100H est 88H et celle dans 000101H est 14H.
Contenu ( En Hexadécimal ) des registres
Instructions
CO RI AL

Avec : CO, RI, AL : Sont respectivement registre Compteur Ordinal, Registre d’Instruction et octets bas du
registre accumulateur.

ISET de Sfax
Cours Architecture des Ordinateurs 66
INSTITUT SUPERIEUR DES ETUDES TECHNOLOGIQUES DE SFAX

Département des Technologies de l'Informatique

DS Architecture des Ordinateurs


Nom : …………………………….. Note :
Durée : 1H --- Nbre de pages : 04 --- Avril 2012
Enseignant:Rachid SOUISSI
Prénom: ………………............... …………
Classe: ………… Module: …….. / 20
Calculatrices et documents non autorisés

QUESTIONS DE COURS : (6 points)


1. QCM : Cocher la bonne réponse ; Il ya une seule bonne réponse. La réponse correcte est comptée
positivement et incorrecte est comptée négativement, Ne rien cocher vaut 0.

Question 1 : Un MIPS définit :


 Réponse 1: La fréquence d’horloge d’un microprocesseur en MHz ou GHz ;
 Réponse 2: La taille des données qu’un microprocesseur est capable d’exécuter en bits ;
 Réponse 3: Le nombre d’instructions par secondes qu’un microprocesseur est capable d’exécuter;
 Réponse 4: La taille de la mémoire vive d’un ordinateur ;

Question 2 : L’écriture d’un programme en langage évolué nécessite avant son exécution:
 Réponse 1: Une traduction en langage machine ;
 Réponse 2: Une traduction en langage symbolique;
 Réponse 3: Une sauvegarde dans la mémoire vivre;
 Réponse 4: Une interprétation par le microprocesseur ;

Question 3 : Le plus grand entier positif représentable sur n bits en relatif est:
 Réponse 1: 2n -1;
 Réponse 2: 2n-1 -1;
 Réponse 3: 2n ;
 Réponse 4: 2n-1 ;

Question 4 : Toutes les activités du microprocesseur sont cadencées par une:


 Réponse 1:Fréquence;
 Réponse 2: Horloge;
 Réponse 3: Bus;
 Réponse 4: Décodeur d’adresse ;

2. Donner la définition des termes suivants :

ISET de Sfax
Cours Architecture des Ordinateurs 67
a. Un décodeur d’adresse ;
b. Un bus de commande.
Exercice n° 1 : ( 6.0 pts )

3. Compléter le tableau suivant :


Décimale Binaire Octale Hexadécimal
. 1101001 . .
. 37 . .

4. Soit le nombre réel +158,375 (10) on demande de :


2.1 Convertir ce nombre en binaire (base 2) :
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………
2.2 Représenter ce nombre selon la norme IEEE.754 (32 bits)
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………

ISET de Sfax
Cours Architecture des Ordinateurs 68
…………………………………………………………………………………………………………
…………………………………………………………………………………………

Exercice n° 2 : ( 5.0 pts )


Soit le nombre hexa 434D2000 représenté selon la norme IEEE.754 (32 bits). On désire chercher la
représentation décimale correspondent ce nombre. Pour cela on demande de :
1. Convertir ce nombre en binaire ; En déduire son signe, son exposant et sa mantisse.
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………

2. Calculer sa partie entière, sa partie fractionnelle. En déduire sa valeur en décimale.


…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
ISET de Sfax
Cours Architecture des Ordinateurs 69
…………………………………………………………………………………………………………
…………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………

Exercice n° 3 : ( 3 points )
Un plan mémoire contenant 4 k mots mémoire de 16 bits chacun,
1. Déterminer le nombre de ligne d'adresse mémoire.
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………

2. Donner la taille du Registre d’Information Mémoire.


…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………
…………………………………………………………………………………………………

3. En déduire la capacité mémoire en Kilo Octets


…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………

ISET de Sfax
Cours Architecture des Ordinateurs 70
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………

BIBLIOGRAPHIE
Livres :

[ 1 ] Architecture et technologie des ordinateurs


Paolo Zanella et Yves Ligier
Edition Dunod

[ 2 ] Technologie des ordinateurs et des réseaux


Pierre-Alain Goupille
Edition Dunod

[ 3 ] Les microprocesseurs, comment ça marche ?


T. Hammerstrom et G. Wyant
Edition Dunod

[ 4 ] Architecture des ordinateurs


TANENBAUM, Andrew W.
Prentice Hall, 2nd ed., 2001

[ 5 ] Architecture et technologie des ordinateurs


P. Zanella, Y. Ligier
Dunod 1989.

Sites web :

[ 1 ] Fonctionnement des composants du PC


http://www.vulgarisation-informatique.com/composants.php

[ 2 ] Cours d’initiation aux microprocesseurs et aux microcontrôleurs


http://www.polytech-lille.fr/~rlitwak/Cours_MuP/sc00a.htm

[ 3 ] Architecture des ordinateurs – Université Angers


http://www.info.univ-angers.fr/pub/richer/ens/deug2/ud44/

ISET de Sfax
Cours Architecture des Ordinateurs 71
[ 4 ] Les docs de Heissler Frédéric
http://worldserver.oleane.com/heissler/

[ 5 ] X-86 secret
http://www.x86-secret.com/

[ 6 ] Le cours hardware d’YBET informatique


http://www.ybet.be/hardware/hardware1.htm

[ 7 ] Informa Tech
http://informatech.online.fr/articles/index.php

ISET de Sfax
Cours Architecture des Ordinateurs 72
ANNEXES

ISET de Sfax
Cours Architecture des Ordinateurs 73
L’ASSEMBLEUR 80X86

1- L’assembleur
Pourquoi l’assembleur?
De l’écriture du programme à son exécution
Structure du programme source
Déclaration de variables

2- Segmentation de la mémoire
Segment de code et de données
Déclaration d’un segment en assembleur

3- Adressage indirect
Exemple : parcours d’un tableau
Spécfication de la taille des données

4- La pile
Notion de pile
Instructions PUSH et POP
Registres SS et SP
Déclaration d’une pile

5- Les procédures
Notion de procédure
Instructions CALL et RET
Déclaration d’une procédure
Passage de paramètres

ISET de Sfax
Cours Architecture des Ordinateurs 74
1- L’ASSEMBLEUR
1.1- Pourquoi l’assembleur ?
Lorsque l’on doit lire ou écrire un programme en langage machine, il est difficile d’utiliser la notation
hexadécimale. On écrit les programmes à l’aide de symboles comme MOV, ADD, etc. Les concepteurs de
processeur, comme Intel, fournissent toujours une documentation avec les codes des instructions de leur
processeur, et les symboles correspondant.
Nous avons déjà utilisé un programme, debug, très utile pour traduire automatiquement les symboles des
instructions en code machine. Cependant, debug n’est utilisable que pour mettre au point de petits
programmes. En effet, le programmeur doit spécifier lui même les adresses des données et des instructions.

Soit par exemple le programme suivant, qui multiplie une donnée en mémoire par 8 :
0100 MOV BX, [0112] ; charge la donnée
0103 MOV AX, 3
0106 SHL BX ; décale à gauche
0108 DEC AX
0109 JNE 0106 ; recommence 3 fois
010B MOV [0111], BX ; range le résultat
010E MOV AH, 4C
0110 INT 21H
0112 ; on range ici la donnée
Nous avons spécifié que la donnée était rangée à l’adresse 0111H, et que l’instruction de branchement J’allais
en 0106H. Si l’on désire modifier légèrement ce programme, par exemple ajouter une instruction avant MOV
BX, [0111], il va falloir modifier ces deux adresses. On conçoit aisément que ce travail devienne très difficile
si le programme manipule beaucoup de variables.
Les symboles associés aux instructions sont parfois appelés mnémoniques.
L’utilisation d’un assembleur résout ces problèmes. L’assembleur permet en particulier de nommer les
variables (un peu comme en langage C) et de repérer par des étiquettes certaines instructions sur lesquelles on
va effectuer des branchements.
1.2- De l’écriture du programme à son exécution
L’assembleur est un utilitaire qui n’est pas interactif, contrairement à l’utilitaire debug.
Le programme que l’on désire traduire en langage machine (on dit assembler) doit être placé dans un fichier
texte (avec l’extension.ASM sous DOS).
La saisie du programme source au clavier nécessite un programme appelé éditeur de texte.
L’opération d’assemblage traduit chaque instruction du programme source en une instruction machine. Le
résultat de l’assemblage est enregistré dans un fichier avec l’extension .OBJ (fichier objet).
Le fichier.OBJ n’est pas directement exécutable. En effet, il arrive fréquemment que l’on construise un
programme exécutable à partir de plusieurs fichiers sources. Il faut “relier” les fichiers objets à l’aide d’un
utilitaire nommé éditeur de lien (même si l’on en a qu’un seul). L’éditeur de liens fabrique un fichier
exécutable, avec l’extension.EXE.
Le fichier .EXE est directement exécutable. Un utilitaire spécial du système d’exploitation (DOS ici), le
chargeur est responsable de la lecture du fichier exécutable, de son implantation en mémoire principale, puis
du lancement du programme.
1.3- Structure du programme source
La structure générale d’un programme assembleur est représentée figure3.1.
Comme tout programme, un programme écrit en assembleur comprend des définitions de données et des
instructions, qui s’écrivent chacune sur une ligne de texte.
Les données sont déclarées par des directives, mots clef spéciaux que comprend l’assembleur.
Les directives qui déclarent des données sont regroupées dans le segment de données, qui est délimité par les
directives SEGMENT et ENDS.
Les instructions sont placées dans un autre segment, le segment de code.
La directive ASSUME est toujours présente et sera expliquée plus loin (section3.2.2).

ISET de Sfax
Cours Architecture des Ordinateurs 75
La première instruction du programme (dans le segment d’instruction) doit toujours être repérée par une
étiquette. Le fichier doit se terminer par la directive END avec le nom de l’étiquette de la première instruction
(ceci permet d’indiquer à l’éditeur de liens quelle est la première instruction à exécuter lorsque l’on lance le
programme).
Les points-virgules indiquent des commentaires.
1.4- Déclaration de variables
On déclare les variables à l’aide de directives. L’assembleur attribue à chaque variable une adresse.
Dans le programme, on repère les variables grâce à leur nom.
Les noms des variables (comme les étiquettes) sont composés d’une suite de 31 caractères au maximum,
commençant obligatoirement par une lettre. Le nom peut comporter des majuscules, des minuscules, des
chiffres, plus les caractères @,? et .

data SEGMENT ; data est le nom du segment de données

; directives de déclaration de données

data ENDS ; fin du segment de données

ASSUME DS:data, CS:code

code
FIG. 3.1 –SEGMENT ; code est leennom
Structure d’un programme du segment
assembleur d’instructions
(fichier .ASM).
Lors de la déclaration d’une variable, on peut lui affecter une valeur initiale.
debut: ; 1ere instruction, avec l’étiquette début

; suite d’instructions

code ENDS

END début ; fin du programme, avec l’étiquette

; de la première instruction.

Variables de 8 ou 16 bits
Les directives DB (Define Byte) et DW (Define Word) permettent de déclarer des variables de respectivement
1 ou 2 octets.
Exemple d’utilisation :
data SEGMENT
entrée DW 15 ; 2 octets initialises a 15
sortie DW ? ; 2 octets non initialises
cle DB ? ; 1 octet non initialise
nega DB -1 ; 1 octet initialise à -1
data ENDS

Les valeurs initiales peuvent être données en hexadécimal (constante terminée par H)
ou en binaire (terminée par b) :
data SEGMENT
truc DW 0F0AH ; en hexa
masque DB 01110000b ; en binaire
data ENDS
Les variables s’utilisent dans le programme en les désignant par leur nom. Après la
déclaration précédente, on peut écrire par exemple :
MOV AX, truc
ISET de Sfax
Cours Architecture des Ordinateurs 76
AND AL, masque
MOV truc, AX
L’assembleursechargederemplacerlesnomsdevariableparlesadressescorrespondantes.
Tableaux :
Ilestaussipossiblededéclarerdestableaux,c’estàdiredessuited’octetsoudemots
consécutifs.
Pour cela, utiliser plusieurs valeurs initiales :
data SEGMENT
machin db 10, 0FH ; 2 fois 1 octet
chose db -2, ’ALORS’
data ENDS
Remarquez la déclaration de la variable chose : un octet à -2 (=FEH), suivi d’une suite de caractères.
L’assembleur n’impose aucune convention pour la représentation des chaînes de caractères: c’est à
l’utilisateur d’ajouter si nécessaire un octet nul pour marquer la fin de la chaîne.
Après chargement de ce programme, la mémoire aura le contenu suivant :

Si l’on veut écrire un caractère X à la place du O de ALORS, on pourra écrire :


MOV AL, ’X’
MOV chose + 1, AL
Notons que chose + 1 est une constante (valeur connue au moment de l’assemblage) :
l’instruction générée par l’assembleur pour
MOV chose + 1, AL
est MOV [adr], AL .

Directive dup :
Lorsque l’on veut déclarer un tableau de n cases, toutes initialisées à la même valeur, on utilise la directive
dup:
tab DB 100 dup (15) ; 100 octets valant 15
zzz DW 10 dup (?) ; 10 mots de 16 bits non initialises

2- SEGMENTATION DE LA MEMOIRE
Nous abordons ici le problème de la segmentation de la mémoire. Nous venons de voir qu’en
assembleur, les données étaient normalement regroupées dans une zone mémoire nommée segment de
données, tandis que les instructions étaient placées dans un segment d’instructions. Ce partage se fonde sur la
notion plus générale de segment de mémoire, qui est à la base du mécanisme de gestion des adresses par les
processeurs 80x86.
Nous avons vu plus haut (section 2.2.2) que les instructions utilisaient normalement des adresses codées sur
16 bits. Nous savons aussi que le registre IP, qui stocke l’adresse d’une instruction, fait lui aussi 16 bits. Or,
avec 16 bits il n’est possible d’adresser que 216 = 64 Kilo octets.
Le bus d’adresse du 80486 possède 32 bits. Cette adresse de 32 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). Les adresses que
nous avons manipulé jusqu’ici sont des déplacements.
Le schéma suivant illustre la formation d’une adresse 32 bits à partir du segment et du déplacement sur 16
bits :

ISET de Sfax
Cours Architecture des Ordinateurs 77
On appellera segment de mémoire une zone mémoire adressable avec une valeur fixée du segment (les 16 bits
de poids fort). Un segment a donc une taille maximale de 64 Ko.

2.1- Segment de code et de données


La valeur du segment est stockée dans des registres spéciaux de 16bits. Le registre DS (Data
Segment) est utilisé pour le segment de données, et le registre CS (Code Segment) pour le segment
d’instructions.
Registre CS
Lorsque le processeur lit le code d’une instruction, l’adresse 32 bits est formée à l’aide du registre
segment CS et du registre déplacement IP. La paire de ces deux registres est notée CS:IP.
Registre DS
Le registre DS est utilisé pour accéder aux données manipulées par le programme.
Ainsi, l’instruction
MOV AX, [0145]
donnera lieu à la lecture du mot mémoire d’adresse DS:0145H.
Initialisation des registres segment :
Dans ce cours, nous n’écrirons pas de programmes utilisant plus de 64 Ko de code et 64 Ko de données, ce
qui nous permettra de n’utiliser qu’un seul segment de chaque type.
Par conséquent, la valeur des registres CS et de DS sera fixée une fois pour toute au début du programme.
Le programmeur en assembleur doit se charger de l’initialisation de DS, c'est-à-dire de lui affecter l’adresse
du segment de données à utiliser.
Par contre, le registre CS sera automatiquement initialisé sur le segment contenant la première instruction au
moment du chargement en mémoire du programme (par le chargeur du système d’exploitation).

2.2- Déclaration d’un segment en assembleur


Comme nous l’avons vu (voirfigure3.1), les directives SEGMENT et ENDS permettent de définir les
segments de code et de données.
La directive ASSUME permet d’indiquer à l’assembleur quel est le segment de données et celui de code, afin
qu’il génère des adresses correctes.
Enfin, le programme doit commencer, avant toute référence au segment de données, par initialiser le registre
segment DS, de la façon suivante :
MOV AX, nom_segment_de_donnees
MOV CS, AX
(Il serait plus simple de faire MOV CS, nom_segment_de_donnees mais il se trouve que cette instruction
n’existe pas.)
La figure 3.2 donne un exemple complet de programme assembleur.

3- ADRESSAGE INDIRECT
Nous introduisons ici un nouveau mode d’adressage, l’adressage indirect, qui est très utile par
exemple pour traiter des tableaux3.
L’adressage indirect utilise le registre BX pour stocker l’adresse d’une donnée.
En adressage direct, on note l’adresse de la donnée entre crochets :
MOV AX, [130] ; adressage direct
De façon similaire, on notera en adressage indirect :
MOV AX, [BX] ; adressage direct
Ici, BX contient l’adressage de la donnée. L’avantage de cette technique est que l’on peut modifier l’adresse
en BX, par exemple pour accéder à la case suivante d’un tableau.
Avant d’utiliser un adressage indirect, il faut charger BX avec l’adresse d’une donnée.
Pour cela, on utilise une nouvelle directive de l’assembleur, offset.

ISET de Sfax
Cours Architecture des Ordinateurs 78
Remarque :
Il existe encore d’autres modes d’adressage, comme l’adressage indexé, que nous n’aborderons pas dans ce
cours.

; Programme calculant la somme de deux entiers de 16 bits


data SEGMENT
A DW 10 ; A = 10
B DW 1789 ; B = 1789
Result DW ? ; résultat
data ENDS
code SEGMENT
ASSUME DS:data, CS:code
début: MOV AX, data ; étiquette car 1ere instruction
MOV DS, AX ; initialise DS
; Le programme:
MOV AX, A
ADD AX, B
MOV résult, AX ; range résultat
; Retour au DOS:
INT 21H
code ENDS
variables AENDet B début
et on range; étiquette
le résultatde la 1ere
dans inst. nommée Résult.
la variable
data SEGMENT
truc DW 1996
data ENDS
...
MOV BX, offset truc
...
Si l’on avait employé la forme
MOV BX, truc
ISET de Sfax
Cours Architecture des Ordinateurs 79
On aurait chargé dans BX la valeur stockée en truc (ici 1996), et non son adresse4.

3.1- Exemple : parcours d’un tableau


Voici un exemple plus complet utilisant l’adressage indirect. Ce programme passe un chaîne de
caractères en majuscules. La fin de la chaîne est repérée par un caractère$. On utilise un ET logique pour
masquer le bit 5 du caractère et le passer en majuscule (voir le code ASCII).
data SEGMENT
tab DB ’Un boeuf Bourguignon’, ’$’
data ENDS

code SEGMENT
ASSUME DS:data, CS:code

debut: MOV AX, data


MOV DS, AX

MOV BX, offset tab ; adresse debut tableau

repet: MOV AL, [BX] ; lis 1 caractère


AND AL, 11011111b ; force bit 5 à zero
MOV [BX], AL ; range le caractère
INC BX ; passe au suivant
CMP AL, ’$’ ; arrive au $ final ?
JNE repet ; sinon recommencer

MOV AH, 4CH


INT 21H ; Retour au DOS

code ENDS
END début

L’assembleur génère une instruction MOV AX, [adr] lorsqu’il rencontre un MOV AX, étiquette.

3.2- Spécfication de la taille des données


Dans certains cas, l’adressage indirect est ambigu. Par exemple, si l’on écrit
MOV [BX], 0 ; range 0 a l’adresse spécifiée par BX
L’assembleur ne sait pas si l’instruction concerne 1, 2 ou 4 octets consécutifs.
Afin de lever l’ambiguïté, on doit utiliser une directive spécifiant la taille de la donnée à transférer :
MOV byte ptr [BX], val ; concerne 1 octet
MOV word ptr [BX], val ; concerne 1 mot de 2 octets

4- LA PILE
4.1- Notion de pile
Les piles offrent un nouveau moyen d’accéder à des données en mémoire principale, qui est très utilisé pour
stocker temporairement des valeurs.
Une pile est une zone de mémoire et un pointeur qui conserve l’adresse du sommet de la pile.

4.2- Instructions PUSH et POP


Deux nouvelles instructions, PUSH et POP, permettent de manipuler la pile.
PUSH registre empile le contenu du registre sur la pile.
POP registre retire la valeur en haut de la pile et la place dans le registres spécifié.
Exemple : transfert de AX vers BX en passant par la pile.
PUSH AX ; Pile <- AX
POP BX ; BX <- Pile

ISET de Sfax
Cours Architecture des Ordinateurs 80
(Note : cet exemple n’est pas très utile, il vaut mieux employer MOV AX, BX.)
La pile est souvent utilisée pour sauvegarder temporairement le contenu des registres:
; AX et BX contiennent des données à conserver
PUSH AX
PUSH BX

MOV BX, truc ; on utilise AX


ADD AX, BX ; et BX
MOV truc, BX

POP BX ; recupere l’ancien BX


POP AX ; et l’ancien AX
On voit que la pile peut conserver plusieurs valeurs. La valeur dépilée par POP est la dernière valeur empilée;
c’est pourquoi on parle ici de pile LIFO (Last In First Out, Premier Entré Dernier Sorti).

4.3- Registres SS et SP
La pile est stockée dans un segment séparé de la mémoire principale. Le processeur possède deux
registres dédiés à la gestion de la pile, SS et SP.
Le registre SS (StackSegment5) est un registre segment qui contient l’adresse du segment de pile courant (16
bits de poids fort de l’adresse). Il est normalement initialisé au début du programme et reste fixé par la suite.
Le registre SP (Stack Pointer) contient le déplacement du sommet de la pile (16 bits de poids faible de son
adresse).

FIG. 3.3 – La pile. Les adresses croissent vers le bas. SP pointe sur le sommet (dernier emplacement occupé).
La figure 3.3 donne une représentation schématique de la pile. L’instruction PUSH effectue les opérations
suivantes :
• SP← SP - 2
• [SP]← valeur du registre 16 bits.
Notons qu’au début (pile vide), SP pointe “sous” la pile.
L’instruction POP effectue le travail inverse :
• Registre destination←[SP]
• SP← SP + 2
Si la pile est vide, POP va lire une valeur en dehors de l’espace pile, donc imprévisible.

4.4- Déclaration d’une pile


Pour utiliser une pile en assembleur, il faut déclarer un segment de pile, et y réserver un espace suffisant.
Ensuite, il est nécessaire d’initialiser les registres SS et SP pour pointer sous le sommet de la pile.
Voici la déclaration d’une pile de 200 octets :
seg_pile SEGMENT stack ; mot clef stack car pile
DW 100 dup (?) ; reserve espace
base_pile EQU this word ; etiquette base de la pile
seg_pile ENDS

ISET de Sfax
Cours Architecture des Ordinateurs 81
Noter le mot clef “stack” après la directive SEGMENT, qui indique à l’assembleur qu’il s’agit d’un segment
de pile. Afin d’initialiser SP, il faut repérer l’adresse du bas de la pile; c’est le rôle de la ligne base_pile EQU
this word (voir figure 3.4).

FIG. 3.4 – Une pile vide. L’étiquette base-pile repère la base de la pile, valeur
initiale de SP.
Après les déclarations ci-dessus, on utilisera la séquence d’initialisation :
ASSUME SS:seg_pile

MOV AX, seg_pile


MOV SS, AX ; init Stack Segment

MOV SP, base_pile ; pile vide

Noter que le registre SS s’initialise de façon similaire au registre DS; par contre, on peut accéder directement
au registre SP.

5- LES PROCEDURES
5.1- Notion de procédure
La notion de procédure en assembleur correspond à celle de fonction en langage C,
ou de sous-programme dans d’autres langages.

FIG. 3.5 – Appel d’une procédure. La procédure est nommée calcul. Après l’instruction B, le processeur
passe à l’instruction C de la procédure, puis continue jusqu’à rencontrer RET et revient à l’instruction D.
Une procédure est une suite d’instructions effectuant une action précise, qui sont regroupées par commodité et
pour éviter d’avoir à les écrire à plusieurs reprises dans le programme.
Les procédures sont repérées par l’adresse de leur première instruction, à laquelle on associe une étiquette en
assembleur.
L’exécution d’une procédure est déclenchée par un programme appelant. Une procédure peut elle-même
appeler une autre procédure, et ainsi de suite.

5.2- Instructions CALL et RET


L’appel d’une procédure est effectué par l’instruction CALL.
CALL adresse_debut_procédure
L’adresse est sur 16 bits, la procédure est donc dans le même segment d’instructions.
CALL est une nouvelle instruction de branchement inconditionnel.
La fin d’une procédure est marquée par l’instruction RET :
RET
RET ne prend pas d’argument; le processeur passe à l’instruction placée immédiatement après le CALL.

ISET de Sfax
Cours Architecture des Ordinateurs 82
RET est aussi une instruction de branchement : le registre IP est modifié pour revenir à la valeur qu’il avait
avant l’appel par CALL. Comment le processeur retrouve-t-il cette valeur? Le problème est compliqué par le
fait que l’on peut avoir un nombre quelconque d’appels imbriqués, comme sur la figure3.6.
L’adresse de retour, utilisée par RET, est en fait sauvegardée sur la pile par l’instruction CALL. Lorsque le
processeur exécute l’instruction RET, il dépile l’adresse sur la pile (comme POP), et la range dans IP.

FIG. 3.6 – Plusieurs appels de procédures imbriqués.


L’instruction CALL effectue donc les opérations :
• Empiler la valeur de IP. A ce moment, IP pointe sur l’instruction qui suit le CALL.
• Placer dans IP l’adresse de la première instruction de la procédure (donnée en argument).

Et l’instruction RET :
• Dépiler une valeur et la ranger dans IP.

5.3- Déclaration d’une procédure


L’assembleur possède quelques directives facilitant la déclaration de procédures.
On déclare une procédure dans le segment d’instruction comme suit :

Calcul PROC near ; procédure nommée Calcul


... ; instructions
RET ; dernière instruction
Calcul ENDP ; fin de la procédure

Le mot clef PROC commence la définition d’une procédure, near indiquant qu’il s’agit d’une procédure située
dans le même segment d’instructions que le programme appelant.
L’appel s’écrit simplement :
CALL Calcul

5.4- Passage de paramètres


En général, une procédure effectue un traitement sur des données (paramètres) qui sont fournies par le
programme appelant, et produit un résultat qui est transmis à ce programme Plusieurs stratégies peuvent être
employées :
1. Passage par registre : les valeurs des paramètres sont contenues dans des registres du processeur. C’est
une méthode simple, mais qui ne convient que si le nombre de paramètres est petit (il y a peu de registres).
2. Passage par la pile : les valeurs des paramètres sont empilées. La procédure lit la pile.
Exemple avec passage par registre :
On va écrire une procédure “SOMME” qui calcule la somme de 2 nombres naturels de 16 bits.
Convenons que les entiers sont passés par les registres AX et BX, et que le résultat sera placé dans le registre
AX.
La procédure s’écrit alors très simplement :
SOMME PROC near ; AX <- AX + BX
ADD AX, BX
RET
SOMME ENDP
et son appel, par exemple pour ajouter 6 à la variable Truc :
MOV AX, 6
MOV BX, Truc
CALL SOMME

ISET de Sfax
Cours Architecture des Ordinateurs 83
MOV Truc, AX
Exemple avec passage par la pile :
Cette technique met en œuvre un nouveau registre, BP (BasePointer), qui permet de
lire des valeurs sur la pile sans les dépiler ni modifier SP.
Le registre BP permet un mode d’adressage indirect spécial, de la forme :
MOV AX, [BP+6]
cette instruction charge le contenu du mot mémoire d’adresse BP+6 dans AX.
Ainsi, on lira le sommet de la pile avec :
MOV BP, SP ; BP pointe sur le sommet
MOV AX, [BP] ; lit sans dépiler
et le mot suivant avec :
MOV AX, [BP+2] ; 2 car 2 octets par mot de pile.
L’appel de la procédure “SOMME2” avec passage par la pile est :
PUSH 6
PUSH Truc
CALL SOMME2
La procédure SOMME2 va lire la pile pour obtenir la valeur des paramètres. Pour cela, il faut bien
comprendre quel est le contenu de la pile après le CALL :

Le sommet de la pile contient l’adresse de retour (ancienne valeur de IP empilée par CALL). Chaque élément
de la pile occupe deux octets.
La procédure SOMME2 s’écrit donc :
SOMME2 PROC near ; AX <- arg1 + arg2
MOV BP, SP ; adresse sommet pile
MOV AX, [BP+2] ; charge argument 1
ADD AX, [BP+4] ; ajoute argument 2
RET
SOMME2 ENDP
La valeur de retour est laissée dans AX.
La solution avec passage par la pile parait plus lourde sur cet exemple simple. Cependant, elle est beaucoup
plus souple dans le cas général que le passage par registre. Il est très facile par exemple d’ajouter deux
paramètres supplémentaires sur la pile.
Une procédure bien écrite modifie le moins de registres possible. En général, l’accumulateur est utilisé pour
transmettre le résultat et est donc modifié. Les autres registres utilisés par la procédure seront normalement
sauvegardés sur la pile. Voici une autre version de SOMME2 qui ne modifie pas la valeur contenue par BP
avant l’appel :
SOMME2 PROC near ; AX <- arg1 + arg2
PUSH BP ; sauvegarde BP
MOV BP, SP ; adresse sommet pile
MOV AX, [BP+4] ; charge argument 1
ADD AX, [BP+6] ; ajoute argument 2
POP BP ; restaure ancien BP
RET
SOMME2 ENDP
Noter que les index des arguments (BP+4 et BP+6) sont modifiés car on a ajouté une valeur au sommet de la
pile.

ISET de Sfax
Cours Architecture des Ordinateurs 84

Vous aimerez peut-être aussi