Académique Documents
Professionnel Documents
Culture Documents
1- Définitions de base
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.
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
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.
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.
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).
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.
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
Périphériques
d’entrée/sorties =
bouche, yeux, …
Fig 1.6 Analogie entre l’être humain et l’Ordinateur
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
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}
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.
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).
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.
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
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.
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
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).
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 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.
(-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.
•
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 :
Remarque : Voici un tableau résumant la norme IEEE754, avec des exemples de nombres 32 bits
simple précision.
ISET de Sfax
Cours Architecture des Ordinateurs 11
Chapitre
ARCHITECTURE DE
BASE
ISET de Sfax
Cours Architecture des Ordinateurs 12
2- L’unité centrale 9
3- La mémoire principale 10
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 :
Les différents organes du système sont reliés par des voies de communication appelées bus.
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.
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.
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.
ISET de Sfax
Cours Architecture des Ordinateurs 15
Chapitre LES MEMOIRES
1- Organisation d’une mémoire 21
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.
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 :
Remarque: :
Les entrées et sorties de données sont très souvent regroupées sur des bornes bidirectionnelles.
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.
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.
ISET de Sfax
Cours Architecture des Ordinateurs 18
D7 D6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 D3 D2 D1 D0
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 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).
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).
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.
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.
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...).
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).
ISET de Sfax
Cours Architecture des Ordinateurs 24
Chapitre LE
MICROPROCESSEUR
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.
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.
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.
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.
ISET de Sfax
Cours Architecture des Ordinateurs 28
Fig 4.3 Recherche de l'instruction à traiter
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
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.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.
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
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.
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.
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.
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
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.
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 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.
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.
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
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.
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.
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
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
TD Architecture N° 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.
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
TD N°2
Architecture Des Ordinateurs
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
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
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
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 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
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
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
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. …
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
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 :
Nombre de bits que l’on peut mémoriser par case 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 :
…..………………………………………………………………………………………………………….……
………………………………………………………………………………………………….
ISET de Sfax
Cours Architecture des Ordinateurs 64
……………………………………………………………………………………………….……….…………
……………………………………………………………………………………
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
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
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 ;
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 )
ISET de Sfax
Cours Architecture des Ordinateurs 68
…………………………………………………………………………………………………………
…………………………………………………………………………………………
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.
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………………
ISET de Sfax
Cours Architecture des Ordinateurs 70
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
…………………………………………………………………………………
BIBLIOGRAPHIE
Livres :
Sites web :
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/
[ 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 .
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
; 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 :
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.
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.
code SEGMENT
ASSUME DS:data, CS:code
code ENDS
END début
L’assembleur génère une instruction MOV AX, [adr] lorsqu’il rencontre un MOV AX, étiquette.
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.
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
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.
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
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.
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.
Et l’instruction RET :
• Dépiler une valeur et la ranger dans IP.
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
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