Vous êtes sur la page 1sur 359

Université Mohammed Premier

Faculté des Sciences - Oujda


Filière : Sciences Mathématiques et Informatique (SMI-S4)

Module :

Architecture des ordinateurs

Responsable du module :
Pr. Khadija LAAROUSSI
Département d’informatique
kh.laaroussi@ump.ac.ma
Version 1.1
A.U. 2022-2023
Objectifs du Module

✓ Représenter et expliquer l’architecture des ordinateurs.

✓ Étudier le fonctionnement interne des ordinateurs.

✓ Programmer en assembleur.

FSO Pr. Khadija LAAROUSSI 2


Plan
Partie 1: Architecture des ordinateurs
Chapitre 1: Codage des informations
Chapitre 2: Introduction à l’architecture des ordinateurs
Chapitre 3: Unités fonctionnelles

Partie 2: Langage Assembleur


Chapitre 4: Introduction au langage assembleur
Chapitre 5: Architecture Intel
Chapitre 6: Modes d’adressage et jeu d’instructions
Chapitre 7: Interruptions

FSO Pr. Khadija LAAROUSSI 3


Partie 1: Architecture des ordinateurs

Chapitre 1:

Codage des informations

FSO Pr. Khadija LAAROUSSI 4


Objectifs
✓ Comprendre c’est quoi un système de numération.

✓ Apprendre la méthode de conversion d’un système à un autre.

✓ Comprendre la codification des nombres (non-signés et signés).

✓ Savoir la codification des caractères.

FSO Pr. Khadija LAAROUSSI 5


Plan
Introduction
Systèmes de numération
- Représentation des nombres entiers
- Représentation des nombres réels
Changements de base
- Conversion d’une base b à la base décimale
- Conversion de la base décimale vers une base b
- Conversion en binaire
- Conversion des nombres réels
Codage des nombres
- Entiers naturels
- Entiers signés
Codage des réels : virgule flottante
Codage des caractères

FSO Pr. Khadija LAAROUSSI 6


Introduction
◼ L’homme utilise un langage basé sur des symboles ou des signes. Par
exemple: {A,…,Z}; {0,…,9};{@,<,>,?,#,=,!}.
◼ L’ordinateur a son propre langage basé sur les chiffres 0 et 1, c’est le
langage binaire et c’est le seul langage que l’ordinateur comprend.
◼ Les informations traitées par un ordinateur (nombres, instructions,
images, vidéo, sons, etc.) sont toujours représentées et manipulées
par l’ordinateur sous forme binaire.
◼ Le codage d’une information consiste à établir une correspondance
entre la représentation externe (habituelle) de l’information et sa
représentation interne dans la machine, qui est une suite de bits.
◼ En binaire, une information élémentaire est appelé bit (binary digit)
qui signifie chiffre binaire et il ne peut prendre que deux valeurs
différentes : 0 ou 1.
FSO Pr. Khadija LAAROUSSI 7
Systèmes de numération
Introduction
◼ Un système de numération permet de représenter un mot (ou un
nombre) par la juxtaposition ordonnée de variables (ou symboles)
pris parmi un ensemble.
◼ Il est définit par deux éléments :
- La base du système,
- Les symboles du système.
◼ Dans un système de numération de base b, sont utilisés tous les
chiffres allant de 0 à 𝑏 − 1.
◼ Il existe plusieurs systèmes de numération, les plus utilisés sont:
- Système décimal
- Système binaire
- Système octal
- Système hexadécimal
FSO Pr. Khadija LAAROUSSI 8
Systèmes de numération
Représentation des nombres entiers
◼ Dans un système de numération en base 𝑏 quelconque, un
nombre entier positif noté 𝑁(𝑏) , peut être exprimé en fonction
des puissances de la base:
𝑛−1

𝑁(𝑏) = ෍ 𝑎𝑖 . 𝑏 𝑖
𝑖=0
Avec :
- 𝒃: est la base du système de numération utilisé.
- 𝒂𝒊: chiffre de rang 𝑖 avec 0 ≤ 𝒂𝒊 < 𝒃 .
- 𝒃𝒊 : pondération associée à 𝑎𝑖 .

FSO Pr. Khadija LAAROUSSI 9


Systèmes de numération
Système décimal
◼ La base du système décimal est 10. Ce système contient 10 symboles
: 0,1,2,3, … et 9.
◼ Tout nombre entier positif 𝑁 peut être représenté à la base 10 comme
suit :
𝑛−1

𝑁10 = ෍ 𝑎𝑖 × 10𝑖
𝑖=0
Où 𝑎𝑖 ∈ 0,1,2, … , 9 .
◼ Exemples :
Représentation en base 10 des nombres entiers suivants :
- (541)10 = 5 × 𝟏𝟎𝟐 + 4 × 𝟏𝟎𝟏 + 1 × 𝟏𝟎𝟎 .
- (1852)10 = 1 × 𝟏𝟎𝟑 + 8 × 𝟏𝟎𝟐 + 5 × 𝟏𝟎𝟏 +2 × 𝟏𝟎𝟎 .
FSO Pr. Khadija LAAROUSSI 10
Systèmes de numération
Système binaire
◼ La base du système binaire est 2. Deux symboles seulement existent
dans ce système : 0 et 1.
◼ Tout nombre entier positif 𝑁 peut être représenté à la base 2 comme
suit :
𝑛−1

𝑁2 = ෍ 𝑎𝑖 × 2𝑖
𝑖=0
Où 𝑎𝑖 ∈ 0,1 .
◼ Exemples :
Représentation en base 2 des nombres suivants :
- (101)2 = 1 × 𝟐𝟐 + 0 × 𝟐𝟏 + 1 × 𝟐𝟎 .
- (1101)2 = 1 × 𝟐𝟑 + 1 × 𝟐𝟐 + 0 × 𝟐𝟏 +1 × 𝟐𝟎 .
FSO Pr. Khadija LAAROUSSI 11
Systèmes de numération
Système octal
◼ Dans ce système, la base est 8 et il contient 8 symboles :
0,1,2,3, … 𝑒𝑡 7.
◼ Tout nombre entier positif 𝑁 peut être représenté à la base 8 comme
suit :
𝑛−1

𝑁8 = ෍ 𝑎𝑖 × 8𝑖
𝑖=0
Où 𝑎𝑖 ∈ 0,1, … , 7 .
◼ Exemples :
Représentation en base 8 des nombres suivants :
- (124)8 = 1 × 𝟖𝟐 + 2 × 𝟖𝟏 + 4 × 𝟖𝟎 .
- (3456)8 = 3 × 𝟖𝟑 + 4 × 𝟖𝟐 + 5 × 𝟖𝟏 +6 × 𝟖𝟎 .
FSO Pr. Khadija LAAROUSSI 12
Systèmes de numération
Système hexadécimal
◼ La base dans ce système est 16, et il contient 16 symboles :
0,1,2,3, … , 9, 𝐴, 𝐵, 𝐶, 𝐷, 𝐸 𝑒𝑡 𝐹.
◼ En hexadécimal, on utilise les 6 premières lettres comme des
chiffres.
◼ Tout nombre entier positif 𝑁 peut être représenté à la base 16 comme
suit :
𝑛−1

𝑁16 = ෍ 𝑎𝑖 × 16𝑖
𝑖=0
Où 𝑎𝑖 ∈ 0,1, … , 9, 𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹 .
◼ Exemples : Représentation des nombres suivants en base 16 :
- (124)16 = 1 × 𝟏𝟔𝟐 + 2 × 𝟏𝟔𝟏 + 4 × 𝟏𝟔𝟎 .
- (3𝐵5𝐹)16 = 3 × 𝟏𝟔𝟑 + 11 × 𝟏𝟔𝟐 + 5 × 𝟏𝟔𝟏 +15 × 𝟏𝟔𝟎 .
FSO Pr. Khadija LAAROUSSI 13
Systèmes de numération
Représentation des nombres réels
◼ Un nombre réel est composé d'une partie entière et d'une partie
fractionnaire après la virgule.
◼ Il s’écrit symboliquement comme suit:
𝑎𝑛−1 𝑎𝑛−2 … 𝑎2 𝑎1 𝑎0 , 𝑎−1 𝑎−2 … 𝑎−𝑝
◼ Pour représenter un nombre réel, les chiffres à droite de la virgule
correspondent aux puissances négatives de la base (comme pour les
décimaux).
◼ Dans un système de numération en base 𝑏 quelconque, un nombre réel noté
𝑋(𝑏) s’écrit sous la forme suivante:
𝑛−1 𝑚

𝑋(𝑏) = ෍ 𝑎𝑖 . 𝑏 𝑖 + ෍ 𝑎−𝑘 . 𝑏 −𝑘
𝑖=0 𝑘=1
◼ Exemple:
- (13,102)10 = 1×101 + 3×100 + 1×10-1 + 0×10-2 + 2×10-3
FSO Pr. Khadija LAAROUSSI 14
Changements de base
Conversion d’une base b à la base décimale
◼ Le changement de base est l’opération qui permet de passer de la
représentation d’un nombre exprimé dans une base à la représentation du
même nombre mais exprimé dans une autre base.
◼ Pour convertir un nombre écrit dans une base b quelconque en nombre
décimal, il suffit de multiplier la valeur de chaque chiffre par son poids,
puis additionner chaque résultat.
◼ Exemples :
▪ Conversion : Binaire → Décimal
- (1010111)2= 1×26 + 0×25 + 1×24 + 0×23 + 1×22 + 1×21 + 1×20 = (87)10
▪ Conversion : Octal → Décimal
- (124)8 = 1 × 82 + 2 × 81 + 4 × 80 = (84)10
▪ Conversion : Hexadécimal → Décimal
- (AB)16 = 10 × 161 + 11 × 160 = (171)10
FSO Pr. Khadija LAAROUSSI 15
Changements de base
Conversion de la base décimale vers une base b
◼ On procède par des divisions successives.
◼ On divise le nombre par la base puis le quotient obtenu par
la base, et ainsi de suite jusqu’à l’obtention d’un quotient
nul.
◼ Le nombre cherché s’écrit en plaçant les restes des
divisions successives dans l’ordre inverse de leur
obtention.
◼ La suite des restes obtenus correspond aux chiffres dans la
base b.
FSO Pr. Khadija LAAROUSSI 16
Changements de base
Conversion de la base décimale vers une base b
◼ Exemple: Conversion du décimal au système binaire
(123)10 = ( ? )2
123 2
1 61 2
1 30 2
0 15 2
Sens de lecture du 1 7 2 Arrêt de la
nombre binaire 1 3 2 division
1 1 2
1 0
◼ Résultat : (123)10 = (1111011)2
FSO Pr. Khadija LAAROUSSI 17
Changements de base
Conversion de la base décimale vers une base b
◼ Exemple: Conversion du décimal au système octal
(123)10 = ( ? )8
123 8
Arrêt de la
3 15 8
division
7 1 8
Sens de lecture 1 0
du nombre octal

◼ Résultat : (123)10 = (173)8

FSO Pr. Khadija LAAROUSSI 18


Changements de base
Conversion de la base décimale vers une base b
◼ Exemple: Conversion du décimal au système hexadécimal
(123)10 = ( ? )16
123 16
Arrêt de la
11 7 16
division
7 0
Sens de lecture
du nombre
hexadécimal

◼ Résultat : (123)10 = (7B)16

FSO Pr. Khadija LAAROUSSI 19


Changements de base
Conversion en binaire : Octal → Binaire
◼ Pour écrire les 8 = 23 symboles de la base octale, nous avons
besoin de trois bits comme suit:
(0)8 = (000)2 (1)8 = (001)2 (2)8 = (010)2 (3)8 = (011)2
(4)8 = (100)2 (5)8 = (101)2 (6)8 = (110)2 (7)8 = (111)2

◼ La conversion consiste à remplacer chaque chiffre octal par


son équivalent binaire sur 3 bits.
◼ Exemples:
- (15)8 = (001 101)2
- (2763)8 = (010 111 110 011)2
FSO Pr. Khadija LAAROUSSI 20
Changements de base
Conversion en binaire : Binaire → Octal
◼ On effectue le remplacement, de droite à gauche, de 3 bits par
le chiffre octal correspondant.

◼ Si le nombre de bits n’est pas un multiple de 3, on complète à


gauche avec des zéros.

◼ Exemples:

- (101101)2 = (101)2 (101)2 = (55)8

- (10110)2 = (010)2 (110)2 = (26)8

FSO Pr. Khadija LAAROUSSI 21


Changements de base
Conversion en binaire : Hexadécimal → Binaire
◼ Pour écrire les 16 = 24 symboles de la base hexadécimale nous avons
besoin de quatre bits comme suit:
(0)16 = (0000)2 (1)16 = (0001)2 (2)16 = (0010)2 (3)16 = (0011)2
(4)16 = (0100)2 (5)16 = (0101)2 (6)16 = (0110)2 (7)8 = (0111)2
(8)16 = (1000)2 (9)16 = (1001)2 (A)16 = (1010)2 (B)8 = (1011)2
(C)16 = (1100)2 (D)16 = (1101)2 (E)16 = (1110)2 (F)8 = (1111)2
◼ La conversion consiste à remplacer chaque chiffre hexadécimal par
son équivalent binaire sur 4 bits.
◼ Exemples:
- (3A)16 = (0011 1010)2
- (A01)16= (1010 0000 0001)2
FSO Pr. Khadija LAAROUSSI 22
Changements de base
Conversion en binaire : Binaire → Hexadécimal
◼ On effectue le remplacement, de droite à gauche, de 4 bits par
le chiffre hexadécimal correspondant.
◼ Si le nombre de bits n’est pas un multiple de 4, on complète à
gauche avec des zéros.
◼ Exemples:
- (10101110)2 = (1010)2 (1110)2 = (AE)16
- (101101)2 = (0010)2 (1101)2 = (2D)16

FSO Pr. Khadija LAAROUSSI 23


Changements de base
Tableau de correspondance des 16 premiers chiffres
Hexadécimal Décimal Binaire
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111

FSO Pr. Khadija LAAROUSSI 24


Changements de base
Conversion des nombres réels: Base b → Décimale
◼ Partie entière:
- Méthode de multiplication par la base b comme pour les entiers
positifs.
◼ Partie fractionnaire:
- Les chiffres correspondent aux puissances négatives de la base.
◼ Exemples:
- (101,101)2 = 1×22 + 0×21 + 1×20 +1×2-1 + 0×2-2 + 1×2-3
= 4 + 1 + 0,5 + 0,125
= (5,625)10
- (AB,4E)16 = 10×161 + 11×160 + 4×16-1 + 14×16-2
= 160 + 11 + 4 × 0,0625 + 14 × 0,003906
= (171,3046)10
FSO Pr. Khadija LAAROUSSI 25
Changements de base
Conversion des nombres réels: Décimale → Base b
◼ Partie entière:
- Méthode des divisions successives par la base b comme pour les
entiers positifs.
◼ Partie fractionnaire:
- On multiplie la partie fractionnaire par la base b;
- On note la partie entière obtenue;
- On recommence avec la partie fractionnaire restante;
- On s’arrête quand la partie fractionnaire est nulle ou quand la
précision souhaitée est atteinte;
- La partie fractionnaire est la concaténation des parties entières
obtenues dans l’ordre de leur calcul.
FSO Pr. Khadija LAAROUSSI 26
Changements de base
Conversion des nombres réels: Décimale → base b
◼ Exemple : Conversion de 12,6875 en binaire :
- Conversion de la partie entière 12 : (12)10 = (1100)2.
- Conversion de la partie fractionnaire 0,6875 :
0,6875 × 2 = 1,375 = 1 + 0,375
0,375 × 2 = 0,75 = 0 + 0,75 Sens de la lecture
0,75 × 2 = 1,5 = 1 + 0,5
0,5 × 2 = 1 =1+0
Arrêt de la
multiplication
▪ Résultat: (12,6875)10 = (1100,1011)2.

FSO Pr. Khadija LAAROUSSI 27


Changements de base
Exercice 1:
1) Convertir les nombres suivants en décimal :
(10001111)2 ; (77210)8 ; (A1BE)16
2) Convertir les nombres suivants :
(83)10= (…)2 ; (1157)10= (…)8 ; (3589)10= (…)16
(1001101011)2= (…)8 ; (101101)2 = (…)16
3) Convertir les nombres réels suivants :
- (0,625)10= (…)2
- (25,375)10 = (…)2
- (2,8)10= (…)2
- (0,28125)10= (…)8
- (364,25)8= (…)16
FSO Pr. Khadija LAAROUSSI 28
Changements de base
Exercice 1: Correction
1. (10001111)2 = (143)10 ; (77210)8 = (32392)10 ; (A1BE)16 = (41406)10
2. (83)10= (1010011)2 ; (1157)10= (2205)8 ; (3589)10= (E05)16
- (1001101011)2= (001)2 (001)2 (101)2 (011)2 = (1153)8
- (101101)2 = (0010)2(1101)2 = (2D)16
3. (0,625)10= (0,101)2
(25,375)10 = (11001,011)2
(2,8)10= (10,1100….)2
(0,28125)10= (0,22)8
(364,25)8= (0F4,54)16

FSO Pr. Khadija LAAROUSSI 29


Codage des nombres
Introduction
◼ La représentation ou la codification des nombres est nécessaire
afin de les stocker et manipuler par un ordinateur.
◼ Les principaux problèmes rencontrés lors de la représentation des
entiers sur une machine sont:
- D’une part, 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 fixe.
- d’autre part, le signe négatif précédant les valeurs entières, il
faut, en plus, coder le signe (0 : positif et 1 : négatif).

FSO Pr. Khadija LAAROUSSI 30


Codage des nombres
Introduction
◼ Les ordinateurs modernes utilisent généralement des données de 8, 16, 32
ou 64 bits, bien que d’autres tailles soient possibles.
◼ La nomenclature la plus utilisée par les éditeurs de langages de
développement logiciel est normalisée comme suit :
1 octet (8 bits): byte.
2 octets(16 bits): word.
4 octets (32 bits): dword.
8 octets (64 bits): qword.
10 octets (80 bits): tword.
16 octets (128 bits): oword.
32 octets (256 bits): yword.
64 octets (512 bits): zword.

FSO Pr. Khadija LAAROUSSI 31


Codage des nombres
Entiers naturels
◼ Les entiers naturels (positifs ou nuls) sont codés sur un nombre
d’octets fixé. On rencontre habituellement des codages sur 1, 2 ou 4
octets, etc.
◼ Un codage sur n bits permet de représenter tous les nombres naturels
(les entiers non signés) compris entre 0 et 2n -1.
◼ Par exemple, sur 1 octet (8 bits), on pourra coder les nombres de 0 à
255 = 28 - 1.
◼ Pour écrire un entier naturel positif ou nul:
- On représente le nombre en base 2 et on range les bits dans les cellules
binaires correspondant à leur poids binaire, de la droite vers la gauche.
- Si nécessaire, on complète à gauche par des zéros (bits de poids fort).
◼ Exemple :
- Sur un octet, (10)10 se code comme suit (00001010)2
FSO Pr. Khadija LAAROUSSI 32
Codage des nombres
Entiers signés
◼ Pour coder les entiers signés ou relatifs, il faut coder le signe
du nombre.
◼ Il existe plusieurs méthodes pour représenter les entiers signés,
parmi lesquelles nous citons :
- Méthode de complément à 1.
- Codage en complément à 2.

FSO Pr. Khadija LAAROUSSI 33


Codage des nombres
Entiers signés: Complément à 1
◼ Le complément à 1 d’un nombre binaire est la valeur obtenue en
inversant tous les bits de ce nombre (en changeant chaque 0 par un 1
et chaque 1 par un 0).
1 0 1 1 0 1 Nombre binaire initial
0 1 0 0 1 0 Complément à 1
◼ Les nombres positifs sont codés de la même manière qu’en binaire
pur.
◼ Exemple :
- Représentation de -2410 en complément à 1 sur 8 bits:
|-2410| = 2410 en binaire pur sur 8 bits est (00011000)2 puis on inverse
les bits on obtient 11100111.
- D’où le complément à 1 de |-2410| est donc : (11100111)2
FSO Pr. Khadija LAAROUSSI 34
Codage des nombres
Entiers signés: Complément à 1
◼ Limites :
- Deux représentations différentes pour 0 (+0 et -0).
- Sur 8 bits: +0 = 00000000 (CA1) et -0 = 11111111(CA1).
- Plage de nombres représentés sur 8 bits est : -127 et 127.
◼ Exemples :
▪ Coder 100 et -100 en complément à 1 sur 8 bits:
100(10) = (01100100)(ca1)
-100(10) = (10011011)(ca1)
▪ Décoder en décimal (11000111)(ca1) et (00001111)(ca1)
(11000111)(ca1) = -56(10)
(00001111)(ca1) = 15(10)
FSO Pr. Khadija LAAROUSSI 35
Codage des nombres
Entiers signés: Complément à 2
◼ Le complément à 2 d’un nombre binaire s’obtient simplement en prenant
le complément à 1 de ce nombre et en ajoutant 1 au bit de son rang de
poids le plus faible.
1 0 1 1 0 1 Nombre binaire initial
0 1 0 0 1 0 Complément à 1
+ 1
0 1 0 0 1 1 Complément à 2
◼ Le bit du poids fort est utilisé pour représenter le signe du nombre (0:
positif et 1: négatif).
◼ On utilise donc 𝒏 − 𝟏 bits pour représenter les nombres signés.
◼ Les nombres positifs sont codés de la même manière qu’en binaire pur.
◼ Pour obtenir le codage d’un nombre négatif, on code en binaire sa valeur
absolue sur 𝑛 − 1 bits, puis on complémente à 2 tous les bits.
FSO Pr. Khadija LAAROUSSI 36
Codage des nombres
Entiers signés: Complément à 2
◼ Exemple:
▪ Représentation de -2410 en complément à 2 sur 8 bits.
- Le complément à 1 de |-2410| est (11100111)2
- Le complément à 2 : 11100111 + 1 = (1110 1000)2
◼ Avantages:
- Une seule représentation de 0 qui est 00000000(ca2).
- Le zéro est « positif » en complément à deux, donc on a bien autant de
positifs que de négatifs.
◼ Remarques:
- Sur n bits l’intervalle de valeurs décimales signées (les entiers positifs
ou négatifs) est [-2n-1, 2n-1-1].
- Par exemple, sur 8 bits l’intervalle de valeurs décimales signées est
[-128, 127] = [-27, 27-1].
FSO Pr. Khadija LAAROUSSI 37
Codage des nombres
Exercice 2:
1) Ecrire chacun des nombres décimaux signés suivants dans la
notation en complément à 2:
- Pour les nombres (-2)10, (+45)10 et (-96)10 utiliser au total 8 bits y
compris un bit de signe.
- Pour les nombres (-2)10 et (-25)10 utiliser au total 6 bits y compris
un bit de signe.
2) Trouver la valeur décimale du nombre binaire signé suivant
(notation en complément à 2) : (10110101)2.
3) Effectuer l’addition suivante en utilisant la notation en
complément à 2 : (+107)10 + (-67)10

FSO Pr. Khadija LAAROUSSI 38


Codage des nombres
Exercice 2: Correction
1) Pour coder l’entier (-2)10 sur 8 bits y compris un bit de signe :
- On exprime 2 en binaire sur 8 bits : 0000 0010.
- Le complément à 1 est : 1111 1101.
- Le complément à 2 on obtient le résultat : (-2)10 = (1111 1110)2.
➢ (+45)10 = (0010 1101)2 et (-96)10 = (1010 0000)2.
➢ (-2)10 = (111110)2 et (-25)10 = (100111)2.
2) Comme le complément à 2 du complément à 2 donne le nombre initial:
- Il nous suffit de calculer le complément à 2 de 10110101 (qui est un
nombre négatif) pour avoir sa valeur absolue on part de (10110101)2
complément à un : 0100 1010.
- On ajoute 1 : 0100 1011.
- On traduit (0100 1011) en décimal : 26 + 23 + 21 + 1 = 75.
- La valeur du nombre binaire signé (10110101)2 est (-75).
3) 0110 1011 + 1011 1101 = 0010 1000 ⟹ [(+107)10 + (-67)10 = (+40)10].
FSO Pr. Khadija LAAROUSSI 39
Codage des réels : virgule flottante
Norme IEEE 754
◼ Depuis les années soixante, on utilise une virgule flottante au lieu d’une
virgule fixe.
◼ La virgule flottante est une méthode d'écriture de nombres réels
fréquemment utilisée dans les ordinateurs.
◼ Cependant, la représentation en virgule flottante n'est pas unique. Cela
nécessite de normaliser l'écriture pour qu'elle devienne unique et c’est le
rôle de la norme IEEE 754 publiée en 1985 et révisée en 2008.
◼ Exemple:
- 1000001101.1 = 1.0000011011 × 29
- 0.101 = 1.01 ×2-1
◼ La norme IEEE 754, adoptée par la plupart des fabricants d’ordinateurs
distingue deux niveaux de précision : simple (sur 4 octets) et double
(sur 8 octets).
FSO Pr. Khadija LAAROUSSI 40
Codage des réels : virgule flottante
Norme IEEE 754
◼ En notation flottante selon la norme IEEE 754, un nombre réel 𝑋 à la
forme suivante:
𝑿 = (−𝟏)𝑺 𝟏, 𝑴 × 𝟐𝒆
▪ Le signe S est codé sur 1 bit ayant le poids fort :
- Nombre positif : S = 0.
- Nombre négatif : S = 1.
▪ Exposant e
- 𝒆 = 𝑬 − 𝑬𝒃 avec 𝑬𝒃 est l’exposant biaisé égal à 127. Pour prendre
en compte les exposants négatifs on ajoute 127 à l’exposant.
▪ Mantisse normalisée (M)
- Virgule est placée après le bit à 1 ayant le poids fort.
- M est codée sur q bits.
◼ Exemple: 11,01 => 1,101 d’où la mantisse est M = 101.

FSO Pr. Khadija LAAROUSSI 41


Codage des réels : virgule flottante
Norme IEEE 754 : Format standardisé
Exposant E Mantisse M

b30 b23 b0
b31
Signe S

Format simple précision: 32 bits Format double précision: 64 bits


- Bit du signe (1 bit) - Bit du signe (1 bit)
- Exposant (8 bits) - Exposant (11 bits)
- Mantisse (23 bits) - Mantisse (52 bits)

FSO Pr. Khadija LAAROUSSI 42


Codage des réels : virgule flottante
Norme IEEE 754
◼ Exemple 1:
▪ Soit le nombre réel positif 525,5 à coder en simple précision (32 bits).
- La représentation en base 2 est la suivante 1000001101,1.
- En normalisant, on trouve : 1000001101,1 = 1,0000011011 × 29.
- Le signe S = 0 car le nombre est positif.
- L’exposant E : E = e + Eb ⟹ E = 9 + 127 = (136)10 = (10001000)2.
- La mantisse M est composée de la partie décimale de 525,5, en base 2
normalisé, 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 est :
0 10001000 00000110110000000000000
▪ En hexadécimal, on obtient : 0×44036000.
FSO Pr. Khadija LAAROUSSI 43
Codage des réels : virgule flottante
Norme IEEE 754
◼ Exemple 2:
▪ Soit le nombre réel négatif -0,625 à coder en simple précision (32 bits).
- Le bit signe S = 1, car le nombre est négatif.
- 0,625 s’écrit en base 2 de la façon suivante : 0,101. En effet,
0,625 × 2 = 1,25 ⟹ 1 + 0,25
0,25 × 2 = 0,5 ⟹ 0 + 0,5
0,5 × 2 = 1,0 ⟹ 1 + 0
- En normalisant, on trouve : 0,101 = 1,01 × 2-1.
- L’exposant E = e + Eb = (-1) + 127 = (126)10 = (01111110)2
- La mantisse M : 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 est :
1 01111110 01000000000000000000000
▪ En hexadécimal, on obtient : 0×BF200000.
FSO Pr. Khadija LAAROUSSI 44
Codage des caractères
Introduction
◼ Les caractères également doivent être représentés en binaire de
manière unique.
◼ 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.
◼ Par exemple, pour représenter des caractères dans un fichier texte,
on associe un nombre (code) à une lettre, à un chiffre ou à un
symbole.
FSO Pr. Khadija LAAROUSSI 45
Codage des caractères
Codes de caractères
◼ Les principaux codes de caractères utilisés par les ordinateurs sont:
▪ Code ASCII (pour American Standard Code for Information
Interchange) est initialement un code à 7 bits, qui permet le codage de
128 caractères. Il englobe des lettres, des chiffes et des signes de
ponctuations.
Remarque: Notons que le code ASCII original, défini pour les
besoins de l’informatique en langue anglaise ne permet pas la
représentation des caractères accentués (é, è, à, ù, …), et encore moins
des caractères arabes ou chinois.
▪ Code ASCII étendu, utilisant 8 bits pour coder des caractères
supplémentaires. Soit 256 caractères possibles.
▪ Code Unicode : encodage sur 16 bits (216 = 65536 possibilités) pour
représenter tous les caractères de toutes les langues.
FSO Pr. Khadija LAAROUSSI 46
Codage des caractères
Table ASCII

FSO Pr. Khadija LAAROUSSI 47


Chapitre 2:
Introduction à l’architecture des ordinateurs

FSO Pr. Khadija LAAROUSSI 48


Objectifs
✓ Connaître les différentes générations des ordinateurs
ainsi que leurs caractéristiques à travers un bref
historique des ordinateurs.
✓ Clarifier l’architecture matérielle des ordinateurs.
✓ Décrire les principaux éléments d’un ordinateur.
✓ Décrire la structure et le fonctionnement d'un ordinateur.
✓ Connaître les unités d’entrées/sorties.

FSO Pr. Khadija LAAROUSSI 49


Plan
Introduction
Modèle de Von Neumann
Microprocesseur
- Fonctions, caractéristiques et les composants
Mémoires
- Caractéristiques
- Types et hiérarchie
- Mémoires vives RAM
- Mémoires mortes ROM
- Stockage des informations en mémoire
- Mémoire cache
- Mémoires auxiliaires
Bus
Entrées/Sorties

FSO Pr. Khadija LAAROUSSI 50


Introduction
Ordinateur
◼ Un ordinateur est une machine qui permet le traitement automatique
de l’information en exécutant une série d’ordres.
◼ Un ordinateur permet de :
- Acquérir l’information, la stocker, la transformer en effectuant des
traitements quelconques, puis de la restituer sous une autre forme.
- Interagir avec l'environnement grâce à des périphériques (écran,
clavier, souris, etc.).

FSO Pr. Khadija LAAROUSSI 51


Introduction
Ordinateur
◼ Il existe de nombreux modèles d’ordinateur qui différent par (leurs
formes, leurs tailles, leurs capacités, leurs vitesses, etc.), nous
pouvons citer :
- Ordinateur de poche : Smartphone.
- Ordinateur portable : Laptop, Tablette tactile.
- Ordinateur de bureau : Personnel, Station de travail.
- Ordinateur géant : Mainframe, Superordinateur.

FSO Pr. Khadija LAAROUSSI 52


Introduction
Intérêt de l’architecture des ordinateurs
◼ En informatique, le terme architecture désigne l’organisation des
éléments d’un système et les relations entre ces éléments.
◼ On distingue deux catégories d’architectures :
- L’architecture logicielle concerne l’organisation de différents
programmes entre eux.
- L’architecture matérielle concerne l’organisation des différents
dispositifs physiques que l’on trouve dans un ordinateur.

FSO Pr. Khadija LAAROUSSI 53


Introduction
Intérêt de l’architecture des ordinateurs
▪ But : Satisfaire la curiosité intellectuelle.
Comment fonctionne cette machine sur laquelle vous
passez des heures et des heures?
✓ Optimiser la programmation.
✓ Développer des systèmes de traitement haute performance (audio,
vidéo, médical, etc.).
✓ Développer des systèmes matériels (mémoire, processeur, etc.).
✓ Avoir une expertise en choix de matériel informatique.
✓ Développer des systèmes d’exploitation et des compilateurs.

FSO Pr. Khadija LAAROUSSI 54


Introduction
Historique: 1ère génération (1945 – 1956)
◼ Caractéristiques
- Technologie TRL (Technology Readiness Level) ou Intégration à
faible échelle (de 1 à 16 composants/circuit).
- Technologie tubes cathodiques (lampes, résistances).
- Machines volumineuses et peu fiables.
- Mémoire limitée (quelques octets).
- Exécute 40000 opérations/s.
- Innovations: la bande magnétique, les disques magnétiques, les
imprimantes et les écrans des visualisation. ENIAC
- Circuits chers.
◼ ENIAC- 1946 (Electronic Numerical Integrator And Calculator): Développé par
John Presper Eckert et John W. Mauchly, pèse 30 tonnes, couvre 72 m2, 19000
tubes, 70000 résistances, 5000 additions/s, 1 division en 6 ms, 120 cartes lues/min.
◼ EDVAC - 1945 (Electronic Discrete Variable Automatic Computer): développé par
Von Neumann, utilise une mémoire qui stocke le programme et les données. L'unité
centrale de calcul (CPU) qui coordonne toutes les fonctions de l'ordinateur.
FSO Pr. Khadija LAAROUSSI 55
Introduction
Historique: 2ème génération (1956 – 1963)
◼ Caractéristiques
- Technologie à transistors: le transistor remplaçait
avantageusement les tubes à vide utilisés alors dans les
télévisions, radios et bien sur ordinateurs.
- Ordinateurs: plus petits, plus rapides, plus fiables et moins
gourmands en énergie.
- Mémoires à tore magnétiques (tores de ferrite).
- Machines fiables .
- Exécute 200 000 opérations/s.
- Premiers langages de programmation évolués (COBOL, IBM 704 lancé par
IBM (1955)
FORTRAN, LISP).
- Langage assembleur pour remplacer le langage machine.
◼ Premiers ordinateurs: Stretch d’IBM et LARC de Sperry-Rand.
◼ IBM 1401: était considéré le modèle de l'industrie informatique.

FSO Pr. Khadija LAAROUSSI 56


Introduction
Historique: 3ème génération (1964 – 1971)
◼ Caractéristiques
- Technologie MSI (Medium Scale Integration) ou intégration à moyenne
échelle (jusqu’à 1024 composants/circuit). Microprocesseur
- Technologie des circuits intégrés: Jack Kilby a développé le circuit Intel 4004
intégré (1968) qui combine trois composants électroniques sur un petit
disque de silicium, fait de quartz, ce qui réduit le coût du matériel.
- Ordinateurs: deviennent de plus en plus petits, énormes et centralisent
les traitements avec un nouveau marché pour le grand public.
- Mémoire à semi-conducteur.
- Exécute 1000000 opérations/s.
- Système d’exploitation UNIX: Tourner plusieurs programmes différents
Mini-ordinateur
sur une même machine. DEC-PDP 8
- Langages de programmation évolués: PL/1, Pascal (1970).
▪ Mini-ordinateur DEC-PDP 8 (1965): Mémoire de 4096 mots de 12 bits, 2 registres :
Accumulateur + registre de lien, 8 instructions.
▪ 1er microprocesseur Intel 4004 (1971): Mémoire de 256 octets, 3 registres. Processeur 4
bits - 108 KHz, 60000 instructions/s, 2300 transistors.
FSO Pr. Khadija LAAROUSSI 57
Introduction
Historique: 4ème génération (1972 - 1977)
◼ Caractéristiques
- Technologie LSI (Large Scale Integration) ou intégration à
grande échelle (jusqu’à 20 000 transistors/circuit).
Micral-N (1973)
- Technologie à circuits intégrés.
- Exécute 10 000 000 opérations/s.
- Mémoire à très grande capacité.
- Avènement de réseaux de machines. Altair 8800 (1975)
- Traitement distribué/réparti.

▪ Micro-ordinateurs:
Apple I (1976)
- Micral (1973) : 8080 d'Intel.
- Altair 8800 (1975) : Intel 8080 à 2 MHz, 256 octets de mémoire.
- Apple I (1976) : muni de clavier, 6502 à 1 MHz, 4 Ko de RAM, 1 Ko de RAM.

FSO Pr. Khadija LAAROUSSI 58


Introduction
Historique: 5ème génération (1978 – Aujourd’hui)
◼ Caractéristiques
- Technologie VLSI (Very Large Scale Integration) ou intégration à
CPU Intel
très grande échelle (jusqu’à 1000000 transistors/circuit). 8086
- Technologie ULSI (Ultra Large Scale Integration) permet
aujourd'hui de placer plusieurs millions de composants sur un
même support.
- Par exemple, on trouve M1 Apple intègre 16 milliards de
transistors et 7 milliards de transistors pour Intel i9 avec une
vitesse ≈ 4,7 GHz.
- Propriétés des circuits: Miniaturisation, fiabilité, complexité,
vitesse.
- Ordinateurs : plus puissants, plus performants et plus fiables.
▪ Intel 8086 (1978): C’est le premier processeur de la famille x86,
qui est devenue l'architecture de processeur la plus répandue dans
le monde des ordinateurs personnels.
FSO Pr. Khadija LAAROUSSI 59
Introduction
Types d’architectures
◼ Il existe deux types d’architectures, chacune est plus adaptée à un
type d’appareil spécifique :
- L’architecture Von Neumann: une seule mémoire stocke les
instructions et les données d’un programme.
- L’architecture Harvard: deux mémoires séparées, une pour les
données et l’autre pour le programme.
◼ L’architecture de Von Neumann (fin 1945) est la base des
architectures des ordinateurs, elle est composée de trois éléments
principaux :
- Unité centrale de traitement ou microprocesseur.
- Mémoire centrale.
- Interfaces Entrées/Sorties.
FSO Pr. Khadija LAAROUSSI 60
Introduction
Architecture de Von Neumann
Unité centrale de Mémoire
traitement (CPU) Centrale
Instructions
Unité de contrôle Programmes
²

Unité arithmétique Données


Données
et logique (UAL)

Unités d’Entrées/Sorties
Modèle de Von Neumann = Unités et Mémoires reliées via des bus
FSO Pr. Khadija LAAROUSSI 61
Microprocesseur
Introduction
◼ Le microprocesseur, nommé aussi, processeur, unité centrale de
traitement ou CPU pour (Central Processing Unit) est le cerveau de
l’ordinateur qui interprète et exécute les instructions d’un programme.
◼ C’est un circuit intégré complexe. Il résulte de l’intégration sur une puce de
fonctions logiques combinatoires (logiques ou arithmétiques) et
séquentielles (registres, compteur, etc.).
◼ Pour fonctionner, le processeur est cadencé au rythme d'une horloge
interne qui envoie des impulsions, appelées « top ».
◼ Il a été inventé par Marcian Ted Hoff en 1971 (Ingénieur chez Intel) avec
le modèle 4004 d'une unité de calcul de 4 bits, cadencé à 108 KHz.

FSO Pr. Khadija LAAROUSSI 62


Microprocesseur
Fonctions
◼ Le microprocesseur assure plusieurs tâches nécessaires au fonctionnement
global d’un ordinateur :
- Lecture d’instruction: le processeur lit une instruction dans la mémoire.
- Interprétation d’instruction: l’instruction est décodée pour déterminer
l’action demandée.
- Exécution d’instruction: il exécute les instructions d’un programme.
- Lecture des données: lire des données dans la mémoire ou depuis un
module d’E/S.
- Traitements des données: exécutions d’une opération arithmétique ou
logique sur les données.
- Écriture des données: écrire des données dans la mémoire ou dans un
module d’entrée/sortie.
- Contrôle et commande de toutes les composantes de l’ordinateur.
- Synchronise, par une horloge, les flux d’informations qui circulent dans
toutes les composantes.
FSO Pr. Khadija LAAROUSSI 63
Microprocesseur
Caractéristiques
Les caractéristiques principales d’un microprocesseur sont :
◼ Fréquence: Correspond à la vitesse de fonctionnement du processeur. C’est
le nombre d'opérations qu’un processeur est capable d’effectuer par
seconde. Elle est mesurée en hertz (Hz).
◼ Complexité de son architecture: qui se mesure par le nombre de
transistors contenus dans le microprocesseur.
- Plus le CPU contient de transistors, plus il pourra effectuer des opérations
complexes et traiter des nombres de grande taille.
- Par exemple, pour Intel i7 on trouve 1 400 000 000 transistors.
◼ Jeu d’instructions: Représente l'ensemble des opérations que peut
exécuter un processeur par exemple l’addition, la multiplication, la
comparaison, etc.
- Il est exprimé en Million d’Instructions Par Seconde (MIPS). Les processeurs
actuels peuvent effectuer plus de 10 milliards d'instructions par seconde.
FSO Pr. Khadija LAAROUSSI 64
Microprocesseur
Caractéristiques
◼ Nombre de cœurs (core): Ils permettent d’effectuer plusieurs
opérations en même temps, une tâche par cœur et de rendre l’ordinateur
plus performant. La plupart des processeurs actuels possèdent plusieurs
cœurs.
- Les derniers CPU chez Intel et AMD ayant déjà 18 voire 64 cœurs.
◼ Type d’architecture: On distingue 2 grandes familles d’architectures:
- L’architecture CISC (Complex Instruction Set Computer): elle désigne
un processeur possédant un jeu d’instructions plus complexe et nécessite
plusieurs cycles d'horloge (comprenant plus de 200 instructions).
- L’architecture RISC (Reduced Instruction Set Computer): elle désigne
un processeur possédant un jeu d’instructions simple ce qui le rende
rapide, facile à fabriquer et aussi de petite taille, ce jeu d’instructions est
optimal pour faire monter la fréquence sans trop de difficulté.

FSO Pr. Khadija LAAROUSSI 65


Microprocesseur
Caractéristiques
◼ Famille des microprocesseurs: Représente l’ensemble des processeurs
qui peuvent exécuter le même jeu d’instruction. Il existe de nombreuses
familles de microprocesseurs, les principales sont :
- Famille x86 : C’est la famille la plus connue, elle est développé
principalement par Intel célèbre fabricant de microprocesseur. Il existe aussi
AMD, une famille concurrente de Intel.
- Famille des PowerPC (PPC): Ces microprocesseurs sont utilisés
essentiellement par Motorola et IBM. Les dérivés du PowerPC équipent des
consoles de jeux vidéo comme la Wii, la Playstation 3 ou encore la Xbox 360.
- Famille ARM: Fabriqués par la société Acorn RISC Machines. Les
processeurs ARM sont très répandues notamment dans la téléphonie mobile.

Un mobile utilisant
un CPU ARM
FSO Pr. Khadija LAAROUSSI 66
Microprocesseur
Caractéristiques
◼ Finesse de gravure: Détermine le diamètre (en nanomètres 1 nm = 10-9
m) du plus petit fil reliant deux composantes du microprocesseur.
- Par exemple, pour Intel i7 sa finesse de gravure ≈ 10 nm.
◼ Vitesse et taille des mémoires caches: C’est une mémoire intégrée dans
le processeur et qui permet d’enregistrer temporairement des copies de
données. Le cache est caractérisé par :
- Taille ≈ quelques centaines de Ko à quelques Mo.
- Vitesse ≈ selon le type: L1, L2, L3.
◼ Largeur des données: elle est déterminée par :
- Le nombre de bits que le processeur peut traiter ensemble (c-à-d le
nombre de bits sur lequel une opération est faite).
- Le nombre de bits des bus indique le nombre de bits transférés à la fois
entre la mémoire et le processeur.
FSO Pr. Khadija LAAROUSSI 67
Microprocesseur
Caractéristiques: Exemples des CPU Intel
Date Processeur Nombre de Fréquence Finesse de Largeur des MIPS
Transistors Gravure (nm) données
1971 Intel 4004 2300 740 KHz 10 000 4 bits/4 bits bus 0,06
1978 Intel 8086 29000 de 4 à 8 MHz 3000 16 bits /16 bits bus 0,33
6 à 16 MHz (20 MHz
1982 Intel 80286 134 000 1 500 16 bits/16 bits bus 1
chez AMD)
1985 Intel 80386 275 000 16 à 40 MHz 1 500 32 bits/32 bits bus 5
2000 Pentium 4 42 000 000 1.3 à 3.8 GHz 180 à 65 32 bits/64 bits bus 1 700
2006 Core 2 Duo (Conroe) 291 000 000 2.4 GHz 65 64 bits/64 bits bus 22 000

2007 Core 2 Quad (Kentsfield) 2*291 000 000 3 GHz 65 64 bits/64 bits bus 2*22 000

2009 Intel Core i5/i7 774 000 000 3,06 GHz 45 64 bits/64 bits bus 76 383
Intel Core i3/i5/i7 3.7 à 4.7 GHz (Core
2017 ? 14 64 bits/64 bits bus ?
(Coffe Lake - 8ème Gen) i7 8700K)
Intel Core i3/i5/i7/i9
2018 ? 10
(Ice Lake - 10ème Gen)
Intel Core i3/i5/i7/i9
2019 ? 10
(Tiger Lake - 11ème Gen)

FSO Pr. Khadija LAAROUSSI 68


Microprocesseur
Caractéristiques: Exemple d’ un CPU Intel récent
Intel Core i9-9980XE Extreme Edition
Support du processeur Intel 2066
Fréquence CPU 3 GHz (4.4 GHz en mode Turbo)
Principales
Fréquence du bus DMI 8.0 GT/s
caractéristiques
Nombre de cœurs 18 (36 Threads)
Plateforme (Proc.) Intel Skylake R
Finesse de gravure 0.014 Micron (14 nm)
Architecture Cache L3 / Smart Cache 24.75Mo
Compatibilité chipset carte mère Intel X299 Express
Chipset graphique Chipset graphique Aucun
Contrôleur mémoire Contrôleur/Fréquence mémoire DDR4 2666 MHz
Technologies Instructions 64 bits Oui – EM64T
avancées Jeux d’instructions AVX2, AVX-512, SSE4.2

FSO Pr. Khadija LAAROUSSI 69


Microprocesseur
Composants
◼ Un microprocesseur est un circuit contenant les composants suivants :
- Unité de commande.
- Unité de traitement.
- Registres internes.
- Mémoire cache. Unité de traitement
- Unité d’interface de bus. Bus (Unité Arithmétique et
Logique (UAL),..)
Bus
- Bus internes.
Registres internes Unité d’interface
et mémoires caches Bus de bus

Bus Unité de Commande


Bus
(UC)

FSO Pr. Khadija LAAROUSSI 70


Microprocesseur
Composants
◼ Unité de commande (ou d’instruction):
- Appelée aussi unité de contrôle, elle permet de lire et décoder les données
(instructions) pour les envoyer à l'unité de traitement.
- Composants: le séquenceur (synchroniser l'exécution des instructions au
rythme d'une horloge), le compteur ordinal (contenant l’adresse de la prochaine
instruction à exécuter) et le registre d'instruction (contenant l'adresse de
l'instruction en cours d’exécution).
◼ Unité de traitement (ou d’exécution):
- Permet d’effectuer les tâches que lui a données l'unité de commande.
- Responsable des opérations arithmétiques et logiques (addition, soustraction
etc.)
- Composants: UAL (Calculs arithmétiques et logiques), unité de virgule
flottante (FPU) (Calculs complexes non entiers) et les deux registres d'état et
accumulateur (pour stocker les résultats temporaires).
▪ Remarque: Ces deux unités communiquent avec la mémoire principale, la première
pour lire les instructions, la seconde pour recevoir/transmettre des données binaires.
FSO Pr. Khadija LAAROUSSI 71
Microprocesseur
Composants
◼ Registres internes:
- Ce sont de petites mémoires très rapides qui stockent temporairement les
données ou les instructions et gèrent les adresses ainsi que les résultats des
opérations.
- Ils sont intégrés au processeur pour éviter l’accès à la mémoire centrale afin
d’accélérer la vitesse de traitement des programmes.
◼ Unité d’interface de bus:
- Elle permet d’assurer les liaisons entre les bus internes et les bus externes
pour échanger des informations avec l’extérieur (nécessaire au
fonctionnement du processeur).
Bus de données
Interface avec Bus d’adresses
l’extérieur
Bus de commandes
Intérieur du processeur Extérieur du processeur
FSO Pr. Khadija LAAROUSSI 72
Microprocesseur
Composants: Autres unités
◼ Unité de mémoire cache: Permet de mettre dans la mémoire cache,
qui est beaucoup plus rapide que la mémoire centrale, les
informations les plus utilisées et que le microprocesseur a besoin
fréquemment.
◼ Unités de segmentation et de pagination: permettent de traduire les
adresses logiques manipulées dans les programmes en adresses
physiques qui correspondent à des adresses réelles en mémoire.
◼ Unité de décodage: Permet de décomposer et d’analyser
l’instruction se trouvant dans le registre d’instructions, selon le code
opération, elle envoie la nature des opérations à effectuer vers l’unité
de commande (séquenceur).
◼ Unité multimédia: Permet d’Accélérer l’exécution des vidéos, son ,
graphique 3D,..
FSO Pr. Khadija LAAROUSSI 73
Microprocesseur
Support sur la carte mère
◼ La carte mère possède un emplacement (parfois plusieurs dans le cas
de cartes mères multiprocesseurs) pour accueillir le processeur,
appelé support de processeur.
◼ On distingue deux catégories de supports:
- Slot: Connecteur rectangulaire dans lequel on enfiche le processeur
verticalement.

- Socket: Connecteur carré possédant un grand nombre de petits


connecteurs sur lequel le processeur vient directement s'enficher.

FSO Pr. Khadija LAAROUSSI 74


Microprocesseur
Emplacement sur la carte mère

Socket du CPU

FSO Pr. Khadija LAAROUSSI 75


Microprocesseur
Exercice 1
1) Expliquer les caractéristiques principales d’un microprocesseur et
donner celles qui sont nécessaires pour son achat .
2) Citer des exemples des générations des microprocesseur Intel
(jusqu’à 2019). Que représente le microprocesseur Intel 8086.
3) Décrire les éléments principaux d’un microprocesseur.
4) Décrire le rôle des unités suivantes:
- Unité de commande.
- Unité de traitement.
- Unité d’interface de bus.

FSO Pr. Khadija LAAROUSSI 76


Mémoires
Rappel : Architecture Von Neumann

Unité centrale de Mémoire


traitement (CPU) Centrale
Instructions
Unité de contrôle Programmes
²

Unité arithmétique Données


Données
et logique (UAL)

Unités d’Entrées/Sorties

FSO Pr. Khadija LAAROUSSI 77


Mémoires
Définition
◼ Une mémoire est un dispositif capable d’enregistrer, de conserver
et de restituer (possible de la lire ou la récupérer par la suite) des
informations codées en binaire dans un ordinateur.
◼ Les informations peuvent être les programmes des utilisateurs, les
données, les résultats de traitement, les systèmes d’exploitation, etc.
◼ L’ensemble de ces informations peuvent être écrites ou lues:
- Lecture: Récupérer/restituer une information à partir de la
mémoire.
- Écriture: Enregistrer une nouvelle information ou modifier une
information déjà existante dans la mémoire.
◼ La mémoire peut être dans le processeur (registres), interne
(mémoire centrale) ou externe (mémoire auxiliaire).
FSO Pr. Khadija LAAROUSSI 78
Mémoires
Organisation des informations
◼ Dans les mémoires, les différents formats utilisés pour traiter
les informations sont les suivants :
- Bit: Unité de base de l’information qui est stockée sur le plus
petit élément de la mémoire appelé point mémoire.
- Octet: Groupement de 8 bits.
- Mot: Unité d’information adressable en mémoire centrale qui
varie selon les machines (8, 16, 32, 36, 48, 64, ….bits).
- Enregistrement: Unité d’information stockée en mémoire
auxiliaire.
- Fichier: Ensemble d’enregistrements.

FSO Pr. Khadija LAAROUSSI 79


Mémoires
Organisation de la mémoire
Largeur des cases mémoires : en général
un octet (8 bits) = unité d’adressage

1 2 … m-2 m-1 m Cellule mémoire

Adresse des cases 0004H 16H Case mémoire


mémoires (notée en 0003H 12H
hexadécimal)
0002H C6H
0001H 05H
0000H 3EH

Contenu d’une case


mémoire (un mot)
FSO Pr. Khadija LAAROUSSI 80
Mémoires
Organisation de la mémoire
◼ Les mémoires sont composées d’un ensemble de cases mémoires
pouvant chacune stocker une information.
◼ Chaque case mémoire possède une adresse et elle est remplie par un
mot de données qui stocke une information sur n bits.
◼ Un mot mémoire contient plusieurs cellules mémoires et une cellule
mémoire stocke un seul bit.
◼ La taille de l’adresse (le nombre de bits) dépend de la capacité de la
mémoire.
◼ Le nombre de bits d’adresses d’une mémoire définit le nombre de cases
mémoires ou le nombre de mots adressables.
◼ Avec une adresse de n bits, il est possible de référencer aux 2n cases
mémoires (espace d’adressage).
◼ Le nombre de lignes de données définit la taille de données que l’on
peut sauvegarder dans chaque case mémoire.
FSO Pr. Khadija LAAROUSSI 81
Mémoires
Organisation de la mémoire
◼ Toutes les cases d’une mémoire contiennent le même nombre de bits appelé
organisation.
◼ Exemple: Une mémoire formée de 96 bits peut avoir les trois organisations
suivantes (en terme d'adressage):

6 mots de 16 bits

8 mots de 12 bits

12 mots de 8 bits
FSO Pr. Khadija LAAROUSSI 82
Mémoires
Caractéristiques
◼ Capacité: Représente la quantité d’informations mémorisable dans une
mémoire. Elle est calculée par la formule suivante :
𝑪 = 𝟐𝑵𝒂 × 𝑵𝒅 - Na : Nombre de bits (lignes ou fils) d’adresses.
- Nd : Nombre de bits (lignes ou fils) de données.
▪ Exemple: Soit une mémoire où :
Na = 3 fils => 23 (adresses ou mots)
C = 23 × 8 = 64 bits
Nd = 8 fils => 8 bits / mot
▪ La capacité peut s’exprimer en bits ou en :
- Octet : 1 octet = 8 bits
- Kilo-octet (Ko) : 1 ko = 1024 octets = 210 octets
- Méga-octet (Mo) : 1 Mo = 1024 Ko = 220 octets
- Giga-octet (Go) : 1 Go = 1024 Mo = 230 octets
- Téra-octet (To) : 1 To = 1024 Go = 240 octets
- Péta-octet (Po) : 1 Po = 1024 To = 250 octets
- Exa-octet (Eo) : 1 Eo = 1024 Po = 260 octets
- Zetta-octet (Zo) : 1 Zo = 1024 Eo = 270 octets
- Yotta-octet (Yo) : 1 Yo = 1024 Zo = 280 octets
FSO Pr. Khadija LAAROUSSI 83
Mémoires
Caractéristiques
◼ Volatilité: elle caractérise la permanence ou non des informations
dans la mémoire. On distingue deux catégories:
- Mémoire volatile: son contenu disparaît ou est effacé lorsqu’on
éteint ou on redémarre l’ordinateur.
- Mémoire non volatile: elle conserve les informations même si
l’ordinateur est éteint ou a été redémarré.
◼ Temps d’accès: représente le temps qui s'écoule entre l'instant où a
été lancée une opération de lecture/écriture en mémoire et l'instant où
la première information est disponible sur le bus de données.
◼ Temps de cycle (ou cycle mémoire): temps minimal entre deux accès
successifs à la mémoire lecture/écriture.
◼ Débit: représente le nombre maximum d'informations lues ou écrites
par seconde.
FSO Pr. Khadija LAAROUSSI 84
Mémoires
Caractéristiques
▪ Chronogramme d’un cycle de lecture : 𝑹/𝑾=1

Données
accessibles

Temps d’accès

Temps de cycle

◼ Remarque: Le temps de cycle est toujours supérieur au temps d’accès car


on a besoin d’opérations supplémentaires entre 2 accès (rafraîchissement,
synchronisation, ...).
FSO Pr. Khadija LAAROUSSI 85
Mémoires
Structure générale du mémoire

n lignes p lignes de données


d’adresses

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’opération que l’on effectue (lecture/écriture, si 𝑅/𝑊=1 alors lecture sinon écriture).
- Une entrée de sélection 𝑪𝑺 (Chip Select est une broche de sélection de la mémoire)
qui permet de sélectionner le boîtier dans lequel on va faire un accès lecture/écriture.
◼ Remarque: Le nombre de lignes d’adresses dépend de la capacité de la mémoire, en
général avec n lignes d’adresses on peut adresser 2n cases mémoire.
FSO Pr. Khadija LAAROUSSI 86
Mémoires
Types d’accès
L’accès aux mémoires est réalisé par les différents types suivants:
- Accès séquentiel: Pour accéder à une information on doit parcourir
toutes les informations précédentes (accès lent). (Exemple: Secteur
d’un disque).
- Accès direct: Accéder directement à une information par son
adresse. (Exemples: mémoire centrale, cylindre d’un disque et
registres).
- Accès par le contenu: Accéder à une information de façon
simultanée sur toutes les positions de la mémoire (Exemple:
Mémoire cache).
- Accès semi-séquentiel: C’est un accès intermédiaire entre séquentiel
et direct. Exemple: Disque dur (Accès direct au cylindre, ensuite
accès séquentiel au secteur sur un cylindre).
FSO Pr. Khadija LAAROUSSI 87
Mémoires
Types et hiérarchie
◼ Types
- Mémoire cache.
- Mémoire centrale.
- Mémoire auxiliaire.
◼ Hiérarchie
Registre
Rapidité

Capacité
Cache
Mémoire centrale
Mémoire auxiliaire
Registre Cache Mémoire centrale Disque dur
Capacités typiques < Ko Mo Go > To
Temps d'accès (ns) 1-5 10 - 12 10 - 400 > 1000

FSO Pr. Khadija LAAROUSSI 88


Mémoires
Mémoire centrale: Définition
◼ La mémoire centrale ou principale est une unité de stockage temporaire
qui contient les instructions et les données des programmes en cours
d’exécution.
◼ Elle est considérée comme un grand tableau où on peut mettre les données
en cours d’utilisation.

◼ Elle est divisée en deux grandes familles:


Mémoire vive RAM Mémoire morte ROM

FSO Pr. Khadija LAAROUSSI 89


Mémoires
Mémoires vives RAM
◼ Mémoire vive RAM (pour Random Access Memory ou
mémoire à accès aléatoire) :
- Sert au stockage temporaire de données lors de l'exécution
d'un programme.
- Elle est accessible en Lecture/Écriture: on peut lire ou écrire
des données dedans.
- Mémoire volatile: les données sont perdues à la mise hors
tension.
◼ Il existe deux types de mémoires RAM :
- Mémoires statiques SRAM (Static RAM ).
- Mémoires dynamiques DRAM (Dynamic RAM ).
FSO Pr. Khadija LAAROUSSI 90
Mémoires
RAM: Mémoires statiques (SRAM)
◼ Les mémoires SRAM utilisent des bascules pour mémoriser les données.
Chaque bit mémoire est composé d'une bascule et chaque bascule contient entre
4 et 6 transistors.
◼ Une bascule est un dispositif (circuit logique séquentiel) doté d’une ou plusieurs
entrées et d’une ou deux sorties (0 ou 1). Elle permet de mémoriser une
information sur un seul bit.
◼ La sortie dans une bascule maintient son état même après disparition de son
signal de commande.

Bascule pour un bit

Une cellule mémoire SRAM: Circuit alimenté = Bit sauvegardée


FSO Pr. Khadija LAAROUSSI 91
Mémoires
RAM: Mémoires dynamiques (DRAM)
◼ Les mémoires dynamiques DRAM sont composées d’une matrice de
cellules.
◼ Chaque cellule mémoire contenant un condensateur (maintenir l'état
du bit: chargé = 1, déchargé = 0) et un transistor (récupérer ou
changer l'état du condensateur).

Une cellule mémoire DRAM: Condensateur chargé = Bit sauvegardé


FSO Pr. Khadija LAAROUSSI 92
Mémoires
RAM: Mémoires dynamiques (DRAM)
◼ Dans les mémoires DRAM, l'information est mémorisée sous la forme d'une
charge électrique stockée dans un condensateur.
◼ Un transistor est un dispositif semi-conducteur qui permet de contrôler un
courant ou une tension.
◼ Lorsque le transistor laisse passer le courant, le condensateur emmagasine
une charge d’électrons mais pour cela, il doit être alimenté continuellement
en électricité ou rafraîchi.
◼ Ces transistors sont rangés sous forme d’une matrice où on accède à une
case mémoire par une ligne et une colonne.

FSO Pr. Khadija LAAROUSSI 93


Mémoires
RAM: Comparaison SRAM vs DRAM
SRAM DRAM
- Nécessite plus de transistors que
- Nécessite un mécanisme de
DRAM. rafraîchissement à un intervalle de
- Plus chère. temps régulier (en nanosecondes)
- Moins de capacité que DRAM. pour garder les données.
- Plus rapide (6 à 25 ns de temps
- Bon marché.
d'accès) - Plus lente.
- Faible consommation. - Forte consommation (à cause du
mécanisme de rafraîchissement).
 Privilégiée pour créer des  Utilisée pour construire la
mémoires caches et des mémoire principale.
registres.

FSO Pr. Khadija LAAROUSSI 94


Mémoires
Stockage des informations en mémoire
◼ Dans la mémoire, on peut
Emplacement
représenter un entier positif x = 11
12
sur 8 bits comme suit: 11

x = (11)10 = (1011)2 10
9
= (00001011)2 8

7
◼ D’où, x est stocké à l’adresse 1. 6

Adresse 1

Bit de poids fort Bit de poids faible


FSO Pr. Khadija LAAROUSSI 95
Mémoires
Stockage des informations en mémoire
Emplacement
◼ Si x = 315, on doit remarquer que x
dépasse 255.
◼ D’où, on va stocker x sur plusieurs
emplacements mémoire consécutives.
◼ En effet:
x = (315)10 = (100111011)2
= 00000001 00111011
◼ Il faut donc deux emplacements pour
stocker x sur 8 bits. 00000001
x
00111011

◼ Remarque: Pour stocker des entiers négatifs dans la mémoire on utilise la


notation en complément à 2 du nombre.

FSO Pr. Khadija LAAROUSSI 96


Mémoires
Mémoires mortes ROM
◼ Mémoire morte ROM (pour Read Only Memory ou mémoire
à lecture seule) :
- est un support permanent et non effaçable pour la
conservation des informations de démarrage de l’ordinateur et
les procédures d’entrée/sortie.
- elle est accessible en lecture seule: son contenu ne peut pas
être modifié par l’utilisateur. L’écriture se fait soit lors de la
fabrication ou nécessite un matériel spécialisé.
- c’est une mémoire non volatile: elle conserve les informations
même si l’ordinateur est éteint ou a été redémarré.

FSO Pr. Khadija LAAROUSSI 97


Mémoires
Mémoires mortes ROM : Types
◼ Il existe plusieurs types de ROM, nous pouvons citer :
- ROM: Contenu est défini lors de la fabrication (programmée
en usine).
- PROM (Programmable ROM): sont programmables une
seule fois par l’utilisateur.
- EPROM (Erasable Programmable ROM): sont effaçables en
plaçant la mémoire dans une machine spéciale et
programmable.
- EEPROM (Electrically Erasable Programmable ROM): sont
effaçables électriquement et programmables.

FSO Pr. Khadija LAAROUSSI 98


Mémoires
Mémoire cache: Comparaison avec l’être humain
Personne Bureau Bibliothèque

Mémoire Mémoire
Microprocesseur
cache centrale

FSO Pr. Khadija LAAROUSSI 99


Mémoires
Mémoire cache: Définition
◼ La mémoire cache est une zone de mémoire dans laquelle sont copiés
les éléments (Données + Instructions) qui seront nécessaires à
l’exécution des programmes avant qu'ils ne soient demandés par le
processeur dans le but d’augmenter la vitesse d’accès.
◼ C’est une mémoire de petite taille, plus rapide que la RAM mais elle
est très chère.

Mémoire Mémoire
Processeur Bus local ou BSB
centrale cache

Bus mémoire

FSO Pr. Khadija LAAROUSSI 100


Mémoires
Mémoire cache: Types
Les ordinateurs récents possèdent plusieurs niveaux de mémoire cache :
◼ L1 premier niveau: intégrée directement dans le processeur et dont la
taille varie de 16 Ko à 128 Ko. Le cache L1 est ultra-rapide et son temps
d'accès est de l'ordre de la nanoseconde.
◼ L2 second niveau: située au niveau du boîtier contenant le processeur (dans
la puce) et dont la taille varie de 256 Ko à 2 Mo. Le cache L2 a un temps
d’accès de 6 à 7 ns. Il est moins rapide que la mémoire L1.
◼ L3 troisième niveau: située au niveau de la carte mère, et dont la taille varie
de 6 à 25 Mo chez Intel et 32 Mo chez AMD. Le cache L3 est aujourd’hui
intégré directement dans le CPU.

FSO Pr. Khadija LAAROUSSI 101


Mémoires
Mémoire cache: Principe de fonctionnement
◼ Son principe de fonctionnement est comme suit :
1. Le microprocesseur demande une information au cache.
2. Le cache vérifie s’il possède cette information:
- S’il la possède, il la retransmet au microprocesseur. On parle
alors de succès de cache.
- S’il ne la possède pas, il la demande à la mémoire principale.
On parle alors de défaut de cache.
3. Le microprocesseur traite la demande et renvoie la réponse au
cache.
4. Le cache la stocke pour une utilisation ultérieure et la
retransmet au microprocesseur au besoin.

FSO Pr. Khadija LAAROUSSI 102


Mémoires
Mémoire cache: Principe de fonctionnement
Microprocesseur 1

Unité de Unité de Mémoire Mémoire


traitement commande cache centrale

2
Succès de cache

Microprocesseur 1 2

Unité de Unité de Mémoire Mémoire


traitement commande cache centrale

4 3
Défaut de cache
FSO Pr. Khadija LAAROUSSI 103
Mémoires
Mémoire cache: Principe de fonctionnement
▪ Exemple : Recherche d’une instruction 𝑿𝒏 dans le cache.
2) Recherche de 𝑿𝒏 dans le
cache : défaut de cache
𝑿𝟒
𝑿𝟏
Mémoire
Microprocesseur 𝑿𝒏−𝟐 centrale

1) Microprocesseur 𝑿𝒏−𝟏 3) Extraction de 𝑿𝒏 de


demande 𝑿𝒏 au cache la mémoire et insertion
𝑿𝟓
dans le cache
𝑿𝒏
𝑿𝟑

Mémoire cache
FSO Pr. Khadija LAAROUSSI 104
Mémoires
Mémoires auxiliaires: Définition
◼ Les mémoires auxiliaires, appelées aussi mémoires secondaires
ou mémoires de masse, sont des mémoires permettant le stockage
permanent d’un très grand nombre d’informations.
◼ Une mémoire auxiliaire est caractérisée par un temps d'accès
plus lent que de la mémoire centrale, mais son coût de
fabrication est bien plus bas.

FSO Pr. Khadija LAAROUSSI 105


Mémoires
Mémoires auxiliaires: Types
◼ Selon les technologies utilisées, on distingue les mémoires suivantes :
▪ Disques magnétiques: Disque dur, disquette.
- Technologie magnétique.
- Taille: 1 TB (disque dur) et 1.4 MB (disquette).
- Lecture/Écriture.
▪ Disques optiques: CD-ROM, DVD-ROM, Blu-Ray.
- Technologie optique.
- Taille: 780 MB (CD-ROM) et 4 GB (DVD).
- Lecture seulement / Gravable une ou plusieurs fois.
▪ Mémoires flash: Clé USB, carte SD, disque SSD.
- Technologie semi-conducteurs réinscriptible.
- Taille: 1 GO à plus que 10 GO
- Lecture / Écriture.

FSO Pr. Khadija LAAROUSSI 106


Mémoires
Mémoires auxiliaires: Emplacement sur la carte mère

RAM

Lecteur disquette Disque dur et


lecteur CD-ROM
FSO Pr. Khadija LAAROUSSI 107
Mémoires
Exercice 2:
1) Citer les caractéristiques principales des mémoires et donner celles
qui sont nécessaires pour le bon choix.
2) Quelle sont les caractéristiques principales de la mémoire RAM et la
mémoire ROM.
3) Quelle sont les avantages et les inconvénients des mémoires SRAM
et DRAM.
4) Quel est l’intérêt d’utiliser les mémoires caches dans un ordinateur.
5) Quelle est la différence entre les mémoires caches: L1, L2 et L3.
6) Expliquer le principe de fonctionnement de la mémoire cache.
7) Pourquoi ne pas utiliser seulement le cache.
8) Pourquoi ne pas avoir un cache de grande capacité.
FSO Pr. Khadija LAAROUSSI 108
Bus
Introduction
◼ Un bus est un ensemble de fils conducteurs qui assure la transmission
des informations binaires entre le processeur, la mémoire principale et
les différents contrôleurs d’entrée/sortie.
◼ Chaque fil peut transporter un bit : il vaut 1 quand il est chargé et 0
quand il ne l’est pas. Par exemple, un bus qui contient 8 fils électriques,
peut transmettre 8 bits, c’est à dire un octet.

Mémoire Interface
Processeur
principale E/S

FSO Pr. Khadija LAAROUSSI 109


Bus
Introduction
◼ Généralement un bus :
- Gravé dans la carte mère.
- Relie les éléments de l'ordinateur par des connecteurs (slots).
- Peut être utilisé par toutes les unités qui y sont connectées, mais jamais par
plus de deux d'entre elles en même temps.
- Nécessite un circuit d’arbitrage, appelé contrôleur de bus, pour organiser
l’accès multiples par les connecteurs.

FSO Pr. Khadija LAAROUSSI 110


Bus
Types
◼ Un bus permet de véhiculer des signaux correspondant fondamentalement à
trois types d'informations: les données, les adresses et les commandes.
◼ On distingue trois types de bus:
▪ Bus de données (Bidirectionnel): Permet de circuler les instructions en
provenance ou à destination du processeur.
- Lors d’une lecture, c’est la mémoire qui envoie un mot sur le bus (le
contenu de l’emplacement demandé).
- Lors d’une écriture, c’est le microprocesseur qui envoie la donnée.
▪ Bus d’adresse (Unidirectionnel): Permet de déterminer l’emplacement
(case mémoire) d'un périphérique ou d'une donnée en mémoire. Seul le
processeur envoie des adresses.
▪ Bus de contrôle ou de commandes (Bidirectionnel): Transporte les
ordres de synchronisation de l’unité de commande vers tous les
composants matériels et transporte les signaux de réponse de ces derniers.
FSO Pr. Khadija LAAROUSSI 111
Bus
Types

FSO Pr. Khadija LAAROUSSI 112


Bus
Caractéristiques
◼ Largeur: Représente le nombre de fils que le bus contient (c-à-d le
nombre des bits transmis en parallèle).
- Plus un bus est plus large, plus il peut transporter de bits en un seul
transport.
- Exemple: Un bus de largeur 8 bits qui transmet le nombre binaire
(01010110)2 = (86)10, où les traits noirs correspondent aux fils non
chargés et les traits jaunes aux fils chargés.

FSO Pr. Khadija LAAROUSSI 113


Bus
Caractéristiques
Remarques:
◼ Pour transporter une donnée avec un bus de données de largeur plus large,
on a besoin d’un seul transport (accès mémoire). Mais avec un bus de
données moins large, il faut plusieurs transports selon la taille de la
donnée.
◼ Pour transporter une adresse, il faut le faire en une seule fois. Il est donc
totalement impossible de transporter une adresse plus grande que le bus
d’adresse. D’où, le nombre d’emplacements mémoire utilisables est limité
par la largeur du bus d’adresse.
◼ On peut déduire les deux résultats suivants :
- La largeur du bus d’adresse influe sur la capacité d’adressage, c’est à
dire la quantité de mémoire utilisable par l’ordinateur.
- La largeur du bus de données influe sur la vitesse de l’ordinateur. Plus il
est large, moins de transports sont nécessaires pour transmettre les données.
FSO Pr. Khadija LAAROUSSI 114
Bus
Caractéristiques
◼ Fréquence: C’est le nombre de bits envoyés ou reçus par fil par
seconde (nombre de transferts), elle est exprimée en hertz. On parle de
cycle pour désigner chaque envoi ou réception de données.
◼ Débit: C’est la quantité de données qu’il peut transporter par unité de
temps.
- Le débit maximal du bus (ou taux de transfert maximal) est calculé en
multipliant sa largeur par sa fréquence. Il est exprimé en Go/s ou Mo/s.
- Exemple: Calcul du débit (taux de transfert) d’un bus d’une largeur de
16 bits, cadencé à une fréquence de 133 MHz.
Taux de transfert = fréquence × largeur
= 16 × 133 × 106 = 2128×106 bits/s,
= 2128 × 106 / 8 = 266 × 106 octets/s,
- D’où, le taux de transfert est 266 Mo/s.
FSO Pr. Khadija LAAROUSSI 115
Bus
Caractéristiques
◼ Mode de transmission (Série/parallèle): Une ou plusieurs lignes
en parallèle.
Bus série

Les bits transitent les uns à la suite des autres

Largeur : 1
Bus parallèle

Les bits transitent en parallèle


Largeur : 4
FSO Pr. Khadija LAAROUSSI 116
Bus
Types des Bus
Il existe différents types des bus, nous pouvons citer :
◼ Bus processeur (ou bus système)
- Bus FSB (Front Side Bus) qui relie le processeur au pont nord et qui gère
les échanges avec les périphériques rapides proches du CPU (RAM).
- Bus BSB (Back Side Bus) qui relie le processeur et les mémoires caches
(caches L2 et L3).
◼ Bus reliés via le chipset northbridge (ou bus locaux)
- Bus mémoire.
- Bus périphériques graphiques: AGP (Accelerated Graphic Port), PCIe
(Peripheral Component Interconnect Express), VLB (Vesa Local Bus).
- Bus entre les deux chipset northbridge et southbridge: PCI.
◼ Bus reliés via le chipset southbridge (ou bus d’entreés/sorties)
- IDE (Integrate Drive Electronique), SATA (Serial Advanced Technology
Attachment), USB (Universal Serial Bus), Firewire, etc.

FSO Pr. Khadija LAAROUSSI 117


Bus
Types des Bus

FSO Pr. Khadija LAAROUSSI 118


Bus
Principe du fonctionnement: Exemple
▪ Soit le code C suivant :
#include <stdio.h>
main(){
int x = 1, y = 5, somme;
somme = x + y;
printf("%d", somme) ;
}
▪ Premièrement, le processeur envoie 1 à la mémoire via le bus de
données. Il envoie aussi l’adresse de x (supposons 1090) via le bus
d’adresse, pour indiquer à la mémoire où il veut que 1 sera stocké.
▪ De même, il va envoyer 5 et l’adresse de y (supposons 1230) et
l’adresse de somme (supposons 1500).
FSO Pr. Khadija LAAROUSSI 119
Bus
Principe du fonctionnement: Exemple
◼ Les étapes principales qui expliquent ce qui se passe entre le processeur, la
mémoire et les bus en exécutant le code C sont :
- Le processeur envoie l’adresse de x qui est 1090 à la mémoire via le bus
d’adresse;
- La mémoire envoie au processeur le nombre situé à l’adresse reçue, via le
bus de données, donc le processeur reçoit le nombre 1;
- À nouveau, le processeur envoie à la mémoire l’adresse de y qui est 1230;
- La mémoire envoie le nombre situé à l’adresse reçue au processeur, en
utilisant le bus de données, donc le processeur reçoit le nombre 5;
- Le processeur fait le calcul x + y;
- Le processeur envoie le résultat à la mémoire via le bus de données. Il
envoie aussi l’adresse 1500 via le bus d’adresse, pour indiquer à la
mémoire où il veut que le résultat sera stocké.
- L’emplacement mémoire à l’adresse 1500 contient donc le résultat 6.
FSO Pr. Khadija LAAROUSSI 120
Bus
Exercice 3:
1) Décrire les caractéristiques principales des bus.
2) Soient deux mémoires avec un bus d’adresse de 22 bits chacune, l’une
avec des mots mémoires de 8 bits, l’autre de 32 bits, donner pour chacune
de ces mémoires :
- Le nombre de mots adressables (ou cases mémoires).
- En décimal, la plus haute adresse possible.
- La taille en octets de ces deux mémoires.
1) Soit un processeur de 16 bits avec une capacité d’adressage de 1 Mo avec
un alignement à l’octet et dont chaque mot est adressable séparément.
Quelle sont les tailles des bus de données et d’adresses de ce processeur.
3) Expliquer les expressions suivantes :
- La largeur du bus de données influe sur la vitesse de l’ordinateur.
- La largeur du bus d’adresses influe sur la capacité d’adressage.

FSO Pr. Khadija LAAROUSSI 121


Carte mère
Définition
◼ La carte mère (en anglais Motherboard) est la carte principale d'un
ordinateur qui assure la connexion physique de différents composants
d’un ordinateur (processeur, mémoire, carte d'entrées/sorties, etc.) par
l’intermédiaire de différents bus.
◼ Elle regroupe les circuits principaux suivants:
- Le support de toutes les interconnexions entre circuits intégrés (les bus
et l’alimentation de tous les composants) .
- Les connecteurs pour les cartes optionnelles (PCI, PCI Express, etc.) et
les interfaces pour les périphériques internes (carte son ou interface
réseau) ou externes (USB, HDMI, etc.) .
- Le chipset (pont nord et sud) et tous les éléments intégrés (carte
graphique, carte son, etc.).
- Les circuits connectables : le microprocesseur, la mémoire centrale et
toutes les cartes optionnelles (carte graphique, modem, etc.).
FSO Pr. Khadija LAAROUSSI 122
Carte mère
Composants
Port série PS2 Ports parallèle LPT
Ports USB

Connecteurs PCI: Connecteur


Carte son, Carte d’alimentation ATX
réseau

Socket du processeur
Connecteur AGP
Carte graphique Chipset Nord

Chipset Sud
Slots mémoire

Bios

Pile CMOS Ports lecteur de disquette


Connecteurs IDE
Disque dur, lecteur CD/DVD, graveur CD.

FSO Pr. Khadija LAAROUSSI 123


Carte mère
Caractéristiques

Connecteurs d’extensions Norme ou Format


(slots) AT, ATX, ITX, BTX,
ISA, PCI, PCI Express, AGP DTX

Support du processeur
Connecteurs de stockage AM3+, LGA, Socket A
Caractéristiques
IDE, Floppy, SATA

Cartes d’extensions intégrées Connecteurs d’Entrés/Sorties


Carte Son, Carte Graphique, USB, VGA, HDMI
Carte réseau Chipset
Ponts Nord et Sud

FSO Pr. Khadija LAAROUSSI 124


Carte mère
Chipset
◼ Un chipset est une interface d’entrée/sortie chargée principalement de:
- Assurer la gestion de données sur la carte mère.
- Assurer la gestion de la communication avec le processeur.
- Relier les bus existants (ISA, PCI, AGP, etc.) sur la carte mère.
◼ Il est souvent décomposé en deux composants:
- Pont Nord (Northbridge) s’occupe d’interfacer le microprocesseur avec les
périphériques rapides (mémoire principale et carte graphique) nécessitant une
bande passante élevée.
- Pont Sud (Southbridge) s’occupe d’interfacer le microprocesseur avec les
périphériques plus lents (disque dur, CD-ROM, lecteur de CD/DVD, etc.).
◼ Exemples :
- Les chipsets de la famille 845, sont prévues pour les processeurs Pentium 4.
- Les chipsets de la série 300 (Z370, H310, B360, B365, H370) sont prévues pour
accompagner les processeurs Coffee Lake (8ème génération).
- Les chipsets de la série 400 (Z490, H410, B460, H470) sont prévues pour
accompagner les processeurs Comet Lake (10ème génération).
FSO Pr. Khadija LAAROUSSI 125
Carte mère
Chipset Processeur

Bus processeur Mémoire cache

Chipset
Périphérique
Bus AGP Chipset 1 Bus mémoire RAM
graphique
NorthBridge

BUS PCI

Ports IDE
Hard Disk USB
CD-ROM Chipset 2
SouthBridge
Audio/Modem/
Clavier/souris
Réseau

BUS PCI
FSO Pr. Khadija LAAROUSSI 126
Carte mère
Chipset: Emplacement sur la carte mère

Chipset Nord

Chipset Sud

Bios

FSO Pr. Khadija LAAROUSSI 127


Entrées/Sorties
Rappel : Architecture Von Neumann
Unité centrale de Mémoire
traitement (CPU) Centrale
Instructions
Unité de contrôle Programmes
²

Unité arithmétique Données


Données
et logique (UAL)

Unités d’Entrées/Sorties
Tout transfert de données entre la mémoire et les périphériques doit passer
par l’unité d’E/S.
FSO Pr. Khadija LAAROUSSI 128
Entrées/Sorties
Introduction
◼ Les Entrées/Sorties (E/S, Input/Output en anglais) désigne
l’ensemble des transferts de données qui permettent au
microprocesseur et à la mémoire de communiquer avec le monde
extérieur.
- Une entrée est une donnée (information) allant du monde extérieur
vers le microprocesseur.
- Une sortie est une donnée (information) allant du microprocesseur
vers le monde extérieur.
◼ Un périphérique est un dispositif matériel qui interagit avec le
processeur et la mémoire.
◼ Il permet d’assurer les échanges d’informations en entrée et en
sortie et de stocker de manière permanente des informations.

FSO Pr. Khadija LAAROUSSI 129


Entrées/Sorties
Types de périphériques
◼ On peut classer les périphériques en trois types :
- Périphériques d’entrée: Servent à obtenir des informations pour le
système informatique. Exemples : le clavier (frappe de texte), la souris
(pointage), le scanner (numérisation de documents papier), etc.
- Périphériques de sortie: Servent à faire sortir des informations du système
informatique. Exemples: l’écran, l’imprimante, le haut-parleur, le
projecteur, etc.
- Périphériques d’entrée/sortie: Opèrent aussi bien en écriture qu’en
lecture. Par exemple, un disque dur, un lecteur/enregistreur de CD-ROM,
une clé USB, CD-ROM, DVD-ROM, Blu-Ray, carte SD, modem, etc.
◼ Remarque: Certains périphériques (comme le disque dur, la carte réseau, la
carte graphique) sont branchés à l’intérieur de l’ordinateur, alors que
d’autres (comme le clavier, l’écran, la souris) sont branchés sur des
interfaces externes de l’ordinateur.
FSO Pr. Khadija LAAROUSSI 130
Entrées/Sorties
Types de périphériques: Exemples

Lecteur CD/DVD Scanner Web Cam Microphone

Tablette graphique Carte graphique Carte son Carte réseau

Souris Clavier Imprimante Ecran

FSO Pr. Khadija LAAROUSSI 131


Entrées/Sorties
Périphériques: Ports
◼ Les ports (ou connecteurs) sont utilisés pour connecter les
périphériques à l’unité centrale. Ces ports servent à faire transiter les
instructions et les données entre l'ordinateur et ses périphériques.

Audio
PS2

FSO Pr. Khadija LAAROUSSI 132


Entrées/Sorties
Contrôleur d’entrées/sorties
◼ Un périphérique se décompose habituellement en deux parties
modulaires:
- La première est le périphérique lui-même que l’on appelle
composant physique.
- La seconde, électronique, est appelée contrôleur de périphérique.
◼ Les contrôleurs de périphériques sont des circuits électroniques
conçus spécialement pour gérer ces périphériques.
◼ Les contrôleurs lisent les commandes envoyées par le processeur, les
interpréter et piloter le périphérique de façon à faire ce qui est demandé.
◼ Un contrôleur d’entrée-sortie contient quatre types de registre :
- Registre de données.
- Registre de contrôle.
- Registre d’état.
- Registre de commande.
FSO Pr. Khadija LAAROUSSI 133
Entrées/Sorties
Contrôleur d’entrées/sorties
◼ En général, les périphériques ont des modes de fonctionnement variés et ils
ont souvent leur propres formats de données.
◼ Dans la façon la plus simple de procéder, le processeur se connecte au bus et
envoie sur celui-ci l'adresse, les données et les commandes à l’entrée-sortie.
◼ Ensuite, le processeur va devoir attendre et rester connecté au bus tant que le
périphérique n'a pas traité sa demande correctement, que ce soit une lecture,
ou une écriture.
◼ Mais, cette façon de faire a un inconvénient primordial. En effet, les
périphériques sont tellement lents que le processeur passe son temps à
attendre le périphérique.
◼ Pour résoudre ce problème, on utilise les registres d’interfaçage du
contrôleur entre le processeur et les entrées-sorties.
◼ Une fois que le processeur a écrit les informations à transmettre dans ces
registres, il peut faire autre chose.
FSO Pr. Khadija LAAROUSSI 134
Entrées/Sorties
Contrôleur d’entrées/sorties
◼ Exemple d’une lecture classique :
Afin de lire un périphérique (un disque dur par exemple) :
- le processeur place dans les registres de contrôle sa commande.
- il attend ensuite l’interruption du périphérique et passe à autre chose.
- le périphérique lit ses registres de manière complètement
indépendante puisqu’il est indépendant du CPU.
- il effectue la commande en plaçant le résultat dans sa mémoire
interne.
- il effectue les validations d’usage et déclenche ensuite une
interruption.
- le processeur reprend le contrôle.
- il lira mot par mot dans un registre du périphérique le bloc complet
en effectuant une boucle.
FSO Pr. Khadija LAAROUSSI 135
Entrées/Sorties
Contrôleur d’entrées/sorties
Mémoire
Processeur
Centrale

Bus
Contrôleur Contrôleur Contrôleur
Disque dur Contrôleurs
Imprimante Vidéo

Lecteur
Disque dur
Clavier,
Imprimante Moniteur
CD-ROM
FSO Pr. Khadija LAAROUSSI 136
Entrées/Sorties
Entrées/Sorties programmées
◼ Il existe trois méthodes de gestion d’entrées-sorties :
- Les entrées-sorties programmées.
- Les entrées-sorties pilotées par les interruptions.
- Les entrées-sorties avec DMA.
◼ La technique E/S programmées consiste à laisser au processeur de traiter
toute l’opération. Le processeur gère toutes les étapes du transfert et
dialogue continuellement avec le contrôleur de périphérique pour vérifier
s’il est en état de continuer. Le processeur ne soit libéré que lorsque
l’entrée/sortie est terminée.
◼ Cette technique est simple mais elle est lente. En effet, si le périphérique
est lent, le processeur sera monopolisé pendant toute la durée de l’échange.
◼ Cette forme d’échange était la seule possible dans les premières
générations des machines.

FSO Pr. Khadija LAAROUSSI 137


Entrées/Sorties
Entrées/Sorties pilotées par les interruptions
◼ Pour éviter la monopolisation du processeur pendant toute la
durée de l’entrée/sortie, une première amélioration a été apportée
grâce au mécanisme d’interruption.
◼ Une interruption est un signal qui force le processeur à
interrompre l’exécution du programme en cours pour lancer une
procédure spéciale appelée procédure d’interruption.
◼ Cette technique est utilisée lorsque le processeur doit réagir
rapidement à un changement d’état d’un port d’entrée. Par
exemple, une entrée imprévue, une situation anormale, une
instruction illégale, etc.

FSO Pr. Khadija LAAROUSSI 138


Entrées/Sorties
Entrées/Sorties pilotées par les interruptions
▪ Le périphérique prévient le processeur par une ligne d’interruption prévue
à cet effet.
▪ Le processeur interrompt la tâche en cours.
▪ Le processeur saute au sous-programme destiné à gérer la demande
spécifique qui lui est adressée.
▪ À la fin du sous-programme, le processeur reprend l’exécution du
programme principal là où il l’avait laissé.
◼ Remarque:
- L’avantage est que avec cette technique, le microprocesseur n’a plus besoin
d’attendre après le périphérique, car c’est ce dernier qui dit au
microprocesseur quand il est prêt.
- Cependant, l’inconvénient réside toujours dans le fait que le
microprocesseur doit gérer le transfert de données lui-même. En effet, il ne
peut faire autre chose durant ce temps.
FSO Pr. Khadija LAAROUSSI 139
Entrées/Sorties
Entrées/Sorties avec DMA
◼ Une alternative aux entrées-sorties gérées par les interruptions est
l’utilisation de l’accès direct à la mémoire connue par le nom DMA
(Direct Memory Access).
◼ Le dispositif DMA est un composant matériel permettant un transfert de
données direct entre un périphérique et la mémoire ou vice-versa,
effectué sans intervention du microprocesseur.
◼ Avec cette technique, le DMA se charge entièrement du transfert de
données. Ce transfert se fait par bloc de données, à des adresses contiguës
de la mémoire et provenant habituellement du même périphérique.
◼ La tâche du processeur consiste seulement à initialiser l’échange entre le
périphérique et la mémoire en donnant l’identification du périphérique
concerné, le sens du transfert, l’adresse en mémoire centrale du premier
mot à transférer et le nombre de mots concernés par l’échange.
FSO Pr. Khadija LAAROUSSI 140
Entrées/Sorties
Entrées/Sorties avec DMA
◼ Lorsque l’échange est terminée, le DMA signale au processeur
que l’opération est terminée en déclenchant une interruption.
◼ Le DMA est utilisé dans les ordinateurs, par exemple pour le
transfert de données entre la mémoire et le disque dur, ou pour le
transfert de données vers la carte graphique ou la carte de son,
etc.
◼ Le DMA fonctionne comme une entrée-sortie programmée, sauf
que le contrôleur DMA fait le travail à la place du processeur.
◼ L’avantage est de réduire le nombre d’interruptions.

FSO Pr. Khadija LAAROUSSI 141


Chapitre 3:

Unités fonctionnelles

FSO Pr. Khadija LAAROUSSI 142


Objectifs
✓ Décrire tous les éléments des unités de commande et du
traitement.
✓ Expliquer le principe du fonctionnement de chaque unité.
✓ Expliquer les opérations nécessaires pour l’exécution des
instructions d’un programme.
✓ Comprendre à l’aide d’un exemple simple le déroulement de
l’exécution des instructions d’un programme.

FSO Pr. Khadija LAAROUSSI 143


Plan
Unité de commande
Unité de traitement
Exécution d’un programme
- Architecture : éléments physiques, impulsions.
- Cycle de base de l’exécution d’un programme.
Exemple: Étapes d’exécution d’un programme.

FSO Pr. Khadija LAAROUSSI 144


Unités fonctionnelles
Microprocesseur: Rappel
UAL
Horloge
FPU

L2 cache L1 cache
(Données)
Unité de contrôle
Bus
Unité d’instruction
Registres
L1 cache
(Instructions)
Unité des gestion
des E/S

FSO Pr. Khadija LAAROUSSI 145


Unités fonctionnelles
Unité de commande
◼ L’unité de commande ou de contrôle (UC) permet de
coordonner le travail de toutes les autres unités (UAL, mémoire,
…) et d’assurer la synchronisation de l’ensemble.
◼ Elle assure:
- La recherche (lecture) de l’instruction et des données à partir
de la mémoire.
- Le décodage de l’instruction et l’exécution de l’instruction en
cours.
- et prépare l’instruction suivante.

FSO Pr. Khadija LAAROUSSI 146


Unités fonctionnelles
Unité de commande: Composants
◼Elle est constituée des éléments suivants :
- Compteur Ordinal (CO) ou Program Counter (PC) ou Instruction
Pointer (IP): Contient l’adresse de la prochaine instruction à exécuter.
Initialement il contient l’adresse de la première instruction du programme à
exécuter. Il s’incrémente automatiquement à la fin d’une instruction pour passer
à la suivante jusqu’à la fin du programme.
- Registre d'instruction (RI): Contient l’instruction en cours d’exécution.
Chaque instruction est décodée selon son code opération grâce à un décodeur.

CO

RI Code Opération Adresse opérande

Décodeur

Séquenceur

FSO Pr. Khadija LAAROUSSI 147


Unités fonctionnelles
Unité de commande: Composants
- Séquenceur ou contrôleur: Chargé de synchroniser l'exécution des
instructions au rythme d'une horloge. Il est ainsi chargé de l’envoie des
impulsions électriques (signaux) qui activent les liaisons entre les
différents éléments de l’architecture.
- Registre d’adresse (RAD): Interface le processeur avec le bus
adresse.
- Registre de mot (RM) ou de données (RDO): Interface le processeur
avec le bus de données.
- Décodeur des instructions: Détermine l’opération qui doit être
effectuée.
- Horloge: Synchronise toutes les actions de l’ordinateur.

FSO Pr. Khadija LAAROUSSI 148


Unités fonctionnelles
Unité de commande: Décodeur des instructions
◼ C’est un circuit qui permet de décoder une instruction pour
déterminer le type d’opération à effectuer (addition, soustraction,
etc.) et aussi les adresses des opérandes nécessaires à l’opération.
◼ Le décodeur des instructions se trouve à l’entrée du séquenceur.
◼ Le décodeur est composé de deux parties:
- Décodeur d'opération: Permet d'identifier l'opération à effectuer.
- Décodeur d'adresse: Permet de retrouver les opérandes impliquées
dans l'instruction à partir de leurs adresses.

FSO Pr. Khadija LAAROUSSI 149


Unités fonctionnelles
Unité de commande: Décodeur des instructions
◼ Une instruction est l’opération élémentaire que le processeur peut
accomplir.
◼ Les instructions et leurs opérandes (données) sont stockées dans la mémoire
principale, en vue d’être traitées par le processeur.
◼ Une instruction est composée de deux parties:
- Le code opération: représentant l’action que le processeur doit accomplir.
- Le code opérande: définissant les paramètres de l’action. Il dépend de
l’opération et il peut s’agir d’une donnée ou bien d’une adresse mémoire.

Code opération Opérande

◼ Les données sont souvent exprimées en hexadécimal.


◼ Remarque: Le décodeur des instructions sert à décoder la partie code
opération de l’instruction.
FSO Pr. Khadija LAAROUSSI 150
Unités fonctionnelles
Unité de commande: Horloge
◼ Le processeur est cadencé à une horloge interne qui envoie des impulsions,
appelées « top » qui permettent à l’ensemble des composantes de se
synchroniser.
◼ La fréquence d’horloge, en Hertz (Hz), (appelée également cycle) correspond
au nombre de top (impulsions) par second.
◼ Plus la fréquence est élevée plus le processeur est rapide.
◼ Par exemple, un ordinateur à 200 MHz possède une horloge envoyant 200 000
000 de battements par seconde.
◼ À chaque top d’horloge, le processeur exécute une action, correspondant à une
instruction ou partie d’instruction.
h(t)
1

0
temps
Fréquence d’échantillonnage
FSO Pr. Khadija LAAROUSSI 151
Unités fonctionnelles
Unité de traitement
◼ Appelée aussi unité d’exécution, elle permet d’effectuer un ensemble
d’opérations des calculs (addition, soustraction, multiplication, …) et
logiques (ET, OU, …) demandées par l'unité de commande.
◼ Elle est constituée des éléments suivants :
- Accumulateur (ACC): C’est un registre de travail qui sert à stocker un
opérande (donnée) au début d'une opération arithmétique ou logique et le
résultat à la fin de l'opération (stockage temporaire).
- Registre d’état: Ce registre nous indique l’état du déroulement de
l’opération. Il est composé d’un ensemble de bits, appelés indicateurs
(drapeaux ou flags). Les indicateurs sont mis à jours (modifiés) après la
fin de l’exécution d’une opération dans l’UAL.
- Unité arithmétique et logique (UAL): Calculs arithmétiques et logiques.
- Unité de virgule flottante (FPU): Calculs complexes non entiers.
FSO Pr. Khadija LAAROUSSI 152
Unités fonctionnelles
Unité de traitement: Registre d’état
◼ Les principaux indicateurs utilisés sont :
- CF (Carry Flag): Indicateur de retenue, si la dernière opération a générée
une retenue (nombres non-signés) on a 𝑪𝑭 = 𝟏, sinon 𝑪𝑭 = 𝟎.
- PF (Parity Flag): Indicateur de parité, si dans les 8 bits de poids faible du
résultat de la dernière opération, le nombre de bits à 1 est pair on a 𝑷𝑭 =
𝟏, sinon 0.
- ZF (Zero Flag): Indicateur de zéro, si le résultat d’une opération
arithmétique vaut zéro 𝐙𝑭 = 𝟏 , sinon 𝐙𝑭 = 𝟎.
- SF (Sign Flag): Indicateur de signe, si la dernière opération a générée un
résultat négatif 𝐒𝑭 = 𝟏 , à 0 s’il est positif ou nul.
- OF (Overflow Flag): Indicateur de dépassement, 𝐎𝑭 = 𝟏 si le dernier
résultat a débordé de la taille du registre, sinon à 0. Il indique une condition
de débordement pour les opérations arithmétiques signées sur les entiers.
FSO Pr. Khadija LAAROUSSI 153
Unités fonctionnelles
Unité de traitement: Unité arithmétique et logique
◼ Unité Arithmétique et Logique (UAL ou ALU en anglais Arithmetic
Logical Unit): est un circuit logique qui assure le traitement des fonctions
logiques (ET, OU, comparaison, décalage, etc.) ou arithmétiques
(addition, soustraction, multiplication, etc.).

Entrée B Entrée A

Accumulateur

Commandes: type de
l’opération, à effectuer UAL Registre d’état
(+,*, -, /, or, not,…)

Sortie de l’UAL

FSO Pr. Khadija LAAROUSSI 154


Unités fonctionnelles
Unité de traitement: Unité de virgule flottante
◼ Unité de calcul en virgule flottante (FPU en anglais Floating Point
Unit): qui accomplit les calculs complexes non entiers que ne peut pas
réaliser l’unité arithmétique et logique.

FSO Pr. Khadija LAAROUSSI 155


Exécution d’un programme
L’architecture
Compteur Mémoire Centrale
Processeur Ordinal ……………

Registre adresse
LCO CCO ……………
……………

Décodeur
Accumulateur Bus d’adresses PSR
Registre d’état

Bus de commandes ……………


CRA ……………
CAD …………....

Horloge
EDA Top
UAL 18
Séquenceur
LEC ECR
Décodeur
Registre
Registre Instruction Mot
CEB
Code Adresse
opération opérande LMM EMM
CEA
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 156


Exécution d’un programme
Éléments constituant l’architecture
- Compteur Ordinal (CO).
- Bus d’adresses.
- Registre d’adresses.
- Mémoire principale.
- Registre mot (RM) ou registre de données (RDO).
- Bus de données.
- Registre Instruction (RI).
- Décodeur.
- Séquenceur (contrôleur).
- Unité arithmétique et logique (UAL).
- Registre accumulateur (ACC).
- Registre d’état.
◼ Remarque: Il y’a un autre décodeur à l’entrée de la mémoire pour décoder les
adresses provenant du compteur ordinal via le bus d’adresses et contenues dans
le registre d’adresses, afin de pouvoir trouver la donnée dans la mémoire.
FSO Pr. Khadija LAAROUSSI 157
Exécution d’un programme
Impulsions électriques de l’architecture
Les principales impulsions électriques qui commandent le déroulement d’un
programme sont:
- LCO (Lecture Compteur Ordinal): Mettre le contenu du compteur ordinal
sur le bus d’adresses.
- CCO (Chargement Compteur Ordinal): Transfère le contenu du bus
d’adresses dans le compteur ordinal.
- PSR (Pointage Sur Registre): Transfère le contenu de bus d’adresses dans
le registre adresse mémoire.
- LEC (LECture): Transfère le contenu d’une case mémoire dans le registre
mot.
- ECR (ECRiture): Transfère le contenu du registre mot dans l’emplacement
mémoire repéré par l’adresse stockée dans le registre adresse mémoire.
- LMM (Lecture Mot Mémoire): Transfère le contenu du registre mot sur le
bus de données.
FSO Pr. Khadija LAAROUSSI 158
Exécution d’un programme
Impulsions électriques de l’architecture
- EMM (Ecriture Mot Mémoire): Transfère le contenu du bus de données dans
le registre mot.
- CRI (Chargement Registre Instruction): Transfère le contenu du bus de
données dans le registre instruction.
- CAD (Chargement ADresse): Transfère la partie adresse (opérande) de
l’instruction sur le bus d’adresses.
- CRA (Chargement Registre Accumulateur): Mettre le résultat d’une opération
de l’UAL dans le registre accumulateur.
- CEA (Chargement Entrée A): Transfère le contenu du bus de données sur
l’entrée A de l’UAL (c-à-d mettre l’opérande).
- CEB (Chargement Entrée B): Transfère le contenu de l’accumulateur sur
l’entrée B de l’UAL.
- EDA (Envoi de Données Accumulateur): Copier le contenu de l’accumulateur
sur le bus de données (transfert vers la mémoire).
- ICO (Incrémentation Compteur Ordinal): Le CO est incrémenté (+1).
FSO Pr. Khadija LAAROUSSI 159
Exécution d’un programme
Cycle de base de l’exécution d’un programme

Recherche de l’instruction

Pointage vers l’instruction suivante

Exécution de l’instruction

FSO Pr. Khadija LAAROUSSI 160


Exécution d’un programme
Cycle de base de l’exécution d’un programme
◼ Phase 1: Recherche de l’instruction à exécuter
- D’abord, le compteur ordinal (CO) contient l’adresse de l’instruction à
exécuter.
- L’adresse est placée sur le bus d’adresses par l’impulsion LCO.
- Après, l’adresse passe dans le registre adresse (RAD) par l’impulsion PSR.
Ensuite, elle est décodée par le décodeur de la mémoire.
- Après, l’instruction passe de la mémoire vers le registre mot (RM) par
l’impulsion LEC.
- Après, l’instruction passe sur le bus de données par l’impulsion LMM.
- Puisqu’il s’agit d’une instruction, elle est mise dans le registre instruction
(RI) par l’impulsion CRI.
◼ Phase 2: Pointage vers l’instruction suivante
- Le CO est incrémenté de 1 pour passer à l’adresse de l’instruction suivante.
FSO Pr. Khadija LAAROUSSI 161
Exécution d’un programme
Cycle de base de l’exécution du programme
◼ Phase 3: Exécution de l’instruction
- La partie code opération du RI définit le type de l’opération à effectuer
(addition, soustraction, etc.), elle est décodée par le décodeur des instructions.
- Pour la partie adresse opérande, le séquenceur envoie les signaux de
contrôle pour aller chercher l’opérande dans la mémoire.
- Les principales impulsions électriques sont :
1. CAD pour charger l’adresse de l’opérande sur le bus d’adresses.
2. PSR pour mettre l’adresse de l’opérande dans le registre adresse.
- Après l’adresse de l’opérande est décodée par le décodeur de la mémoire :
3. LEC copie l’opérande dans le registre mot.
4. LMM met l’opérande sur le bus de données.
5. CEA charge l’opérande par l’entrée A dans l’UAL.
6. CRA va mettre cette opérande dans l’accumulateur pour attendre le
deuxième opérande, puisqu’il s’agit d’une opération d’addition.
FSO Pr. Khadija LAAROUSSI 162
Exécution d’un programme
Cycle de base de l’exécution d’un programme

Recherche de l’instruction

Pointage vers l’instruction suivante

Exécution de l’instruction

Et on recommence pour l’instruction suivante,


jusqu’à la fin du programme.
FSO Pr. Khadija LAAROUSSI 163
Étapes d’exécution d’un programme
Exemple
Programme source Code en hexadécimal
mov ax,[F800h] Assembleur 3AF800
add ax,[F810h] C6F810
mov [F820h],ax 32F820
- mov ax,[F800h] : mettre dans le registre ax le contenu de l’adresse
mémoire F800;
- add ax,[F810h] : additionner à ax le contenu de l’adresse F810;
- mov [F820h], ax : mettre le contenu de ax dans la case mémoire d’adresse
F820.
▪ Donner les étapes détaillées de l’exécution de ce programme depuis le
double click sur l’exécutable du programme.
FSO Pr. Khadija LAAROUSSI 164
Étapes d’exécution d’un programme
L’architecture
Compteur Mémoire Centrale
Processeur Ordinal ……………

Registre adresse
LCO CCO ……………
……………

Décodeur
Accumulateur Bus d’adresses PSR
Registre d’état

Bus de commandes ……………


CRA ……………
CAD …………....

Horloge
EDA Top
UAL 18
Séquenceur
LEC ECR
Décodeur
Registre
Registre Instruction Mot
CEB
LMM EMM
CEA
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 165


Étapes d’exécution d’un programme
Chargement du programme dans la mémoire
Compteur Mémoire Centrale
Processeur FB00
Ordinal
Opérandes
LCO CCO
F800 08

Registre adresse
Accumulateur F810 04
Bus d’adresses PSR F820 00
Registre d’état

Bus de commandes
CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI Mot
CEA EMM
CRI LMM
Bus de données

FSO Pr. Khadija LAAROUSSI 166


Étapes d’exécution d’un programme
Phase 1: Recherche de l’instruction 1
CO Mémoire Centrale
Processeur FB00
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB00
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI 3A F800 Mot 3AF800
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 167


Étapes d’exécution d’un programme
Phase 2: Pointage vers l’instruction suivante
Mémoire Centrale
Processeur CO FB01 ICO (+1)
LCO Opérandes
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB00
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI 3A F800 Mot 3AF800
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 168


Étapes d’exécution d’un programme
Phase 3: Exécution de l’instruction 1
CO Mémoire Centrale
Processeur FB01
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

F800
08
Registre d’état

CRA Instructions
FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820

08 Décodeur CAD
LEC ECR
CEB Registre
RI 3A F800 Mot 08
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 169


Étapes d’exécution d’un programme
Phase 1: Recherche de l’instruction 2
CO Mémoire Centrale
Processeur FB01
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB01
08
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI C6 F810 Mot C6F810
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 170


Étapes d’exécution d’un programme
Phase 2: Pointage vers l’instruction suivante
Mémoire Centrale
Processeur CO FB02 ICO (+1)
LCO Opérandes
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB00
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI 3A F800 Mot 3AF800
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 171


Étapes d’exécution d’un programme
Phase 3: Exécution de l’instruction 2
CO Mémoire Centrale
Processeur FB02
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

F810
12
08
Registre d’état

CRA Instructions
FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820

08 04 Décodeur CAD
LEC ECR
CEB Registre
RI C6 F810 Mot 04
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 172


Étapes d’exécution d’un programme
Phase 1: Recherche de l’instruction 3
CO Mémoire Centrale
Processeur FB02
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB02
12
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI 32 F820 Mot 32F820
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 173


Étapes d’exécution d’un programme
Phase 2: Pointage vers l’instruction suivante
Mémoire Centrale
Processeur CO FB03 ICO (+1)
LCO Opérandes
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 00

FB00
12
Registre d’état

CRA Instructions
CAD FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur
LEC ECR
CEB Registre
RI 32 F820 Mot 32F820
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 174


Étapes d’exécution d’un programme
Phase 3: Exécution de l’instruction 3
CO Mémoire Centrale
Processeur FB03
LCO Données
CCO
F800 08
Accumulateur F810 04
Bus d’adresses PSR F820 12

F820
12
Registre d’état

CRA Instructions
FB00 3AF800

Horloge
EDA Top
FB01 C6F810
UAL 18
Séquenceur FB02 32F820
Décodeur CAD
LEC ECR
CEB Registre
RI 32 F820 Mot 12
CEA EMM
LMM
CRI
Bus de données

FSO Pr. Khadija LAAROUSSI 175


Étapes d’exécution d’un programme
1. Chargement du programme en mémoire (partie instructions et
partie données).
2. Recherche de l’instruction 1 à exécuter :
- Le compteur ordinal contient l’adresse de la première instruction à
exécuter (FB00).
- L’adresse FB00 est placée sur le bus d’adresses par l’impulsion LCO.
Puis, elle passe dans le registre adresse par l’impulsion PSR. Ensuite, elle
est décodée par le décodeur de la mémoire.
- L’instruction (3AF800) passe de la mémoire vers le RM par l’impulsion
LEC. Après, elle passe sur le bus de données par l’impulsion LMM.
- Puisqu’il s’agit d’une instruction, elle est mise dans le registre instruction
par l’impulsion CRI.
3. Le compteur ordinal est incrémenté (FB01).
FSO Pr. Khadija LAAROUSSI 176
Étapes d’exécution d’un programme
4. Exécution de l’instruction 1 :
- La partie code opération (3A) du RI détermine qu’il s’agit d’une opération de
transfert (mov), alors elle est décodée par le décodeur des instructions.
- Pour chercher l’opérande (son adresse F800), le séquenceur envoie les signaux
de contrôle suivants CAD et PSR. Après, l’adresse de l’opérande est décodée
par le décodeur de la mémoire.
- Ensuite, l’opérande (08) passe par LEC, registre mot et LMM. Puisque c’est une
donnée, elle passera par CEA et CRA.
- L’impulsion CRA va mettre (08) dans l’accumulateur pour attendre la deuxième
opérande, puisqu’il s’agit d’une opération d’addition.
5. Recherche de l’instruction 2 :
- L’adresse de l’instruction 2 (FB01) se trouve dans CO. Cette adresse passe par
LCO, bus d’adresses et PSR. Ensuite, elle est décodée par le décodeur.
- L’instruction (C6F810) passe par LEC, registre mot, LMM, bus de données et
CRI.
FSO Pr. Khadija LAAROUSSI 177
Étapes d’exécution d’un programme
6. Le compteur ordinal est incrémenté (FB02).
7. Exécution de l’instruction 2 :
- La partie code opération (C6) définit qu’il s’agit d’une opération
d’addition (add), alors elle est décodée par le décodeur des instructions.
- Pour trouver l’opérande (son adresse F810), l’adresse passe par CAD et
PSR. Après, elle est décodée par le décodeur de la mémoire.
- Ensuite, l’opérande (04) passe par LEC, registre mot et LMM. Puisque
c’est une donnée, elle passera par CEA.
- L’opérande (08) qui est était déjà dans l’accumulateur est présentée à
l’entrée B de l’UAL par les impulsions EDA et CEB pour faire
l’addition.
- L’UAL calcule la somme et met le résultat de l’addition (12) dans
l’accumulateur par l’impulsion CRA.
FSO Pr. Khadija LAAROUSSI 178
Étapes d’exécution d’un programme
8. Recherche de l’instruction 3 :
- L’adresse de l’instruction 3 (FB02) se trouve dans CO. Cette adresse passe par
LCO, bus d’adresses, PSR et le décodage.
- L’instruction (32F820) passe par LEC, registre mot, LMM, bus de données et
CRI.
9. Le compteur ordinal est incrémenté (FB03).
10. Exécution de l’instruction 3 :
Pour l’enregistrement du résultat 12 dans l’adresse F820, il faut effectuer
les opérations suivantes:
- D’abord, l’adresse du mot à écrire F820 est mis sur le bus adresse par
l’impulsion CAD.
- Ensuite, elle est chargée dans le registre d’adresses par l’impulsion PSR.
- Le résultat 12 est mis sur le bus de données par l’impulsion EDA.
- Ensuite, il est enregistré à F820 par les impulsions EMM et ECR.
FSO Pr. Khadija LAAROUSSI 179
Plan
Partie 1: Architecture des ordinateurs
Chapitre 1:Codage des informations
Chapitre 2: Introduction à l’architecture des ordinateurs
Chapitre 3: Unités fonctionnelles

Partie 2: Langage Assembleur


Chapitre 4: Introduction au langage assembleur
Chapitre 5: Architecture Intel
Chapitre 6: Modes d’adressage et jeu d’instructions
Chapitre 7: Interruptions

FSO Pr. Khadija LAAROUSSI 180


Partie 2 : Langage Assembleur

Chapitre 4:
Introduction au Langage Assembleur

FSO Pr. Khadija LAAROUSSI 181


Objectifs
✓ Définir la programmation en assembleur.
✓ Décrire quelques langage de programmation en
assembleur.
✓ Décrire les instructions de base du langage assembleur.
✓ Décrire la bibliothèque Irvine.
✓ Discuter un exemple d’un programme en assembleur.

FSO Pr. Khadija LAAROUSSI 182


Plan
Introduction
Directives et Macros
Squelette d’un programme en assembleur
Instructions de base
- Bibliothèque Irvine
- Variables: identificateurs, types, déclaration
- Constantes
Premier programme Assembleur
- Avec la bibliothèque Irvine32
- Sans la bibliothèque Irvine32
- Compilation et exécution

FSO Pr. Khadija LAAROUSSI 183


Introduction au langage assembleur
Définition
◼ Un programme informatique est un ensemble d’opérations (une suite
d’instructions) destinées à être exécutées par un ordinateur.
◼ Une instruction dicte à l’ordinateur l’action (l’ordre) nécessaire qu’il doit
effectuer (avant de passer à l’instruction suivante). L’ordinateur lit les
instructions et les applique dans l’ordre.
◼ Exemple: Un programme avec 3 instructions :

Ordre 1 : faire ceci…

Programme Ordre 2 : … Instructions

Ordre 3 : …

FSO Pr. Khadija LAAROUSSI 184


Introduction au langage assembleur
Langage Assembleur
◼ Il existe trois catégories des langages informatiques :
- Langage de haut niveau (C, C++, Java, Python, etc.).
- Langage d’assemblage.
- Langage machine (langage de l’ordinateur).
◼ En langage haut niveau, chaque instruction correspond à une succession
d’instructions en langage assembleur.
◼ Un programme en langage évolué n’est 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.

Code source en Compilateur ou


Langage machine
langage évolué Interpréteur

FSO Pr. Khadija LAAROUSSI 185


Introduction au langage assembleur
Langage Assembleur
◼ Les deux opérations compilation et assemblage sont réalisées à partir de
logiciels spécialisés appelés compilateur et assembleur.
Langage haut niveau
(for, while, if, printf, scanf, etc.)
Compilation
Langage assembleur
(sta, Ida, cmp, mov, etc.)
Assemblage Langage machine
(0001 1101, 1111 0110, etc.)
◼ Les langages d’assemblage ou Assembleurs sont les langages de
programmation les plus proches du langage binaire.
◼ D’où l’intérêt d’étudier le langage assembleur dans l’objectif de
comprendre le fonctionnement de l’ordinateur.
FSO Pr. Khadija LAAROUSSI 186
Introduction au langage assembleur
Langage Assembleur: Hiérarchie
Programme en Pascal, C,
C++, JAVA !!!!...
?
Compilateur

Programme en
Hiérarchie Langage assembleur
de traduction
Programme en Assembleur
Langage machine
Chargeur
en Mémoire

FSO Pr. Khadija LAAROUSSI 187


Introduction au langage assembleur
Langage Assembleur: Principe
◼ La programmation en assembleur consiste à utiliser un ensemble
d’instructions appelées jeu d’instructions fixées par le constructeur
et qui sont reconnues par un microprocesseur.
◼ Ces instructions sont représentées sous forme symbolique appelées
mnémoniques définies dans un langage appelé assembleur. Par
exemple, add est le symbole mnémonique de l’instruction qui sert à
faire l’addition.
◼ L’assembleur remplace chaque mnémonique par l’instruction binaire
équivalente.
◼ Remarque: Le nombre d’instructions reconnues varie d’un
processeur à l’autre. Par exemple, pour un CPU Intel 8086, le jeu
d’instructions contient environ une centaine d’instructions.
FSO Pr. Khadija LAAROUSSI 188
Introduction au langage assembleur
Langage Assembleur
◼ Pour un même microprocesseur, plusieurs langages assembleurs sont
possibles. Ils se distinguent surtout par les directives (.data ?, .code,
... par exemple) et les macros.
◼ Parmi les logiciels assembleurs les plus connus pour la famille Intel
on trouve par exemple:
- MASM: Microsoft ASseMbler.
- TASM: Turbo ASseMbler.
- NASM: Netwide ASseMbler.
◼ Remarque: L’assembleur qui sera adapté dans ce cours est le
MASM32. On va utiliser la version qui utilise la bibliothèque
Irvine32.

FSO Pr. Khadija LAAROUSSI 189


Directives et Macros
◼ Directives
- Ce sont des ordres que l’on donne à l’Assembleur (MASM) lui-même.
On les utilise pour demander certaines choses à MASM, notamment
comment on veut qu’il assemble le programme.
- Les directives ne feront pas partie du programme en langage machine,
puisqu’elles ne sont destinées qu’à l’Assembleur et non au processeur.
- Exemple: INCLUDE Irvine32.inc est une directive qui indique à
MASM d’utiliser la bibliothèque Irvine32.
◼ Macros
- Les macros sont en réalité elles-mêmes composées d’instructions.
- Lorsqu’on utilise une macro, elle est remplacée par la suite
d’instructions préalablement préparée par les programmeurs.
- Exemple: exit est une macro pour quitter convenablement un
programme.
FSO Pr. Khadija LAAROUSSI 190
Squelette d’un programme en assembleur
Sans l’utilisation de la bibliothèque Irvine32
.386 ; Type de processeur 80386 (on pourra utilisé .486 , .586, etc.)
.model flat, stdcall ; Un seul segment de 4 Go, appel standard
; Utilisation des options: majuscule, minuscule, etc.
; Appel des librairies par le mot clé: include nom_de_ librairie.
; Déclaration des fonctions ou procédures.
.data
; Variables globales initialisées
.data?
; Variables globales non initialisées
.const
; Constantes
.code
start: ; Début du programme
; Jeu d’Instructions du microprocesseur 80386.
; Appel et code des fonctions
end start ; Fin du programme
FSO Pr. Khadija LAAROUSSI 191
Squelette d’un programme en assembleur
Sans l’utilisation de la bibliothèque Irvine32
Remarques:
➢ .model: Directive d'assembleur qui permet de déterminer plusieurs
caractéristiques importantes dans un programme : le type de mémoire, la
convention d’appel des fonctions, etc.
➢ Syntaxe: .model MemoryModel , ModelOptions
- MemoryModel spécifie le type de mémoire de votre programme. Sous
Win32, il y a seulement un type, le modèle FLAT « plat », c.à.d. un seul
segment de 4 GB.
- ModelOptions signifie l’appel standard, c'est-à-dire la façon dont sont
transmis les paramètres à la fonction. La plate-forme Win32 emploie
exclusivement STDCALL, les paramètres sont transmis de la droite vers la
gauche.
➢ « option casemap:none »: L’assembleur respecte les majuscules et
minuscules des fonctions et procedures.
FSO Pr. Khadija LAAROUSSI 192
Instructions de base
Bibliothèque Irvine
◼ La bibliothèque Irvine contient plusieurs concepts utiles pour :
- entrer des données;
- afficher des résultats;
- et effectuer plusieurs tâches qui nécessite normalement de
nombreux appels du système d’exploitation pour les effectuer.
◼ Cette bibliothèque s’appelle irvine.lib et doit être installée.
◼ La puissance de la bibliothèque Irvine réside dans ses diverses
procédures.
◼ Pour appeler une procédure, on utilise le format suivant :
call nomProcedure

FSO Pr. Khadija LAAROUSSI 193


Instructions de base
Bibliothèque Irvine: Quelques procédures
Procédure Description
Crlf Écrit un retour chariot/saut de ligne à l’écran.
Readchar Lit un seul caractère de l’entrée standard et renvoie le caractère dans le registre
AL.
Readint Lit un entier décimal signé de 32 bits à partir de l’entrée standard, en s’arrêtant
lorsque la touche Entrée est enfoncée. L’entier sera stocké dans EAX.
Readstring Lit une chaîne de caractères. Il met l’adresse du tampon d’entrée dans EDX;
Il met le nombre maximum de caractères à lire dans ECX, il remplit le tampon
par la chaîne d’entrée et définit EAX par la taille de la chaîne d’entrée.
Writechar Écrit un seul caractère à l’emplacement actuel du curseur, AL contient ce
caractère.
Writeint Écrit un nombre décimal signé de 32 bits sur la sortie standard au format
décimal, stocké en EAX.
Writestring Écrit une chaîne terminée par un caractère NULL sur la sortie standard, stocké
en EDX.
FSO Pr. Khadija LAAROUSSI 194
Instructions de base
Notion de variable
◼ Les données sont des informations nécessaires au déroulement d’un
programme. On distingue deux types de données :
- Variable : Une donnée qui change.
- Constante : Une donnée fixe.
◼ Une variable :
- est un objet dont le contenu peut être modifié par une action durant
l’exécution d’un programme.
- sert à stocker la valeur d’une donnée.
- désigne un emplacement mémoire dont le contenu peut changer au cours
d’un programme. Chaque emplacement a un numéro qui permet d'y faire
référence de façon unique : c'est l'adresse mémoire.
◼ Comme pour tous les langages de programmation, la variable doit être
déclarée avant d’être utilisée, elle est caractérisée par le nom, le type et la
valeur.
FSO Pr. Khadija LAAROUSSI 195
Instructions de base
Identificateurs des variables : Règles
◼ Le choix du nom d’une variable est soumis à quelques règles qui
varient selon le langage de programmation utilisé :
- un nom doit commencer par une lettre alphabétique.
- ne jamais commencer par un chiffre.
- doit être constitué uniquement de lettres, de chiffres et du
soulignement «_» (éviter les caractères de ponctuation et les
espaces).
- doit être différent des mots réservés du langage Assembleur (par
exemple mov, add, JMP, CMP, LOOP, Writestring, etc.).
- la longueur du nom doit être inférieure à la taille maximale
spécifiée par le langage utilisé.

FSO Pr. Khadija LAAROUSSI 196


Instructions de base
Types des variables
Type Description
BYTE 8 bits non signés
SBYTE 8 bits signés
WORD 16 bits non signés
SWORD 16 bits signés
DWORD 32 bits non signés
SDWORD 32 bits signés
QWORD 64 bits non signés
TBYTE 80 bits signés
REAL4 réel 4 bytes IEEE
REAL8 réel 8 bytes IEEE
REAL10 réel 10 bytes IEEE
FSO Pr. Khadija LAAROUSSI 197
Instructions de base
Déclaration d’une variable initialisée
◼ Toute variable utilisée dans un programme assembleur doit avoir fait
l’objet d’une déclaration préalable. La déclaration permet d’informer
l’ordinateur l’existence d’une variable.
◼ Les variables globales initialisées sont définies dans la directive «.data»
◼ Syntaxe:
.data
nom type valeur
où :
- nom est le nom de la variable.
- type est le type de la variable.
- valeur est un nombre en hexadécimale, en binaire, ou en décimal.
◼ Exemple :
a BYTE 5
b REAL4 5.22
FSO Pr. Khadija LAAROUSSI 198
Instructions de base
Déclaration d’une variable non initialisée
◼ Les variables globales non initialisées sont définies dans la
directive .data ?
◼ Syntaxe:

.data ?
nom type ?
◼ Exemple:
.data ?
a BYTE ?
b REAL4 ?

FSO Pr. Khadija LAAROUSSI 199


Instructions de base
Notion de constante
◼ Une constante est une variable dont la valeur ne change pas durant
l'exécution d’un programme. Elle est caractérisée par son nom et sa
valeur (fixe).
◼ Les constantes n’existent que lorsque le programme soit compilé
(assemblé).
◼ En assembleur, pour définir les constantes, on utilise la directive
EQU. Les constantes sont définies dans la directive « .cont ».
◼ Syntaxe:
nom EQU <expression>
◼ Exemple :
k EQU 5
mov AX, k
Ce code est équivalent à : mov AX, 5
FSO Pr. Khadija LAAROUSSI 200
Instructions de base
Déclaration des variables et des constantes
.data ; Variables globales initialisées
x BYTE 0 ; x est un octet initialisé à 0
y BYTE ‘Bonjour’, 0 ; y est une chaîne de caractères terminée par un NULL
z WORD 100 ; z est un mot initialisé à 100 (0x64)
t WORD 1, 2, 3 ; t est un tableau de trois mots initialisés à 1, 2, 3
n DWORD 0F70ABCDh ; n est un mot double initialisé à 0xF70ABCD
a DWORD 10 dup(0) ; a est un tableau de 10 valeurs initialisées à 0

.data? ; Variables globales non initialisées


r BYTE ? ; r est un octet non initialisé
p WORD 10 dup(?) ; p est un tableau de 10 mots non initialisés

.const ; Constantes
v equ 10 ; v est une variable constante égale à 10.

FSO Pr. Khadija LAAROUSSI 201


Premier programme Assembleur
Utilisation de la bibliothèque Irvine32
◼ Un code assembleur qui affiche le message ‘Bonjour’ :
INCLUDE Irvine32.inc
.data
message BYTE "Bonjour",0
.code
main PROC
mov edx,OFFSET message
call WriteString
exit
main ENDP
END main
◼ Ce code comme tout code Assembleur contient :
- des instructions.
- des directives.
- des macros.
FSO Pr. Khadija LAAROUSSI 202
Premier programme Assembleur
Sans la bibliothèque Irvine32
.386
.MODEL flat, stdcall
.STACK 4096
ExitProcess PROTO, dwExitCode : DWORD
DumpRegs PROTO
.data
message BYTE "Bonjour",0
.code
main PROC
mov edx,OFFSET message
call WriteString
INVOKE ExitProcess, 0
main ENDP
END main
◼ Remarque: Sans utiliser la bibliothèque Irvine32, le code comportera
plus d’instructions et des directives.
FSO Pr. Khadija LAAROUSSI 203
Premier programme Assembleur
Sans la procédure main PROC
◼ Le programme suivant est le même que celui du premier exemple en
utilisant la bibliothèque Irvine32 mais sans utiliser des procédures (main
PROC).
◼ Dans cet exemple, nous avons utilisé les deux labels « salut : » et « end
salut ».
INCLUDE Irvine32.inc
.data
message BYTE "Bonjour",0
.code
salut :
mov edx,OFFSET message
call WriteString
exit
end salut
FSO Pr. Khadija LAAROUSSI 204
Premier programme Assembleur
Description du programme
◼ Commentaire: On utilise le point virgule ";" pour les commentaires. Par
exemple « ; premier exemple » est un commentaire en MASM.
◼ INCLUDE Irvine32.inc: est une directive qui indique à MASM d’utiliser
la bibliothèque Irvine32. "include" en MASM32 correspond à un "#include"
en C. Les fichiers « .inc » contiennent les signatures des fonctions à utiliser.
◼ .data: est une directive indiquant à MASM que dans cette partie qu’on
déclare les variables.
◼ message BYTE "Bonjour",0:
- Il s’agit d’une définition de données. Le mot message placé en début de
ligne est un label de données (variable). Il représente l’adresse du code
ASCII du ’B’ (première lettre du mot "Bonjour").
- Le compilateur devra écrire les octets qui suivent tels qu’ils sont dans notre
code source. Il va donc écrire le code ASCII du ’B’, puis celui du ’o’, etc. Il
terminera par un NULL (c’est pourquoi on a mis un 0 à la fin).
FSO Pr. Khadija LAAROUSSI 205
Premier programme Assembleur
Description du programme
◼ .code : est une directive indiquant à MASM qu’à partir d’ici nous
commençons à écrire notre programme proprement dit.
◼ ‘main PROC’ et ‘main ENDP’ : tout le code du programme doit être
écrit entre les labels " main PROC " et " main ENDP ".
◼ mov edx,OFFSET message : est une instruction qui transfert le
message dans le registre edx.
◼ call WriteString : est un appel d’une macro qui affiche une chaîne de
caractères.
◼ exit : est une macro qui sert à quitter le programme.

FSO Pr. Khadija LAAROUSSI 206


Premier programme Assembleur
Compilation et exécution
◼ Supposons que le code source du programme est nommé :
«Bonjour.asm ». Pour la version qu’on va utiliser aux travaux pratiques, on
doit procéder comme suit :
- Copiez le fichier C:\Masm615\make32.bat dans votre répertoire de
travail.
- Lancez l’invité de commande.
- Entrez dans votre répertoire et lancez la commande de compilation
suivante :
make32 Bonjour
- Pour lancer la compilation, il ne faut pas mettre l’extension « .asm ».
- Cette commande génère plusieurs fichiers parmi lesquels on trouve
l’exécutable « Bonjour.exe ».
- Pour lancer l’exécution, il suffit de taper Bonjour suivi de la touche
« Entrée ».
FSO Pr. Khadija LAAROUSSI 207
Premier programme Assembleur
Compilation et exécution

FSO Pr. Khadija LAAROUSSI 208


Chapitre 5:

Architecture Intel

FSO Pr. Khadija LAAROUSSI 209


Objectifs
✓ Décrire tous les registres du microprocesseur Intel.
✓ Expliquer la méthode de gestion de la mémoire en mode
réel par Intel.
✓ Décrire les types d’architectures des microprocesseurs
Intel.
✓ Discuter le principe de pipeline.

FSO Pr. Khadija LAAROUSSI 210


Plan
Introduction
Registres en 8086
Registres à partir de 80386
- Registres généraux
- Registres de pointeurs et d’index
- Registres de segments
- Pointeur d’instruction
- Registre d’état: EFLAGS
Gestion de la mémoire
- Mode réel
Architecture des microprocesseurs
- Architecture CISC
- Architecture RISC
- Architecture pipeline
FSO Pr. Khadija LAAROUSSI 211
Architecture Intel
Microprocesseur Intel 8086
◼ Disponible depuis juillet 1978.
◼ Le premier microprocesseur 16 bits développé par Intel.
◼ Le premier de la famille 80×86.
◼ Constitué de 29000 transistors sur une puce de 32,7 mm2.
◼ Existe en trois versions:8086 (5MHz), 8086-2 (8MHz) et 8086-1 (10MHz).
◼ Peut fonctionner dans des systèmes mono ou bien multiprocesseurs.
◼ Caractéristiques:
- Adressage direct de 1 MO;
- 14 registres de 16 bits;
- 24 modes d’adressages;
- Opérations sur 1, 8 et 16 bits;
- Opérations arithmétiques sur des opérandes signés ou non-signés de 8 et 16
bits.
FSO Pr. Khadija LAAROUSSI 212
Architecture Intel
Registres en 8086
◼ Les registres servent à contenir temporairement des données nécessaires aux
traitements des instructions. Ils permettent de :
- Stocker des opérandes (paramètres) lors d’opérations logiques et
arithmétiques ou pour les calculs des adresses.
- Stocker des pointeurs (adresses mémoires).
◼ Un processeur contient plusieurs types de registres, le nombre de ces
registres dépend du microprocesseur utilisé.
◼ Les registres en 8086 peuvent contenir 16 bits (2 octets) et ils sont divisés
en quatre groupes :
- Registres généraux: Pour stocker les adresses et les opérandes. Par
exemple, AX, BX, CX, DX, DI, SI, SP, BP.
- Registres de segments : CS, DS, ES, SS;
- Le registre flags: Registre d’état et de contrôle.
- Le registre IP (Instruction Pointer): Il pointe sur la prochaine instruction à
exécuter.
FSO Pr. Khadija LAAROUSSI 213
Architecture Intel
Registres en 8086: Exemple du processeur 8086
15 7 0 Registres de Segment
généraux
Registres
AH AL
BH BL 15 0
CH CL CS
DH DL DS

d’adressage
SI SS

Registres
DI ES
BP PC
SP

GENERATION D’ADRESSES
&
BUS DE CONTROLE

Opérandes

Séquenceur Registre d’instruction


UAL

Registres d'état

FSO Pr. Khadija LAAROUSSI 214


Architecture Intel
Registres à partir de 80386
◼ À partir de 80386, les registres contiennent 32 bits. On utilise eax au lieu de
ax pour signifier une extension de ax.
31 16 15 8 7 0
Registres de
EAX AH AL AX = {AH et AL} segments

Registres
généraux
EBX BH BL BX = {BH et BL} CS Code Segment
ECX CH CL CX = {CH et CL} DS Data Segment
EDX DH DL DX = {DH et DL} SS Stack Segment
ESI SI Source index ES Extra Segment
EDI DI Destination index FS File Segment
EBP BP Base pointer GS General Segment
ESP SP Stack pointer 0
15

Registres d’état/contrôle Pointeur d’instruction

EFLAGS EIP

31 0 31 0

FSO Pr. Khadija LAAROUSSI 215


Architecture Intel
Registres généraux
AH AL BH BL CH CL DH DL
AX BX CX DX
EAX EBX ECX EDX
◼ Nombre de bits:
4 registres sur 32 bits, 4 registres sur 16 bits et 8 registres sur 8 bits.
◼ Noms: Appelés aussi registres de travaux et ils sont utilisés principalement
pour stocker des résultats:
- Registres Accumulateur: EAX (32 bits), AX (16 bits), AH (8 bits) et AL (8
bits).
- Registres de Base: EBX (32 bits), BX (16 bits), BH (8 bits) et BL (8 bits).
- Registre Compteur: ECX (32 bits), CX (16 bits), CH (8 bits) et CL (8 bits).
- Registre Donnée: EDX (32 bits), DX (16 bits), DH (8 bits) et DL(8 bits).
◼ Remarques:
- Les registres de 8 et 16 bits sont utilisées par les CPU 8086 et plus.
- Les registres de 32 bits sont utilisés seulement par le CPU 80386 et plus.
FSO Pr. Khadija LAAROUSSI 216
Architecture Intel
Registres généraux
◼ Utilisations:
▪ Registre d’accumulation EAX (Accumulator register): Ce registre peut
contenir les données des utilisateurs et le stockage de la valeur de retour des appels
systèmes. Il peut aussi jouer le rôle d'opérande implicite dans de nombreuses
opérations (mul, div, etc.). Dans ce cas, le résultat de l'opération est stocké dans ce
même registre.
▪ Registre de base EBX (Base register): Utilisé comme pointeur sur les données
et usuellement, ce registre contient un offset (déplacement) relatif au segment de
données permettant de repérer une information de ce segment.
▪ Registre ECX (Counter register): Utilisé comme un compteur avec les boucles
(l’instruction Loop décrémente implicitement ECX).
▪ Registre EDX (Data register): Utilisé pour les entrées/sorties, en général ce
registre peut contenir des offsets lors des opérations d'affichage ou de saisie.
(Exemple: ce registre peut contenir le numéro d’un port d'entrée/sortie pour
adresser les interfaces d'E/S).
FSO Pr. Khadija LAAROUSSI 217
Architecture Intel
Registres de pointeurs et d’index
SP BP SI DI
ESP EBP ESI EDI

◼ Nombre de bits: 4 registres sur 32 bits, 4 registres sur 16 bits.


◼ Noms:
- Pointeur de pile (Stack Pointer): ESP (32 bits) et SP (16 bits).
- Pointeur de base (Base Pointer): EBP(32 bits) et BP(16 bits).
- Source Index: ESI (32 bits) et SI (16 bits).
- Destination Index: EDI (32 bits) et DI (16 bits).
◼ Remarques:
- Les registres de pointeurs et d’index appelés aussi registres d’offset ou
d’adressage.
- Ces registres sont utilisés lors de l’adressage indirect de la mémoire
(pointeurs) et ils contiennent des adresses de cases mémoire.
FSO Pr. Khadija LAAROUSSI 218
Architecture Intel
Registres de pointeurs et d’index
◼ Utilisations:
- Registres EDI (Extended Destination Index) et ESI (Extended
Source Index): Ces deux registres sont utilisés pour les transferts
de chaînes d’octets (caractères) entre deux zones mémoire. ESI est
un pointeur source et EDI est un pointeur destination.
- Registre ESP (Stack Pointer): Ce registre de 32 bits contient le
déplacement pour atteindre le sommet de la pile. La partie basse 16
bits de ce registre peut être utilisée comme le registre SP.
- Registre EBP (Base Pointer): Ce registre de 32 bits contient un
déplacement correspondant à une position sur la pile. Ce registre
sert à pointer sur une donnée dans la pile. La partie basse 16 bits de
ce registre peut être utilisée comme le registre BP.

FSO Pr. Khadija LAAROUSSI 219


Architecture Intel
Registres de pointeurs et d’index
◼ Principe du fonctionnement des registres BP et SP
Push A Push B

SP
BP B
SP
SP BP A BP A
Situation initiale
Pile vide A déposé sur la pile B déposé sur la pile
Pop Push C Pop

SP
C
SP SP
A BP A A
BP BP
B retiré de la pile C déposé sur la pile C retiré de la pile
FSO Pr. Khadija LAAROUSSI 220
Architecture Intel
Registres de segments
CS DS SS ES FS GS

◼ Dans l’architecture x86 la mémoire est divisée en segments. Les registres de


segment permettent d’accéder, soit au segment du programme qui est la
zone mémoire des instructions du programme, soit au segment de données
qui est la zone mémoire contenant les données du programme ou le
segment de pile.
◼ Nombre de bits: 6 registres sur 16 bits.
◼ Noms:
- Registre de segment de code (Code segment ): CS (16 bits).
- Registre de segment de données (Data segment): DS (16 bits).
- Registre de segment de pile (Stack segment ): SS (16 bits).
- Registres de segment supplémentaire (16 bits) pour les données: ES (Extra
Segment), FS (File Segment) et GS (General Segment).
FSO Pr. Khadija LAAROUSSI 221
Architecture Intel
Registres de segments
◼ Utilisations:
▪ Registre CS: Ce registre contient le numéro du segment mémoire dans
lequel sont stockées les instructions assembleur du code à exécuter. On ne
peut pas accéder directement à ce registre.
▪ Registres DS, ES, FS, GS: Ces registres 16 bits contiennent les numéros
de segment mémoire dans lesquels sont stockées des données. Le registre
DS est utilisé pour le segment de données du code; les autres permettent de
référencer d'autres types de données. On ne peut pas accéder directement à
ces registres.
▪ Registre SS: Ce registre 16 bits contient le numéro du segment mémoire
dans lequel est stockée la pile. On peut accéder directement à ce registre ce
qui permet d'utiliser plusieurs piles.
◼ Remarque: Les registres de segments, associés aux pointeurs et aux index,
permettent au microprocesseur d’Intel d’adresser l’ensemble de la mémoire.
FSO Pr. Khadija LAAROUSSI 222
Architecture Intel
Pointeur d’instruction
Pointeur d’instruction
EIP
31 0

◼ Nombre de bits:
Un registre sur 32 bits.
◼ Noms:
Pointeur sur l’instruction (Instruction Pointer) : EIP (32 bits).
◼ Utilisations:
- Le registre EIP contient l'offset de la prochaine instruction à exécuter.
Il est utilisé avec le segment du registre CS par le processeur.
- Il est modifié automatique à chaque exécution par le processeur et
peut être manipulé par des instructions du type jmp, call, ret, etc.
- On ne peut pas accéder directement à ce registre.
FSO Pr. Khadija LAAROUSSI 223
Architecture Intel
Registre d’état: EFLAGS
0 0 0 0 0 0 0 0 Système 0 Système O D I T S Z 0 A 0 P 1 C
11 10 9 8 7 6 5 4 3 2 1 0
◼ Nombre de bits:
Un registre sur 32 bits.
◼ Noms:
Registre d’état EFLAG (Extended Flags).
◼ Utilisations:
- Ce registre permet de contrôler et d’indiquer certaines opérations sur l’unité
arithmétique et logique (UAL).
- Il existe trois types d’indicateurs: Systèmes (utilisés par le système
d’exploitation) , états et contrôle (utilisés par le programmeur) .
- Il est composé de plusieurs bits, appelés drapeaux (flags), chaque bit est un
indicateur d’état qui peut être modifié à chaque instruction exécutée comme
pour la retenue, le dépassement, la comparaison, etc.
FSO Pr. Khadija LAAROUSSI 224
Architecture Intel
Registre d’état: Indicateurs d’état
0 0 0 0 0 0 0 0 Système 0 Système O D I T S Z 0 A 0 P 1 C
11 10 9 8 7 6 5 4 3 2 1 0
▪ CF (Carry Flag): Indicateur de retenue, si la dernière opération a générée
une retenue (pour les opérations non-signées) on a 𝑪𝑭 = 𝟏, sinon 𝑪𝑭 = 𝟎.
- Exemples:
0100 1100 1111
+0110 +0110 +0001
CF=0 1010 CF=1 0 0 1 0 CF=1 0 0 0 0

▪ PF (Parity Flag): Indicateur de parité, 𝑷𝑭 = 𝟏 si le nombre de 1 est pair


dans les 8 bits du poids faible du résultat d’une opération (arithmétique ou
logique), 𝑷𝑭 = 𝟎 si le nombre des 1 est impair.
▪ AF (Auxiliary Carry Flag): Indicateur de retenue auxiliaire, même rôle que
CF mais avec des quantités BCD (binary Coded Decimal ou le décimal codé
binaire).
FSO Pr. Khadija LAAROUSSI 225
Architecture Intel
Registre d’état: Indicateurs d’état
0 0 0 0 0 0 0 0 Système 0 Système O D I T S Z 0 A 0 P 1 C
11 10 9 8 7 6 5 4 3 2 1 0
▪ ZF (Zero Flag): Indicateur de zéro, 𝐙𝑭 = 𝟏 si tous les bits d’un résultat d’une
opération (arithmétique ou logique) sont à 0, 𝐙𝑭 = 𝟎 sinon.
▪ SF (Sign Flag): Indicateur de signe, si la dernière opération a générée un
résultat négatif 𝐒𝑭 = 𝟏 , à 0 s’il est positif ou nul.
- Exemples:
0100 1100 1111
+0110 +0110 +0001
SF=1 1010 SF=0 0010 SF=0 0 0 0 0

▪ OF (Overflow Flag): Indicateur de débordement, 𝐎𝑭 = 𝟏 s’il y’a un


débordement de capacité après une opération arithmétique signée sur les
entiers, 𝐎𝑭 = 𝟎 sinon. Il peut, par exemple, arriver que la somme de deux
nombres positifs donne un nombre négatif. Dans ce cas 𝐎𝑭 = 𝟏.
FSO Pr. Khadija LAAROUSSI 226
Architecture Intel
Registre d’état: Indicateurs de contrôle
0 0 0 0 0 0 0 0 Système 0 Système O D I T S Z 0 A 0 P 1 C
11 10 9 8 7 6 5 4 3 2 1 0
▪ TF (Trap Flag): Indicateur d’exécution pas à pas, 𝐓𝑭 = 𝟏 si le
microprocesseur exécute les instructions pas à pas, 𝐓𝑭 = 𝟎 sinon.
▪ IF (Interrupt Flag): Indicateur d’autorisation d’interruption, I𝑭 = 𝟏
si une interruption externe est autorisé, I𝑭 = 𝟎 sinon.
▪ DF (Direction Flag): Indicateur de direction, ce bit indique le sens
croissant ou décroissant pour les adresses mémoires (ESI et EDI)
pendant les opérations sur les chaînes de caractères. 𝑫𝑭 = 𝟎 pour
l’incrémentation (traitement d’une chaîne de caractères de gauche à
droite) et 𝑫𝑭 = 𝟏 pour décrémentation (traitement d’une chaîne de
caractères de droite à gauche).
FSO Pr. Khadija LAAROUSSI 227
Segmentation de la mémoire
Rangement des données
◼ Principe: Mettre l’octet de poids fort à l’adresse Haute:

◼ Exemple: Supposons eax contient la valeur 0x12345678.


- L’instruction: mov [0x1000], eax implique que les cases mémoires des
adresses 0x1000, 0x1001, 0x1002, 0x1003 contiennent, respectivement les
contenus: 0x78, 0x56, 0x34, 0x12.
FSO Pr. Khadija LAAROUSSI 228
Segmentation de la mémoire
Mode réel
◼ L’espace mémoire adressable (20 bits du bus d’adresses et 1 Mo de
mémoire) tel que cet espace est divisé en quatre zones mémoire de taille
64 Ko appelées segments.
◼ Le microprocesseur Intel 8086 utilise le mode réel, il possède des
registres sur 16 bits, donc la possibilité d’adressage est de 216 Octets =
64 KO (ce qui ne couvre pas la totalité de la mémoire) et on ne peut pas
représenter directement une adresse sur 20 bits.
◼ Alors, on utilise deux registres pour indiquer une adresse au processeur,
un registre segment et un registre d’adressage ou offset.
◼ Chaque segment débute à l’endroit spécifié par le registre segment.
◼ Le déplacement (offset) à l’intérieur de chaque segment se fait par un
registre de décalage qui permet de trouver une information à l’intérieur
du segment.
FSO Pr. Khadija LAAROUSSI 229
Segmentation de la mémoire
Mode réel
◼ IP est un registre de déplacement dans le segment code (CS).
◼ SP est un registre de déplacement dans le segment pile (SS).
◼ SI et DI sont des registres de déplacement dans le segment de données (DS) et
segment de données supplémentaires (ES).
◼ Chaque segment contient un type différent d’information :
- Segment Code: contient les instructions d’un programme.
- Segment Données: contient les données d’un programme.
- Segment Extra: contient des données supplémentaires (utilisé dans des
données blocs : chaînes de caractères, tableaux, …).
- Segment Pile: contient le contenu des registres internes AX, BX, CX et DX
lors d’une interruption.
◼ Chaque segment est adressé par deux registres :
- Registre Segment ou Registre Base : pointe sur le début du segment (Base).
- Registre de décalage (Offset): pointe sur l’information à l’intérieur du segment.
FSO Pr. Khadija LAAROUSSI 230
Segmentation de la mémoire
Mode réel 7 0

64 Ko Segment
IP
CS
DS 64 Ko Segment
SI ou DI
ES

SS
64 Ko Segment
SI ou DI

64 Ko Segment
SP
FSO Pr. Khadija LAAROUSSI 231
Segmentation de la mémoire
Adresse physique
◼ L’adresse logique est le couple (segment, offset), elle est notée par:
Segment : Offset
◼ L’adresse physique d’une case mémoire est :
Adresse physique = 16 × segment + offset
◼ L’adresse physique est une adresse sur 20 bits (5 chiffres hexadécimaux),
adressée par le bus d’adresses de 20 bits.
◼ L’adresse segment et l’adresse de déplacement (Offset) sont des adresses
sur 16 bits (4 chiffres hexadécimaux), adressées par des registres sur 16 bits.
◼ Pour accéder à un octet particulier dans un segment, il suffit de compter le
décalage de cet octet par rapport au début du segment.
◼ Pour la mémoire, l’adressage va de 00000h à FFFFFh ce qui représente 1
Mo.

FSO Pr. Khadija LAAROUSSI 232


Segmentation de la mémoire
Mode réel
Segmentation de la mémoire Adresse logique: Segment : Offset
1 Mo FFFFFh
Adresse physique: Segment × 16+ Offset

Un segment Case mémoire


(64 KO) Offset
Adresse
multiple de 16
.
.

0 00000h

FSO Pr. Khadija LAAROUSSI 233


Segmentation de la mémoire
Mode réel
◼ Exemple 1: Trouver l’adresse physique de l’adresse logique suivante
0B07 : 0100.
- Adresse de segment est : 0B07h ⟹ 0000 1011 0000 0111
- Adresse d’offset est : 0100h ⟹ 0000 0001 0000 0000
▪ L’adresse physique = 16 × segment + offset
- Décalé à gauche de 4 positions l’adresse de segment:
0000 1011 0000 0111 0000 ⟹ 0B070h
- Un décalage de 4 positions vers la gauche pour que cette adresse soit un
multiple de 16 implique que les 4 bits de poids faible sont à 0.
- Puis, on ajoute l’adresse d’offset, d’où:
0B07 × 16 + 0100 = 0B070 + 0100 = 0B170
▪ L’adresse physique est 0B170.

FSO Pr. Khadija LAAROUSSI 234


Segmentation de la mémoire
Mode réel
◼ Exemple 2: Dans cet exemple, le programme commence à l’adresse 0B56:0100.
Le registre CS contient l’adresse 0B56 et le registre IP contient l’adresse 0100.
Mémoire centrale

De la position 00000h à la position


FFFFFh, on a 1048576 cases
mémoire qui peuvent contenir
chacune un octet. Cela représente
donc une mémoire de 1 MO (1024
Ko ou 1024 ×1024 octets)

0B560h

De la position 0B560h à la position


Avec la directive org 100h,
1B55Fh (obtenue en faisant 0B560h +
le programme commence à
0B660h FFFFh), nous avons 65536 octets (64
l’adresse CS +100h
Ko). Cette zone correspond au
segment de code (Code Segment ou
CS) qui contient les octets
correspondant aux instructions que
doit exécuter le processeur (le code
machine

1B55Fh

FSO Pr. Khadija LAAROUSSI 235


Segmentation de la mémoire
Mode réel
◼ Exemple 2: L’adresse physique correspondant à l’adresse logique
0B56 : 0100 est:
0B56 × 16 + 0100 = 0B560 + 0100 = 0B660

- Décalage à gauche de 4 positions de 0B56 donne l’adresse 0B560.
- 0B560 est le début du segment.
- La fin du segment est obtenu en ajoutant FFFFh à l’adresse du début, soit
64 Ko ou 65536 octets.
- Nous avons donc 0B560 + FFFF = 1B55F qui représente la fin de notre
segment de code CS.
- L’adresse physique 0B660 contient le premier octet correspondant aux
instructions que doit exécuter le processeur, dans l’exemple de la figure
c’est B8.
FSO Pr. Khadija LAAROUSSI 236
Segmentation de la mémoire
Mode réel: Limitations
Mode réel: Mémoire de 1 Mo adressable par un
bus d’adresse de 20 bits (8086)
Problèmes

1) Que se passe-t-il si un programme a plus de 64 Ko de code ?


2) Problèmes similaires pour de grandes quantités de données.
3) Un octet en mémoire = Adresse segmentée pas unique.
4) L'adresse physique 04808 peut être référencée par 047C:0048, 047D:0038,
047E:0028 ou 047B:0058. Cela complique la comparaison d'adresses segmentées.

Solution

Mode protégé: Mémoire de 4 Go adressable par l’unité de gestion de


mémoire (MMU) et un bus d’adresse de 32 bits (80386).

FSO Pr. Khadija LAAROUSSI 237


Segmentation de la mémoire
Exercice 1:
1) Calculer l’adresse physique pour toutes les adresses logiques
suivantes : 047C:0048, 047D:0038, 047E:0028 et 047B:0058.

2) Déduire le problème du mode réel.

Correction :
1) L’adresse physique : 04808.
2) Le problème du mode réel est qu’une adresse physique peut être
référencée par plusieurs adresses logiques.

FSO Pr. Khadija LAAROUSSI 238


Architecture des microprocesseurs
Architecture CISC
◼ L’architecture CISC (Complex Instruction Set Computer) désigne
un processeur possédant un jeu d’instructions plus complexe et
nécessite plusieurs cycles d'horloge (comprenant plus de 200
instructions).
◼ L’objectif de cette multitude d’instructions complexes est de faciliter
la programmation en assembleur.
◼ Néanmoins, cette méthode de programmation nécessite un câblage
interne complexe qui ralentit la vitesse globale du microprocesseur.
◼ De plus, ces instructions complexes sont rarement utilisées par les
programmeurs en pratique.
◼ Le processeur 8088 (comme tous les premiers modèles) sont des
processeurs CISC.

FSO Pr. Khadija LAAROUSSI 239


Architecture des microprocesseurs
Architecture CISC
◼ On peut résumer l’architecture CISC dans les points suivants :
- Le temps d’exécution des instructions est variable.
- Elle peut effectuer plusieurs opérations élémentaires comme charger
une valeur en mémoire, faire une opération arithmétique et ranger le
résultat en mémoire.
- Vitesse typique : une instruction dure entre 3 et 10 cycles.
◼ Avantages :
- Réduction du nombre d’instructions d’un programme;
- Développement plus simple.
◼ Inconvénients :
- Temps d’exécution (des instructions) plus long ;
- Processeur plus complexe et donc plus lent.

FSO Pr. Khadija LAAROUSSI 240


Architecture des microprocesseurs
Architecture RISC
◼ L’architecture RISC (Reduced Instruction Set Computer) désigne un
processeur possédant un jeu d’instructions plus simple (<100 instructions);
◼ Dans ce cas, le nombre d’instruction en assembleur est réduit, ce qui permet
un câblage interne plus rapide avec des architectures internes différentes
comme pipeline et superpipeline.
◼ On peut résumer l’architecture RISC dans les points suivants :
- généralement, 80% des traitements des langages de haut niveau faisaient
appel à seulement 20% des instructions du CPU.
- chaque instruction effectue une seule opération élémentaire;
- réduire le jeu d’instructions à celles le plus couramment utilisées;
- donc améliorer la vitesse de traitement;
- toutes les instructions sont codées sur la même taille;
- vitesse typique : une instruction dure un cycle.
- L’exécution devient plus rapide, mais au coût d’un compilateur plus
complexe.
FSO Pr. Khadija LAAROUSSI 241
Architecture des microprocesseurs
Comparaison: CISC et RISC

Step 1 Step 2 Step 3 Step 1 Step 2


CISC
Instruction 1 Instruction 2

Instruction Instruction Instruction


1 2 3
RISC
Time

FSO Pr. Khadija LAAROUSSI 242


Architecture pipeline
Principe: Exemple d’un restaurant universitaire
◼ On passe, dans l'ordre devant 4 éléments :
- Un présentoir pour les entrées.
- Un présentoir pour les desserts.
- Un présentoir pour les plats de résistance.
- Une caisse.

FSO Pr. Khadija LAAROUSSI 243


Architecture pipeline
Principe: Exemple d’un restaurant universitaire
◼ Il existe deux modes d'utilisation pour se servir un repas:
1) Une seule personne à la fois dans toute la chaîne de service:
- Quand elle a passé toute la chaîne et elle est sortie, une autre
personne entre se servir.
2) Plusieurs personnes à la fois, en décalé:
- Une personne à chaque présentoir/élément.
- Une personne passe à l'élément suivant quand il est libre et qu'elle
en a fini avec son élément courant.

FSO Pr. Khadija LAAROUSSI 244


Architecture pipeline
Principe: Exemple d’un restaurant universitaire
◼ Intérêts du deuxième mode:
- Plusieurs personnes se servent en même temps.
- Gain de temps : plus de personnes passent pendant une même
durée.
- Meilleure gestion des éléments : toujours utilisés.
◼ Inconvénients du deuxième mode:
- Plus difficile de faire « demi-tour » dans la chaîne d'éléments.
- Nécessite des synchronisations supplémentaires et des éléments
dont le parcours prend un temps proche pour une bonne
optimisation.

FSO Pr. Khadija LAAROUSSI 245


Architecture pipeline
Principe du pipeline dans un microprocesseur
◼ Dans un processeur, un pipeline (ou chaîne de traitement) est utilisé pour
exécuter une opération (instruction).
- Une opération comporte plusieurs sous-opérations. Le pipeline est utilisé
pour l’exécution de ces sous-opérations.
- Une sous-opération utilise une sous-unité du processeur qui n'est pas
utilisée par d'autres sous-opérations.
◼ Avec un pipeline, le processeur peut commencer à exécuter une nouvelle
instruction sans attendre que la précédente soit terminée.
◼ Exemple de pipeline simple:
- LE : Lecture de l'instruction en mémoire.
- DE : Décodage de l'instruction (décodeur du contrôleur).
- CH : Chargement des registres (entrées A et B) de l’UAL.
- EX : Exécution du calcul.
- ENR : Enregistrement du résultat dans le registre de sortie de l’UAL.
FSO Pr. Khadija LAAROUSSI 246
Architecture pipeline
Exemple de pipeline simple: Détail des étapes
◼ LE: Lecture de l’Instruction (FETCH Instruction):
- Accès en mémoire pour lire le mot mémoire placé à l'adresse
contenue dans CO et correspondant à la prochaine instruction.
- Résultat placé dans le RM.
◼ DE: Décodage de l’Instruction (DECODE Instruction):
- Copie de RM dans RI puis décodage du code de l'opération.
- Recherche des opérandes (registre ou valeur immédiate).
◼ CH: Chargement des registres
- Pour un calcul: Chargement des entrées A et B de l’UAL à partir du
RM.
- Pour un accès en mémoire: Chargement de registre adresse RA.
- Dans le cas d'une écriture en mémoire, chargement du RM.

FSO Pr. Khadija LAAROUSSI 247


Architecture pipeline
Exemple de pipeline simple: Détail des étapes
◼ EX: Exécution de l’Instruction (EXECUTE instruction):
▪ Pour un calcul:
- L’unité arithmétique et logique (UAL) effectue le calcul (si par
exemple ADD, on fait la somme, si SUB, on fait la soustraction,
etc.).
- Résultat disponible dans l’accumulateur A (sortie de l’UAL).
▪ Pour un accès en mémoire:
- Accès à la mémoire via les bus mémoire, RA et RM.
- Si opération de lecture, RM contient le mot lu à l'adresse contenue
dans RA.
◼ ENR: Enregistrement du résultat :
- Pour un calcul: Copie du registre accumulateur de l'UAL dans la
mémoire.
FSO Pr. Khadija LAAROUSSI 248
Architecture pipeline
Exemple: Exécution séquentielle
◼ Avec une exécution séquentielle (sans pipeline), chaque étape
s’exécute après l’autre.
◼ Par exemple, pour 3 instructions il faut normalement 15 cycles
d’horloge, (5 cycles pour chaque instruction).

Inst. 1 LE DE CH EX ENR

Inst. 2
LE DE CH EX ENR
Inst.1
LE DE CH EX ENR

Time

FSO Pr. Khadija LAAROUSSI 249


Architecture pipeline
Exemple: Exécution des instructions avec pipeline
◼ Exécutions décalées de 5 instructions en même temps.
Instr. 1
LE DE CH EX ENR
Instr. 2 LE DE CH EX ENR
Instr. 3 LE DE CH EX ENR
Pipeline avec
5 étages
Instr. 4 LE DE CH EX ENR
Instr. 5 LE DE CH EX ENR

◼ Remarques:
- Sans pipeline : exécution séquentielle de 3 instructions en 15 cycles.
- Avec pipeline: exécution parallèle de 5 instructions en 9 cycles.
- Au 5ème cycle, les 5 instructions sont exécutées en même temps mais
chacune à une étape différente.
FSO Pr. Khadija LAAROUSSI 250
Architecture pipeline
Profondeur (nombre des étages) du pipeline
◼ Exemples de profondeur de pipeline pour les processeurs actuels:
▪ Processeurs Intel:
- Intel P4 : 20
- Intel P3 : 10
▪ Processeurs AMD:
- Athlon 64 : 12
- Génération précédente : AMD Athlon XP : 10
◼ Intérêts d'avoir un pipeline plus profond: Plus d'instructions en cours
d'exécution simultanée, ce qui permet d’augmenter la fréquence du processeur.
◼ Problèmes du pipeline profond:
- Aléas structurels: des sous-unités du CPU doivent être utilisées simultanément
par plusieurs étages du pipeline (par exemple accès à la mémoire pour LE et EX).
- Aléas de données: une instruction de calcul en cours d'exécution dépend d'une
valeur non encore calculée.
- Aléas de contrôle: L'instruction suivante dépend du résultat d'une instruction pas
encore connu (test).
FSO Pr. Khadija LAAROUSSI 251
Chapitre 6:
Modes d’adressage et jeu d’instructions

FSO Pr. Khadija LAAROUSSI 252


Objectifs
✓ Décrire tous les modes d’adressage du microprocesseur
Intel 8086.
✓ Décrire et expliquer le jeu d’instructions du
microprocesseur Intel 8086.
✓ Programmer en assembleur MASM32.

FSO Pr. Khadija LAAROUSSI 253


Plan
Mode d’adressage
- Adressage immédiat
- Adressage par registre
- Adressage direct
- Adressage indirect: par registre, basé, indexé
- Adressage basé et/ou indexé avec déplacement
Jeu d’instructions
- Instructions de transfert de données
- Instructions arithmétiques
- Instructions logiques
- Instructions de branchement: saut conditionnel, saut inconditionnel, appel
de sous-programmes
- Instructions de boucle
- Tableaux
FSO Pr. Khadija LAAROUSSI 254
Modes d’adressage
Introduction
◼ Les modes d'adressage permettent de spécifier la méthode utilisée
pour calculer l'adresse effective (l’adresse en mémoire) d'un
opérande.
◼ En général, les modes d’adressage dépendent de l’architecture étudiée.
◼ Les modes d’adressage disponibles pour le microprocesseur 8086 sont:
- Adressage immédiat.
- Adressage par registre.
- Adressage direct.
- Adressage indirect.
◼ Remarque: Dans ce qui suit, on va décrire les modes d’adressage du
microprocesseur 8086 en utilisant l’instruction de transfert de données
« mov » (syntaxe: mov Destination, Source) qui permet de copier le
contenu d’un opérande source dans un opérande destination.
FSO Pr. Khadija LAAROUSSI 255
Modes d’adressage
Adressage immédiat
◼ Dans ce mode d’adressage, l’opérande (donnée immédiate) apparaît dans
l’instruction elle-même.
◼ Cela signifie qu’on écrit directement la valeur que l’on veut enregistrer.
Dans ce cas, il n'y a pas d'adresse de l'opérande puisque l'opérande lui-
même se trouve dans le code de l'instruction.
◼ Exemple:
Instruction Description
mov AL, 12h AL ←12h
mov AX, 1E25h AX ←1E25h
mov EAX, D4723561h EAX ← D4723561h

◼ Cela signifie que les valeurs 12h, 1E25h et D4723561h seront,


respectivement, stockées immédiatement dans les registres AL, AX et EAX.
FSO Pr. Khadija LAAROUSSI 256
Modes d’adressage
Adressage immédiat
◼ Si on veut un nombre en binaire, on doit ajouter un ’b’.
◼ Si on ne précise rien devant la valeur à enregistrer, le nombre sera en
décimal, c’est équivalent d’ajouter un ’d’.
◼ Exemples :
- mov eax, 15d ; 15 en décimal
- mov eax, 101b ; 101 en binaire (5 en décimal).
- mov eax, CD4h ; en hexadécimal (3284 en décimal).
◼ Remarque :
▪ La possibilité de stockage d’un registre est finie. Il faut que le nombre
qu’on y met soit capable d’y entrer. Par exemple:
- mov eax, 2345236675 fonctionne parfaitement.
- mov eax, 5434955786 provoque une erreur car le nombre maximal
stockable dans un registre 32 bits est 4 294 967 295.
FSO Pr. Khadija LAAROUSSI 257
Modes d’adressage
Adressage par registre
◼ Ce mode d’adressage concerne tout transfert ou toute opération, entre deux
registres de même taille.
◼ La valeur de l’opérande est stockée dans un registre.
◼ Exemple:
Instruction Description
mov CL, AL CL ← AL
mov BX, AX BX ← AX
mov EAX, EDX EAX ← EDX
◼ Remarques:
- Le transfert se fait de registre à registre. mov EAX, EDX, signifie qu’on
copie le contenu du registre EDX dans le registre EAX sans changer EDX.
- Les données doivent être de même type, l’instruction suivante mov CX, BL
est incorrecte.
FSO Pr. Khadija LAAROUSSI 258
Modes d’adressage
Adressage direct
◼ Dans ce mode, on spécifie directement dans l’instruction l’adresse de
l’opérande (adresse effective) de la case mémoire où se trouve la donnée.
On doit faire un accès à la mémoire pour obtenir l’opérande.
◼ Exemple:

Instruction Description
mov DL, [1214h] DL ← [1214h]
mov AX, [4517h] AX ← [4517h]
◼ L’instruction mov AX, [4517h] signifie qu’on affecte au registre AX la
valeur contenue dans l’emplacement mémoire (offset) 4517h.
◼ Remarque: Ce mode provoque un temps d’exécution de l’instruction plus
long. En effet, accéder à la mémoire principale prend plus de temps que
d’accéder à un registre.
FSO Pr. Khadija LAAROUSSI 259
Modes d’adressage
Adressage indirect par registre
◼ Dans ce mode d’adressage, l’adresse de l’opérande est stockée dans un
registre qu’il faut bien évidemment le charger au préalable par la bonne
adresse.
◼ L’adresse de l’opérande sera stockée dans un registre de base BX ou BP
(adressage basé) ou un registre indexe SI ou DI (adressage indexé).
◼ Exemple:
Instruction Description
mov AX, [BX] AX← la valeur contenue dont l’adresse
se trouve dans le registre BX.
◼ mov AX, [BX], signifie le contenu de la case mémoire dont l’adresse se
trouve dans le registre BX est mis dans le registre AX.
◼ C’est l’inverse de l’adressage direct où l’offset n’est pas spécifié dans
l’instruction mais il est mis dans un registre de base ou d’indexe.
FSO Pr. Khadija LAAROUSSI 260
Modes d’adressage
Adressage indirect basé
◼ Dans ce mode d’adressage, le déplacement est déterminé par soit, le
contenu de BX, soit le contenu de BP. DS et SS sont pris par défaut.
◼ Exemple:
Instruction Description
mov AH, [BX] AH ← [BX]
mov AX, [BP] AX ← [BP]
▪ Cela signifie que:
- Dans le registre AH on va mettre le contenu de la case mémoire
pointée par BX dans le segment DS.
- Dans le registre AX on va mettre le contenu de la case mémoire
pointée par BP dans le segment SS.
FSO Pr. Khadija LAAROUSSI 261
Modes d’adressage
Adressage indirect indexé
◼ Dans ce mode d’adressage, le déplacement est déterminé par soit, le
contenu de SI, soit le contenu de DI. DS est pris par défaut.
◼ Exemple:

Instruction Description
mov AX, [SI] Charger le registre AX avec le contenu de la
case mémoire du segment DS dont l’offset est
contenu dans SI
mov [DI] , AL Charger la case mémoire du segment DS dont
l’offset est contenu dans DI avec le contenu de
AL

FSO Pr. Khadija LAAROUSSI 262


Modes d’adressage
Adressage basé ou indexé avec déplacement
◼ Une valeur constante peut éventuellement être ajoutée aux registres
de base (BX ou BP) ou d’index (SI ou DI) pour obtenir l’offset
(déplacement).
◼ Les modes d’adressage basés ou indexés permettent la manipulation
de tableaux rangés en mémoire.
◼ Exemple1 :

Instruction Description
mov AX, [SI+100h] Charger le registre AX avec le contenu de
mov AX, [SI][100h] la case mémoire dont l’offset est contenu
mov AX, 100h[SI] dans SI plus un déplacement de 100h.

FSO Pr. Khadija LAAROUSSI 263


Modes d’adressage
Adressage basé et indexé avec déplacement
◼ Ce mode d’adressage permet d’obtenir l’offset en faisant la somme
d’un registre de base, d’un registre d’index et d’une valeur constante.
◼ Exemple 2:
Instruction Description
mov AX, [BX+SI+100h] Charger le registre AX avec le contenu de la case
mémoire dont l’offset est contenue dans
BX+SI+100h
mov AX, [BX][DI] 5h Charger le registre AX avec le contenu de la case
mémoire dont l’offset est contenue dans
BX+DI+5h
◼ Remarques:
- Ce mode d’adressage permet l’adressage de structures de données
complexes : matrices, enregistrements, etc.
FSO Pr. Khadija LAAROUSSI 264
Modes d’adressage
Registres utilisés lors de l’adressage
Registres généraux Registres d’adressage Registres de segment
AX AH AL SP CS

BX BH BL BP DS

CX CH CL SI SS

DX DH DL DI ES

Registres de commande
IP
FLAGS

Offset utilisé Registre segment par défaut qui sera utilisé par le CPU
Valeur, DI, SI, BX DS
BP SS
FSO Pr. Khadija LAAROUSSI 265
Jeu d’instructions
Introduction
◼ Le jeu d’instruction représente l’ensemble des instructions que peut
exécuter un microprocesseur.
◼ C’est un ensemble de circuits logiques câblés dans un processeur.
◼ Le 8086 est un microprocesseur CISC (Complex Instruction Set Computer)
qui contient 350 instructions.
◼ Une instruction est représentée sous la forme suivante :
Mnémonique Destination, Source
◼ Les instructions machines peuvent être classées en quatre groupes :
- Instructions de transferts: Transfert de données entre registre ou
mémoire.
- Instructions arithmétiques: Addition, soustraction, multiplication, etc.
- Instructions logiques: AND, OR, XOR, NOT, Décalages, Rotations.
- Instructions de branchement: Saut conditionnel et inconditionnel, appels
de sous-programmes.
FSO Pr. Khadija LAAROUSSI 266
Jeu d’instructions
Instructions de transfert de données
◼ Les instructions de transfert « mov » permet de déplacer des données
d’une source vers une destination.
◼ Syntaxe:
mov destination, source
- mov est l’abréviation du verbe « to move » : déplacer.
- destination est l’espace de stockage où l’on veut mettre notre valeur.
- source est la valeur à enregistrer.
◼ Exemple:
- mov [1100h],65h; transfère la valeur 65h dans la case mémoire d’offset
1100h: adressage direct.
- mov ebx, 25; Déplacer 25 dans ebx : adressage immédiat.
- mov eax, ebx; Déplacer 25 dans eax: adressage par registre.

FSO Pr. Khadija LAAROUSSI 267


Jeu d’instructions
Instructions de transfert de données
◼ Variantes de l’instruction mov:
Pour résoudre le problème que les deux espaces de stockages doivent être de
la même taille, il existe deux variantes pour l’instruction mov:
- movzx: Pour étendre un opérande de 8 ou 16 bits sur 16 ou 32 bits en
mettant des 0 dans le reste de la destination.
- movsx: Pour étendre un opérande de 8 ou 16 bits sur 16 ou 32 bits en
mettant le bit de signe de l’opérande dans le reste de la destination
(complément à 2).
▪ Exemple:
On suppose que bl = 0×94, donc:
- movzx ax, bl ; alors ax = 0094 = +148 sur 16 bits.
- movsx ax, bl ; alors ax = FF94 = -108 sur 16 bits (Complément à 2 de +148).
- movzx eax, bl ; alors eax = 00000094 = +148 sur 32 bits.
- movsx eax, bl ; alors eax = FFFFFF94 = -108 sur 32 bits.
FSO Pr. Khadija LAAROUSSI 268
Jeu d’instructions
Instructions de transfert de données
▪ Exemple: Supposons qu’on a le nombre 4 = 0100 dans bx et qu’on veut
copier cette valeur dans eax.
INCLUDE Irvine32.inc
.code
salut :
mov bx,4
movzx eax, bx
call dumpregs ; affiche le contenu des registres
exit
end salut
▪ bx est un registre de 16 bits, donc il contient la valeur 0000 0000 0000 0100
▪ movzx étend notre nombre de 16 bits à 32 bits :
00000000000000000000000000000100
▪ movzx agit, enfin, comme un mov normal : il copie cette valeur dans eax.
▪ Le résultat de ce code est comme ceci : eax = 00000004
FSO Pr. Khadija LAAROUSSI 269
Jeu d’instructions
Instructions arithmétiques
◼ Les instructions arithmétiques de base sont:
- Addition: ADD
- Soustraction: SUB
- Multiplication: MUL
- Division: DIV
◼ Plusieurs modes d’adressage sont possibles.

FSO Pr. Khadija LAAROUSSI 270


Jeu d’instructions
Instructions arithmétiques: Addition
◼ L’instruction ADD (addition) nécessite deux opérandes : la source et la destination.
◼ Syntaxe :
ADD Destination, Source
- L’opération effectuée est : Destination ⟵ Destination + Source
◼ Exemples :
Instruction Description
Ajoute le contenu de la case mémoire d’offset 1100H à
add AH, [1100H]
l’accumulateur AH (adressage direct).
mov AX, 4 Résultat :
mov BX, 6 BX = 6 et AX = 10
add AX, BX
Movzx EAX, AX

◼ Remarque: Pour utiliser l’affichage de la bibliothèque Irvine32 (call Writestring et


call Writeint, etc.), il faut utiliser les registres sur 32 bits (EAX, EDX, etc.).
FSO Pr. Khadija LAAROUSSI 271
Jeu d’instructions
Instructions arithmétiques: Addition
Exercice 1:
Écrire un programme en assembleur (Masm32) en utilisant la
bibliothèque Irvine32 qui permet de :
- Lire deux nombres entiers a et b.
- Calculer et afficher la somme de ces deux nombres sur l’écran.

FSO Pr. Khadija LAAROUSSI 272


Jeu d’instructions
Instructions arithmétiques: Addition
▪ Correction de l’exercice 1
INCLUDE Irvine32.inc ; pour utiliser la bibliothèque Irvine32
.data? ; déclaration des variables globales a et b non initialisées
a dword ? ; a est une variable de 32 bits non-signé
b dword ? ; b est une variable de 32 bits non-signé
.data; déclaration des variables globales m1 et m2 initialisées par des chaînes de caractères
m1 byte "Entrer un entier :",0
m2 byte "La somme est :",0
.code ; début du programme proprement dit
main PROC
mov edx,OFFSET m1 ; mettre le message m1 dans le registre edx
call writestring ; afficher le contenu de edx
call readint ; l’entier entré va être stocké dans eax
mov a,eax ; mettre ce dernier entier dans la variable a
mov edx,OFFSET m1 ; mettre le message m1 dans edx
call writestring ; afficher le contenu de edx
call readint ; le nouveau entier entré va être stocké dans eax
add eax, a; ajouter a (le 1er entier) au contenu de eax (2ème entier) et stocker le résultat dans eax
FSO Pr. Khadija LAAROUSSI 273
Jeu d’instructions
Instructions arithmétiques: Addition
▪ Correction de l’exercice 1

mov edx,OFFSET m2
call writestring ; afficher le contenu de edx
call writeint ; afficher le contenu de eax (la somme)
call crlf ; retourner à la ligne
main ENDP
END main

FSO Pr. Khadija LAAROUSSI 274


Jeu d’instructions
Instructions arithmétiques: Soustraction
◼ Syntaxe :
SUB Destination, Source
- L’opération effectuée est : Destination ⟵ Destination - Source.
◼ Exemple :
mov AX, 4
mov BX, 6
ADD AX, BX
SUB AX, 3
- Résultat : AX devient 7.
◼ Remarques :
- Il est impossible d’utiliser des registres de tailles différentes pour faire l’addition ou la
soustraction.
- Ajouter ou soustraire un 16 bits avec un 8 bits par exemple est impossible. ADD BX,
CL est aussi impossible.
- Si vos besoins sont de ce type, vous devrez transférer un des registres par exemple dans
un autre registre à l’aide d’une instruction MOVZX.
FSO Pr. Khadija LAAROUSSI 275
Jeu d’instructions
Instructions arithmétiques: Soustraction
Exercice 2:
Écrire un programme en assembleur Masm32 (avec Irvine32) qui
permet de :
- Lire deux nombres entiers a et b.
- Calculer et afficher le résultat de la soustraction sur l’écran.

FSO Pr. Khadija LAAROUSSI 276


Jeu d’instructions
Instructions arithmétiques: Soustraction
▪ Correction de l’exercice 2
INCLUDE Irvine32.inc
.data?
a dword ?
b dword ?
.data
m1 byte "Entrer un entier :",0
m2 byte "La soustraction est :",0
.code
main PROC
mov edx,OFFSET m1
call writestring
call readint ; l’entier entré va être stocké dans eax
mov a,eax ; mettre ce dernier entier dans la variable a
mov edx,OFFSET m1
call writestring
call readint ; le nouveau entier entré va être stocké dans eax
sub a, eax ; faire la soustraction de deux nombres entrés et mettre le résultat dans a
mov eax, a ; mettre le résultat dans eax
FSO Pr. Khadija LAAROUSSI 277
Jeu d’instructions
Instructions arithmétiques: Soustraction
▪ Correction de l’exercice 2
mov edx,OFFSET m2
call writestring ; afficher le contenu de edx
call writeint ; afficher le contenu de eax (la soustraction)
call crlf
main ENDP
END main

FSO Pr. Khadija LAAROUSSI 278


Jeu d’instructions
Instructions arithmétiques: Multiplication
◼ La multiplication n’a besoin que d’une seule opérande : la source qui est un
registre ou une case mémoire. Ce mode d’adressage est un mode implicite.
◼ Syntaxe :
MUL OP
- Si OP est un octet (8 bits), AL est multiplié par OP, et le résultat dans AX.
- Si OP est un mot (16 bits), AX est multiplié par OP, et le résultat placé dans le
registre 32 bits : DX:AX.
- Si OP est un double (32 bits), EAX est multiplié par OP, le résultat placé dans le
registre 64 bits : EDX:EAX.
◼ Remarques:
- La multiplication de deux entiers codés sur 32 bits peut nécessiter 64 bits.
Les quatre octets de poids faibles sont mis dans eax et les quatre octets de
poids forts dans edx (edx:eax).
- L’instruction MUL est utilisée pour les nombres non-signés et IMUL pour
les nombres signés (complément à 2).
FSO Pr. Khadija LAAROUSSI 279
Jeu d’instructions
Instructions arithmétiques: Multiplication
▪ Exemples:

Instruction Description
mov AL, 51 AX = AL × BL
mov BL, 32 AX = 51 × 32
mul BL AX = 1632 et BL = 32
mov AX, 4253 DX:AX = AX × BX
mov BX, 1689 DX:AX = 4253 × 1689
mul BX
mov EAX, 21374253 EDX:EAX = EAX × EBX
mov EBX, 13628914 EDX:EAX = 21374253 × 13628914
mul EBX

FSO Pr. Khadija LAAROUSSI 280


Jeu d’instructions
Instructions arithmétiques: Division
◼ Syntaxe:
DIV OP
- où OP est un registre, une constante ou une case mémoire.
- effectue la division entière : eax/OP
- Si OP est un octet, AX est divisé par OP, le quotient dans AL et le reste dans AH.
- Si OP est un mot, le nombre 32 bits (DX:AX) est divisé par OP, le quotient dans
AX et le reste dans DX.
- Si OP est un double, le nombre 64 bits (EDX:EAX) est divisé par OP, le quotient
dans EAX et le reste dans EDX.
◼ Remarques:
- Ce mode d’adressage est un mode implicite.
- L’instruction DIV est utilisée pour les nombres non-signés et IDIV pour les
nombres signés (complément à 2).
- L’ajout de l’instruction mov EDX, 0 est important, car le dividende doit être
stocké dans EDX:EAX pour que le résultat soit dans EAX.
FSO Pr. Khadija LAAROUSSI 281
Jeu d’instructions
Instructions arithmétiques: Division
▪ Exemples:
Instruction Description
mov AX,35 AL = 3 (quotient) et AH = 5 (reste)
mov BL,10
div BL
mov DX, 0 AX = 123 (quotient) et DX = 4 (reste)
mov AX, 1234
mov BX, 10
div BX

FSO Pr. Khadija LAAROUSSI 282


Jeu d’instructions
Instructions arithmétiques: Division
◼ Exemple :
include Irvine32.inc
.code
main PROC
mov EDX, 0 ; edx contient le reste de la division
mov EAX, 18
mov EBX, 5
div EBX ; équivalent de EAX/EBX
call writeint ; affiche le contenu de EAX : le résultat de la division
call crlf
mov eax, edx
call writeint ; affiche le reste de la division
call crlf
main ENDP
END main
◼ Résultat: EAX = 3 (quotient) et EDX = 3 (reste).
FSO Pr. Khadija LAAROUSSI 283
Jeu d’instructions
Instruction d’incrémentation
◼ L’incrémentation se fait par l’instruction INC qui ajoute 1 au contenu
de l’opérande.
◼ Syntaxe:

INC source
- effectue : source = source + 1
◼ Exemple:
mov al, 3Fh
inc al
Résultat :
AL contient par suite la valeur 40h.

FSO Pr. Khadija LAAROUSSI 284


Jeu d’instructions
Instruction de décrémentation
◼ La décrémentation se fait par l’instruction DEC qui retire 1 du
contenu de l’opérande.
◼ Syntaxe:
DEC source
- effectue : source = source - 1

◼ Exemple:
mov al, 01h
dec al
Résultat :
AL contient par suite la valeur 00.

FSO Pr. Khadija LAAROUSSI 285


Jeu d’instructions
Instructions logiques
◼ Les instructions logiques permettent de manipuler des données au
niveau des bits.
◼ Les opérations logiques de base sont :
- Opérations logiques bit à bit : ET, OU, OU exclusif, Complément
à 1 et Complément à 2
- Décalages et rotations: décalage à droite, décalage à gauche,
décalage arithmétique vers la gauche et la droite, rotation à droite et
à gauche, etc.
◼ Les différents modes d’adressage sont disponibles.

FSO Pr. Khadija LAAROUSSI 286


Jeu d’instructions
Instructions logiques: ET logique
◼ Syntaxe: AND OP1,OP2
◼ Description: L’opération effectuée est : OP1 ← OP1 ET OP2.
◼ Exemple:

mov AL,10010110B AL= 1 0 0 1 0 1 1 0


mov BL,11001101B BL= 1 1 0 0 1 1 0 1
and AL, BL AL= 1 0 0 0 0 1 0 0
◼ Application: masquage de bits pour mettre à zéro certains bits dans
un mot.
◼ Exemple: masquage des bits 0, 1, 6 et 7 dans l’octet 01010111:
01010111
0 0 1 1 1 1 0 0 ← masque
00010100
FSO Pr. Khadija LAAROUSSI 287
Jeu d’instructions
Instructions logiques: OU logique
◼ Syntaxe: OR OP1,OP2
◼ Description: L’opération effectuée est : OP1 ← OP1 OU OP2.
◼ Exemple:

mov AL,10010110B AL= 1 0 0 1 0 1 1 0


mov BL,11001101B BL= 1 1 0 0 1 1 0 1
or AL, BL AL= 1 1 0 1 1 1 1 1
◼ Application: Mettre à un certains bits dans un mot.
◼ Exemple: Mettre à 1 les bits 1 et 3 sans modifier les autres bits dans le mot
10010001B:
10010001
0 0 0 0 1 0 1 0 ← masque
10011011
◼ Remarque: L’un des OP1 ou OP2 doit être un registre (adressage direct).
FSO Pr. Khadija LAAROUSSI 288
Jeu d’instructions
Instructions logiques: OU exclusif
◼ Syntaxe: XOR OP1,OP2
◼ Description: L’opération effectuée est : OP1 ← OP1 ⨁ OP2.
◼ Exemple:

mov AL,10010110B AL= 1 0 0 1 0 1 1 0


mov BL,11001101B BL= 1 1 0 0 1 1 0 1
xor AL, BL AL= 0 1 0 1 1 0 1 1
◼ Application: mise à zéro d’un registre.
◼ Exemple :
mov AL, 25
AL=0
xor AL, AL

◼ Remarque: L’un des OP1 ou OP2 doit être un registre (adressage direct).

FSO Pr. Khadija LAAROUSSI 289


Jeu d’instructions
Instructions logiques: Complément à 1 et à 2
Complément à 1:
◼ Syntaxe: NOT OP
◼ Description: L’opération effectuée est : OP ← 𝑂𝑃
◼ Exemple:
mov AL,10010110B AL= 1 0 0 1 0 1 1 0
not AL AL= 0 1 1 0 1 0 0 1
Complément à 2:
◼ Syntaxe: NEG OP
◼ Description: L’opération effectuée est : OP ← 𝑂𝑃 + 1
◼ Exemple:

mov AL,00110111B
AL=11001001
neg AL
◼ Remarque: OP peut être un registre ou une variable.
FSO Pr. Khadija LAAROUSSI 290
Jeu d’instructions
Instructions logiques: Décalage logique à droite (Shift Right)
◼ Syntaxe: SHR opérande, n
◼ Description: Cette instruction décale l’opérande de n positions vers
la droite.
◼ Exemple: avant
1 1 0 0 1 0 1 1
mov AL,11001011B
après CF
shr AL,1
0 1 1 0 0 1 0 1 1

◼ Entrée d’un 0 à la place du bit de poids fort, le bit sortant passe à


travers l’indicateur de retenue CF.

◼ Remarque: Opérande peut être un registre ou une variable.

FSO Pr. Khadija LAAROUSSI 291


Jeu d’instructions
Instructions logiques: Décalage logique à gauche (Shift Left)
◼ Syntaxe: SHL opérande, n
◼ Description: Cette instruction décale l’opérande de n positions vers
la gauche.
◼ Exemple: avant
1 1 0 0 1 0 1 1
mov AL,11001011B
CF après
shl AL,1
1 1 0 0 1 0 1 1 0

◼ Entrée d’un 0 à la place du bit de poids faible, le bit sortant passe à


travers l’indicateur de retenue CF.
◼ Remarque: Opérande peut être un registre ou une variable.

FSO Pr. Khadija LAAROUSSI 292


Jeu d’instructions
Instructions logiques: Décalage arithmétique
◼ Décalage arithmétique vers la droite
◼ Syntaxe: SAR opérande, n
◼ Description: Ce décalage conserve le bit de signe bien que celui-ci soit
décalé.
◼ Exemple: avant
1 1 0 0 1 0 1 1
mov AL,11001011B CF
après
sar AL,1
1 1 1 0 0 1 0 1 1

- Le bit de signe est réinjecté.


▪ Décalage arithmétique vers la gauche
◼ Syntaxe: SAL opérande, n
◼ Description: Identique au décalage logique vers la gauche (SHL).
◼ Remarque: Opérande peut être un registre ou une variable.
FSO Pr. Khadija LAAROUSSI 293
Jeu d’instructions
Instructions logiques: Rotation à droite (Rotate Right)
◼ Syntaxe: ROR opérande,n
◼ Description: Cette instruction décale l’opérande de n positions vers
la droite et réinjecte par la gauche les bits sortant.
◼ Exemple:
avant
1 1 0 0 1 0 1 1
mov AL,11001011B
après CF
ror AL,1
1 1 1 0 0 1 0 1 1

- Réinjection du bit sortant qui est copie dans l’indicateur de retenue


CF.
◼ Remarque: Opérande peut être un registre ou une variable.

FSO Pr. Khadija LAAROUSSI 294


Jeu d’instructions
Instructions logiques: Rotation à gauche (Rotate Left)
◼ Syntaxe: ROL opérande, n
◼ Description: Cette instruction décale l’opérande de n positions vers
la gauche et réinjecte par la droite les bits sortant.
◼ Exemple:
avant
1 1 0 0 1 0 1 1
mov AL,11001011B
CF après
rol AL,1
1 1 0 0 1 0 1 1 1

- Réinjection du bit sortant qui est copié dans l’indicateur de retenue


CF.

◼ Remarque: Opérande peut être un registre ou une variable.

FSO Pr. Khadija LAAROUSSI 295


Jeu d’instructions
Instructions logiques
Rotation à droite avec passage par l’indicateur de retenue (Rotate
Right through Carry)
◼ Syntaxe: RCR opérande,n
◼ Description: Cette instruction décale l’opérande de n positions vers la
droite en passant par l’indicateur de retenue CF.
◼ Exemple:
avant
Valeur
mov AL,11001011B précédente 1 1 0 0 1 0 1 1
rcr AL,1 de CF
après CF

x 1 1 0 0 1 0 1 1

- Le bit sortant par la droite est copie dans l’indicateur de retenue CF et la


valeur précédente de CF est réinjecté par la gauche.
◼ Remarque: Opérande peut être un registre ou une variable.
FSO Pr. Khadija LAAROUSSI 296
Jeu d’instructions
Instructions logiques
Rotation à gauche avec passage par l’indicateur de retenue (Rotate
Left through Carry)
◼ Syntaxe: RCL opérande,n
◼ Description: Cette instruction décale l’opérande de n positions vers la
gauche en passant par l’indicateur de retenue CF.
◼ Exemple:
avant
Valeur
1 1 0 0 1 0 1 1 précédente
mov AL,11001011B
après de CF
rcl AL,1 CF
1 1 0 0 1 0 1 1 x

- Le bit sortant par la gauche est copie dans l’indicateur de retenue CF et la


valeur précédente de CF est réinjectée par la droite.
◼ Remarque: Opérande peut être un registre ou une variable.
FSO Pr. Khadija LAAROUSSI 297
Jeu d’instructions
Instructions de branchement
◼ Les instructions de branchement (ou saut) permettent de
modifier l’ordre d’exécution des instructions du
programme en fonction de certaines conditions.
◼ Il existe trois types de sauts :
- Saut inconditionnel.
- Saut conditionnel.
- Appel de sous-programme.

FSO Pr. Khadija LAAROUSSI 298


Jeu d’instructions
Instructions de branchement: Saut inconditionnel
◼ Cette instruction effectue un saut (jump) vers le label (étiquette) spécifié.
◼ Syntaxe:
JMP label
◼ Un label est une représentation symbolique d’une instruction en mémoire. Pour
déclarer un label, il suffit de taper son nom suivi de deux points, « label : ».
◼ Exemples:
.
boucle : inc ax
. Instructions avant le saut inconditionnel dec bx
.
jmp boucle
jmp suite
Instructions suivant le saut (jamais exécutées) Boucle infinie
Suite : …. Instructions exécutées après le saut (saut en arrière)

▪ Remarque: L’instruction JMP (adressage relatif): l’adresse est calculée en


fonction du contenu du registre IP. Elle ajoute au registre IP un déplacement
codé en complément à 2.
FSO Pr. Khadija LAAROUSSI 299
Jeu d’instructions
Instructions de branchement: Saut inconditionnel
▪ Exemple:
mov ax, 5 ; mettre 5 à ax
mov bx, 2 ; mettre 2 à bx
jmp Addition ; aller à « Addition »
Back :
jmp Stop ; aller à « Stop »
Addition :
add ax, bx ; ajouter bx à ax.
jmp Back ; aller à « Back »
Stop :
ret; retourner au système d’exploitation.
FSO Pr. Khadija LAAROUSSI 300
Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Indicateurs d’état
◼ L’instruction de saut conditionnel effectue un saut, vers le label spécifié, si
une certaine condition est vérifiée sur l’état des indicateurs d’état (flags).
◼ Si la condition n’est pas réalisée, le processeur ignore cette instruction et
passe automatiquement à l’instruction d’après.
◼ Syntaxe:
Jcondition label
◼ Exemple:
.
. Instructions avant le saut conditionnel
.
JZ Suite
Instructions exécutées si la condition 𝑍𝐹 = 0 est vérifiée.
Suite : …. Instructions exécutées à la suite du saut (Jump if Zero, saut si 𝑍𝐹 = 1)

FSO Pr. Khadija LAAROUSSI 301


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Indicateurs d’état
◼ Les indicateurs d’états les plus utilisés dans les sauts conditionnels sont:
- CF (Carry Flag): Indicateur de retenue, si la dernière opération a générée une
retenue (mode non-signé) on a 𝑪𝑭 = 𝟏, sinon 𝑪𝑭 = 𝟎.
- PF (Parity Flag): Indicateur de parité, 𝑷𝑭 = 𝟏 si le nombre de 1 est pair dans les 8
bits du poids faible du résultat de la dernière opération, sinon 𝑷𝑭 = 𝟎.
- ZF (Zero Flag): Indicateur de zéro, 𝐙𝑭 = 𝟏 si tous les bits d’un résultat d’une
opération (arithmétique ou logique) sont à 0, 𝐙𝑭 = 𝟎 sinon. Il permet notamment de
déterminer si deux valeurs sont égales, en effectuant leur soustraction, puis en
observant l’état de l’indicateur de zéro.
- SF (Sign Flag): Indicateur de signe, si la dernière opération a générée un résultat
négatif 𝐒𝑭 = 𝟏 , à 0 s’il est positif ou nul.
- OF (Overflow Flag): Indicateur de débordement, 𝐎𝑭 = 𝟏 s’il y’a un débordement
de capacité après une opération arithmétique signée sur les entiers, 𝐎𝑭 = 𝟎 sinon.
▪ Remarque: Les indicateurs sont positionnées en fonction du résultat de la dernière
opération.
FSO Pr. Khadija LAAROUSSI 302
Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Indicateurs d’état: Exemples
Instruction Nom Condition
JE label Jump if Equal Saut si 𝑍𝐹 = 1
JNE label Jump if Not Equal Saut si 𝑍𝐹 = 0
JZ label Jump if Zero Saut si 𝑍𝐹 = 1
JNZ label Jump if Not Zero Saut si 𝑍𝐹 = 0
JC label Jump if Carry Saut si C𝐹 = 1
JNC label Jump if Not Carry Saut si C𝐹 = 0
JS label Jump if Sign Saut si S𝐹 = 1
JNS label Jump if Not sign Saut si S𝐹 = 0
JO label Jump if Overflow Saut si O𝐹 = 1
JNO label Jump if Not Overflow Saut si O𝐹 = 0
JP label Jump if Parity Saut si P𝐹 = 1
JNP label Jump if Not Parity Saut si P𝐹 = 0
FSO Pr. Khadija LAAROUSSI 303
Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Indicateurs d’état
◼ Exemple 1:
Les indicateurs d’état après l’opération suivante 0110 + 0101 sont
comme suit :
- OF = 1 : la somme de deux nombres positifs est négative.
- ZF = 0 : le résultat de la somme 1011 n’est pas nul.
- SF = 1 : le signe du résultat est négatif.
- CF = 0 : il n’y a pas de retenue.

+ 0110
0101
= 1011

FSO Pr. Khadija LAAROUSSI 304


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Indicateurs d’état (Flags)
◼ Exemple 2: Soit le code suivant

include irvine32.inc
.code
main PROC
mov al,+127 + 01111111
add al,1 00000001
call dumpregs ; pour afficher les indicateurs et les registres = 10000000
exit
main endp
end main
◼ Résultat :
CF = 0 ; SF = 1 ; ZF = 0 ; OF = 1 ; eax = 77603680.

FSO Pr. Khadija LAAROUSSI 305


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Arithmétique
◼ L’instruction de saut conditionnel arithmétique effectue un saut, vers le label
spécifié, si une condition arithmétique est satisfaite.
◼ Syntaxe: Jcondition label
◼ Ce type d’instruction doit suivre l’instruction de comparaison suivante:
CMP opérande1,opérande2
où :
- Opérande1 est le paramètre permettant d’indiquer l’opérande de base sur
lequel l’opération de comparaison est effectuée.
- Opérande2 est le paramètre permettant d’indiquer l’opérande supplémentaire
avec laquelle la comparaison est effectuée.
◼ L’instruction CMP offre la possibilité de comparer deux registres ou deux
emplacements de mémoire.
◼ Le résultat de la comparaison est indiqué par les indicateurs d’état (flags). CMP
affecte juste les drapeaux (flags) et ne garde pas le résultat.
FSO Pr. Khadija LAAROUSSI 306
Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Arithmétique: Branchements conditionnels non-signés
Instruction Description
JA label Jump Above (Saut si supérieur x > 𝑦, ZF = 0 ou CF = 0, non-signé)
JNA label Jump if Not Above = JBE
Jump if Above or Equal (Saut si supérieur ou égal, CF = 0, non-
JAE label
signé)
JNAE label Jump if Not Above or Equal = JB
JB label Jump Below (Saut si inférieur, non-signé, CF = 1 )
JNB label Jump if Not Below = JAE
Jump if Below or Equal (Saut si inférieur ou égal CF = 1 ou ZF = 1,
JBE label
non-signé)
JNBE label Jump if Not Below or Equal = JA

FSO Pr. Khadija LAAROUSSI 307


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Arithmétique: Branchements conditionnels signés
Instruction Description
JG label Jump Greater (Saut si supérieur x > 𝑦, signé, ZF = 0 ou SF = 0)
JNG label Jump if Not Greater
JGE label Jump if Greater or Equal (Saut si supérieur ou égal SF = 0)
JNGE label Jump if Not Greater or Equal = JL
JL label Jump Less (Saut si inférieur x < 𝑦 signé, SF ≠ 0)
JNL label Jump if Not Less = JGE
JLE label Jump if Less or Equal (Saut si inférieur ou égal, ZF = 1 et SF ≠ 0)
JNLE label Jump if Not Less or Equal = JG

FSO Pr. Khadija LAAROUSSI 308


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Arithmétique: Exemple

cmp ax, bx ; comparer ax et bx


jg Supérieur ; si ax > bx, sauter à l’étiquette Supérieur
jl Inférieur ; si ax < bx sauter à l’étiquette Inférieur
Supérieur:…..
.
.
.
Inférieur:….
.
.
.

FSO Pr. Khadija LAAROUSSI 309


Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Exemple 1:
Include Irvine32.inc
.data
msg1 BYTE "Non",0
msg2 BYTE "Oui",0
.code
main PROC
mov al, 25 ; mettre 25 à AL (AL registre de 8 bits)
mov bl, 10 ; mettre 10 à BL
cmp al, bl ; comparer al - bl (ZF = ?)
je egalite ; sauter vers le label egalite si al = bl (i.e si ZF = 1)
mov edx,OFFSET msg1 ; mettre le message msg1 dans le registre edx
call writestring ; si tu arrives içi, alors al ≠ bl donc afficher ’non’
jmp stop ; aller à stop (pour ne pas afficher m2)
egalite : ; si tu es là alors al = bl
mov edx,OFFSET msg2 ; mettre le message msg2 dans le registre edx
call writestring ; afficher ’oui’ et on sort du programme
stop :
ret
main ENDP
END main
FSO Pr. Khadija LAAROUSSI 310
Jeu d’instructions
Instructions de branchement: Saut conditionnel
▪ Exemple 2
◼ Considérons le code en C suivant :
if (AX == 3)
BX = 5 ;
else
BX = DX;
◼ Le code suivant est un équivalent en assembleur du code précédent :

CMP AX, 3
JNE elsee ; si pas égal, on saute au label elsee
mov BX, 5 ; sinon si égal, on affecte 5 à BX
JMP endiff ; on saute au label endiff
elsee :
mov BX, DX
endiff :
FSO Pr. Khadija LAAROUSSI 311
Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Tant-Que
◼ En assembleur, il n’existe pas de structure générale pour utiliser les boucles. On
va coder les boucles en utilisant seulement les instructions de branchement.
◼ La structure de la boucle Tant-Que dans un langage haut niveau est :

Tant-Que (condition) Faire


action
Fin-TQ
◼ Cela va se traduire en assembleur sous la forme suivante :
Tant-Que :
Jcc Fin-TQ
action
...
JMP Tant-Que
Fin-TQ : ...
FSO Pr. Khadija LAAROUSSI 312
Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Tant-Que

- Jcc est l’une des instructions de saut conditionnel.
- Tant-Que est un label indiquant le début de la boucle.
- La boucle commence par une évaluation de la condition qui positionne
les indicateurs du registre FLAGS.
- en fonction de la valeur des indicateurs (donc du résultat de la condition),
un saut conditionnel est effectué au label Fin-TQ indiquant la fin de la
boucle.
- Le corps de la boucle se termine par une instruction de saut
inconditionnel vers le début de la boucle (JMP Tant-Que) qui permettra
de réévaluer la condition d’arrêt après chaque itération.

FSO Pr. Khadija LAAROUSSI 313


Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Tant-Que: Exemple
◼ Soit le code en C suivant :
int compteur = 0 ;
while (compteur < 10)
compteur++;
◼ L’équivalent en assembleur du code précédent est le suivant :

mov ax, 0
TantQue :
cmp ax, 10
JAE FinTQ ; Si ax>=10, on saute au label FinTQ
INC ax
JMP TantQue
FinTQ :

FSO Pr. Khadija LAAROUSSI 314


Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Répéter
◼ La structure de la boucle Répéter dans un langage haut niveau est :
Repeter
action
Jusqu’à (condition vraie)
◼ Cela va se traduire en assembleur sous la forme suivante :
Repeter :
action
...
calcul de la condition
Jcc Repeter
dans ce code on trouve :
- un label Repeter repère le début de la boucle et suivi du corps de la boucle.
- à l’issue de l’exécution du corps, on trouve l’évaluation du test d’arrêt qui positionne les
indicateurs du registre FLAGS.
- une instruction de saut conditionnel effectue un branchement au label Repeter pour continuer
les itérations si la condition d’arrêt n’est pas vérifiée.
FSO Pr. Khadija LAAROUSSI 315
Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Répéter
◼ Exemple: Écrire un code en assembleur qui permet de décrémenter le
registre ax jusqu’à qu’il soit nul.
Repeter :
dec ax
cmp ax, 0
jne Repeter
◼ Exemple :
mov ax,5
Repeter :
dec ax
cmp ax, 0
jne Repeter
FSO Pr. Khadija LAAROUSSI 316
Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Pour (LOOP)
◼ La structure de la boucle Pour s’écrit de la manière suivante :
POUR indice := 1 à bs FAIRE
action
Fin-Pour
◼ En assembleur, il existe seulement des boucles ayant un indice variant
d’une certaine valeur bs à 1, en décrémentant sa valeur à chaque itération.
◼ La boucle précédente se transforme à la boucle suivante :
POUR indice := bs à 1, pas :=-1 FAIRE
action
Fin-Pour
◼ Cette boucle se traduit en assembleur de la manière suivante :
mov cx, bs
BPOUR :
action
LOOP BPOUR
FSO Pr. Khadija LAAROUSSI 317
Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Pour (LOOP)
◼ Syntaxe :
LOOP label

- le paramètre ’label’ permet d’indiquer l’emplacement où doit se
poursuivre l’exécution si la condition est vérifiée.
- Cette instruction de boucle permet de décrémenter le registre CX
(compteur de boucle) de 1.
- et par la suite de donner le contrôle à une étiquette (un label)
destinataire tant que le registre CX ne vaut pas 0.

FSO Pr. Khadija LAAROUSSI 318


Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Pour (LOOP)
◼ Exemple :
mov AX, 0
mov CX, 5
Boucle:
add AX, CX
LOOP Boucle

▪ C’est l’équivalent en C de :
for (cx=5 ; cx>0 ; cx- -)
ax = ax + cx ;

FSO Pr. Khadija LAAROUSSI 319


Jeu d’instructions
Instructions de branchement: Boucles
▪ Boucle Pour (LOOP):
◼ Exemple d’une boucle sans LOOP
- Dans cet exemple, on va donner l’équivalent en assembleur du code C
précédent sans utiliser LOOP :
mov AX, 0
mov CX, 0
Boucle :
CMP CX, 5
JG endBoucle ; si CX > 5, on sort de la boucle (vers le label endBoucle)
ADD AX, CX
INC CX
JMP Boucle
endBoucle:

FSO Pr. Khadija LAAROUSSI 320


Jeu d’instructions
Instructions de branchement: Sous-programme
◼ Un sous-programme (ou procédure) permet d’éviter la répétition
d’une même séquence d’instructions plusieurs fois dans un
programme.
◼ Il joue, en assembleur, le rôle des procédures et des fonctions dans les
langages de haut niveau (comme C et Java).
◼ Le sous-programme est défini une seule fois et peut être appelé
plusieurs fois.
◼ Remarques:
- Le programme appelant est le programme principal.
- La séquence appelée est un sous-programme.
- Un sous-programme peut être une fonction ou une procédure.

FSO Pr. Khadija LAAROUSSI 321


Jeu d’instructions
Instructions de branchement: Sous-programme
▪ Ecriture d’un sous-programme:
Nom_Sous_Programme PROC
.
. Instructions du sous-programme
.

ret Instruction de retour au programme principal


Nom_Sous_Programme ENDP
◼ Le sous-programme est identifié par la pseudo-instruction PROC, son nom
étant indiqué dans le champ label (ici c’est Nom_Sous_Programme). Ils
viennent après les instructions du sous-programme.
◼ L’instruction ret (pour return) permet de quitter un sous-programme en
retournant à l’appelant.
◼ La pseudo-instruction endp qui indique la fin du sous-programme.

FSO Pr. Khadija LAAROUSSI 322


Jeu d’instructions
Instructions de branchement: Appel de sous-programme
◼ L’instruction d’appel d’un sous-programme est :
call adresse

- adresse est un paramètre permettant d’indiquer l’adresse où est situé le sous-
programme.
- Cette instruction force le processeur à exécuter les instructions du sous-programme
indiqué par l’adresse d’appel avant de continuer.
- Dès que la routine est terminé, l’exécution reprendra son cours à l’instruction
suivant le call.
.
. Instructions précédant l’appel au sous-programme
.

call nom_sp Appel au sous-programme


.
. Instruction exécutées après le retour au programme principal
.

FSO Pr. Khadija LAAROUSSI 323


Jeu d’instructions
Instructions de branchement: Appel de sous-programme
◼ Lors de l’exécution de l’instruction call :
- Le contenu du registre EIP (qui contient l’adresse de la prochaine
instruction à exécuter) est empilé (copié) dans la pile puis l’adresse de la
première instruction du sous-programme est copiée dans EIP.
◼ Lors du retour au programme principal:
- L’instruction suivant le call doit être exécutée.
- L’adresse de retour (qui est déjà empilée dans la pile) est dépilée (copiée)
dans le registre EIP.
◼ Dans les anciens ordinateurs, le problème réside dans la manière dont on
doit mémoriser l’adresse de retour.
◼ Pour résoudre ce problème, les ordinateurs modernes utilisent une structure
de données fondamentale en informatique, c’est la pile.
◼ L’utilisation de la pile permet à un même sous-programme d’empiler
plusieurs adresses de retour, rendant ainsi possibles les appels récursifs.
FSO Pr. Khadija LAAROUSSI 324
Jeu d’instructions
Instructions de branchement: Appel de sous-programme
▪ Ordre d’exécution des instructions
Adresse Programme
1 Sous-programme
2
appel
X 3
6
5
4
appel 7
8 retour
Y
9

◼ Dans cet exemple, l’adresse de retour, c’est X pour le premier appel, et Y


pour le second appel.
FSO Pr. Khadija LAAROUSSI 325
Jeu d’instructions
Instructions pile
◼ La pile est une zone mémoire servant à stocker et à lire temporairement des
valeurs, elle fonctionne en mode LIFO (Last In, First Out).
◼ Les deux opérations possibles dans la pile sont:
- Empiler une donnée : Placer la valeur au sommet de la pile.
- Dépiler une donnée : Lire la valeur se trouvant au sommet de la pile.
◼ Le sommet de la pile est repéré par le registre ESP (stack pointer), donc ce
registre contient l’adresse de la donnée qui se trouve au sommet de la pile.

FSO Pr. Khadija LAAROUSSI 326


Jeu d’instructions
Instructions de pile: Empiler et dépiler des données
◼ En utilisant la pile, l’appel d’un sous-programme (call) est réalisé :
- en empilant la valeur courante de EIP (pour l’utiliser après pour le retour
de sous-programme, c’est l’adresse de retour);
- et en stockant dans EIP l’adresse d’appel du sous-programme (la valeur
de l’opérande fournie à l’instruction call).
◼ Le retour de sous-programme (ret) est réalisé :
- en dépilant le sommet de la pile dans le registre EIP;
- et en plaçant cette valeur dépilée dans le registre EIP. L’adresse de retour
doit donc nécessairement se trouver en sommet de pile.
◼ Remarques:
- Quand on empile ou on dépile une donnée, le pointeur de pile doit être mis
à jour pour indiquer le nouveau sommet de pile.
- Les opérations de la sauvegarde et de la restauration des contenus des
registres se font en utilisant la pile par les deux instructions PUSH et POP.
FSO Pr. Khadija LAAROUSSI 327
Jeu d’instructions
Instructions de pile: Empiler et dépiler des données
◼ L’instruction PUSH a la syntaxe suivante :
PUSH opérande
- où opérande peut être un registre, une adresse ou une valeur immédiate.
- PUSH met le contenu de l’opérande dans la pile et décrémente la valeur
de SP (on parle de l’empilement).
- Ainsi, l’instruction PUSH BX empile le contenu du registre BX dans la
pile.
◼ La syntaxe de l’instruction POP est comme suit :
POP opérande
- où opérande peut être un registre ou une adresse.
- POP récupère le contenu de la pile, le stocke dans l’opérande et
incrémente la valeur de SP (on parle de dépilement).
- Ainsi, l’instruction POP AX récupère le contenu du sommet de la pile et le
transfère dans AX.
FSO Pr. Khadija LAAROUSSI 328
Jeu d’instructions
Instructions de pile: Empiler et dépiler des données - Exemple
◼ Soit le programme assembleur suivant où on a met des adresses devant les
instructions pour illustrer le fonctionnement de l’appel d’un sous-programme.
◼ L’instruction CALL empile l’adresse 00000025 (adresse de retour) dans la pile, et
charge l’adresse du sous-programme 00000040 dans le registre EIP.
◼ L’instruction RET dépile (retire) l’adresse 00000025 de la pile et la place dans EIP.
ESP Main PROC
00000025 00000020 call MySub
00000040 00000025 mov eax, ebx
EIP …

Main ENDP
MySub PROC
ESP 00000040 mov eax,edx
00000025 …
00000025 …
EIP ret
MySub ENDP
FSO Pr. Khadija LAAROUSSI 329
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
Il existe deux façons de passer des paramètres à un sous-programme :
▪ Passage par registre :
- Dans ce mode de passage, le programme principal charge un registre
avec la valeur à passer et le sous-programme récupère la valeur dans ce
même registre.
- Les six registres eax, ebx, ecx, edx, edi et esi sont utilisés pour passer
les paramètres aux sous-programmes.
▪ Passage par pile :
- On stocke les valeurs dans la pile avant d’appeler le sous-programme,
puis on lit le contenu de la pile dans le sous-programme.
◼ Remarque : Le passage des paramètres par registre est très simple à
mettre en œuvre mais elle est très limitée, car on ne peut pas passer autant
de paramètres que l’on désire, à cause du nombre limité de registres.
FSO Pr. Khadija LAAROUSSI 330
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par registre – Exemple
- Écrire une procédure en assembleur qui calcule la somme de deux nombres entrés
par l’utilisateur.
INCLUDE Irvine32.inc call Somme
.data call writeint
msg1 BYTE "Entrer un entier : ",0 exit
msg2 BYTE "La somme est : ",0 main ENDP
.code Somme PROC
main PROC add eax, ebx
mov edx,offset msg1 ret
call WriteString Somme ENDP
call readint end main
mov ebx, eax
call WriteString
call readint
mov edx,offset msg2
call WriteString
FSO Pr. Khadija LAAROUSSI 331
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile
◼ Cette méthode de passage des paramètres consiste à stocker les
valeurs des paramètres dans la pile avant l’appel de la procédure
(grâce à l’instruction PUSH).
◼ Puis de lire le contenu de la pile grâce à un registre spécial (BP :
Base pointer) qui permet de lire des valeurs dans la pile sans les
dépiler, ni modifier le pointeur de sommet de pile (SP).
◼ Remarques :
- Le registre ESP contient au départ l’adresse supérieur de la pile.
- La pile est remplie au sens inverse: le premier élément est situé à
une adresse plus haute que le dernier.
- Nombre d’octets empilés et dépilés est toujours pair.
FSO Pr. Khadija LAAROUSSI 332
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile
◼ Soit le sous-programme Fonc(a, b, c). La fonction Fonc peut être appelée
comme suit:
0

ESP après CALL


push c &retour
Code

push b Pile CALL ESP avant CALL


a
push a
b
call Fonction
c
ESP initial

n
▪ Remarque: L'instruction call empile l'adresse de retour (l’adresse de l’instruction
suivante) et saute à l’adresse spécifiée par l’opérande
FSO Pr. Khadija LAAROUSSI 333
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile : Exemple
◼ Pour illustrer le passage de paramètres par pile, on prend l’exemple de sous-
programme qui calcule la factorielle d’un nombre (le nombre 5 par exemple).
◼ Code de l’appelant
INCLUDE Irvine32.inc
.code
main PROC
mov eax, 5
push eax
call factorielle
add esp, 4 ; on libère la zone de pile utilisée par le paramètre
call writeint
exit

FSO Pr. Khadija LAAROUSSI 334


Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile : Exemple
factorielle proc
push ebp ; la valeur du registre EBP est empilée
mov ebp, esp ; la valeur du registre de base EBP est initialisée avec la valeur du
sommet contenu dans ESP (la pile est vide : sommet = base). On peut accéder
maintenant à la valeur des paramètres via le registre EBP
push ecx
mov ecx, [ebp + 8] ; on met dans ecx la valeur contenue dans [ebp + 8] i.e 5
mov eax, 1
Boucle :
mul ecx
loop boucle
pop ecx
pop ebp
ret
factorielle endp
end main
FSO Pr. Khadija LAAROUSSI 335
Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile : Exemple

Remarques:
▪ Après l’exécution de toutes les instructions du sous-programme,
on doit retourner à l’appelant. La zone mémoire utilisée pour
stocker des paramètres doit être libérée (ici nous avons un seul
paramètre).
▪ Pour cela, on modifie simplement la valeur du registre ESP en lui
ajoutant la valeur 4 qui est le nombre d’octets occupés sur la pile
par la valeur empilée (si nous avons utilisé AX au lieu de EAX,
alors on doit ajouter seulement 2 à SP).

FSO Pr. Khadija LAAROUSSI 336


Jeu d’instructions
Appel de sous-programme: Passage des paramètres
▪ Passage par pile : Exemple
▪ La figure ci-dessous illustre l’état de la pile après l’exécution des
instructions du programme.

esp esp ecx


ebp ebp ebp
ebp
esp Adresse de retour Adresse de retour Adresse de retour
eax (le paramètre) Eax (le paramètre) Eax (le paramètre)

esp ebp
Adresse de retour esp Adresse de retour
Eax (le paramètre) Eax (le paramètre)
FSO Pr. Khadija LAAROUSSI 337
Jeu d’instructions
Appel de sous-programme: Variables locales
◼ Ces variables sont connues, uniquement, par le sous-programme où elles sont
déclarées. Par conséquent, la gestion des variables locales doit être réalisée
entièrement dans le sous-programme.
◼ La solution la plus simple consiste, donc, à réserver de la place dans la pile pour y
mettre les valeurs des variables locales.
◼ Le squelette d’un appel de sous-programme utilisant des variables locales est :
push bp
mov bp, sp
push registres ; on empile des registres
sub sp, n ; on réserve n octets pour les variables locales
...
corps du sous-programme
...
add sp, n ; on libère la zone de pile utilisée par les variables locales
pop registres
pop bp
ret
FSO Pr. Khadija LAAROUSSI 338
Jeu d’instructions
Appel de sous-programme: Variables locales
◼ Exemple :
Supposons que notre code :
- passe un paramètre, stocké dans le registre AX;
- enregistre la valeur du registre DI;
- réserve 8 octets pour stocker des variables locales.
▪ Code de l’appelant:
push ax
call sous-prog
add sp, 2
...

FSO Pr. Khadija LAAROUSSI 339


Jeu d’instructions
Appel de sous-programme: Variables locales - Exemple
◼ Code du sous-programme
sous-prog proc
push bp
mov bp, sp
push di
sub sp, 8 ; on réserve 8 octets pour les variables locales
...
traitement des variables locales
...
add sp, 8 ; on libère la zone de pile utilisée par les variables locales
pop di
pop bp
ret
sous-prog endp
FSO Pr. Khadija LAAROUSSI 340
Jeu d’instructions
Appel de sous-programme: Variables locales - Exemple
◼ La figure suivante illustre l’état de la pile après l’exécution des instructions.

SP après sub sp,8


8 octets pour les
variables locales
SP après push di
di
SP après push pb
BP après mov bp,sp bp
SP après call
Adresse de retour
SP avant call
ax
SP initial

▪ Remarque : L’accès aux variables locales se fera par un adressage du


genre [bp - 6] ... [bp + 4], selon la taille des données.
FSO Pr. Khadija LAAROUSSI 341
Jeu d’instructions
Appel de sous-programme: Fonctions
◼ En assembleur, une fonction est un sous-programme qui retournera une valeur. Par
convention, la valeur renvoyée est placée dans un registre, par exemple EAX.
◼ Voici un exemple qui calcule le carré d’un nombre entier (par exemple le nombre
5) en assembleur :
Code de l’appelé
Code de l’appelant
Carre proc
push 5 push ebp
call Carre mov ebp, esp
add esp, 4 mov eax, [ebp+8]; on met dans eax la valeur 5
call writeint mul eax
exit pop ebp
; ici eax contient 25 ret
Carre endp

▪ Le résultat est maintenant stocké dans le registre EAX. On peut l’utiliser (par
exemple l’afficher) dans le programme appelant.
FSO Pr. Khadija LAAROUSSI 342
Jeu d’instructions
Tableaux: Définition
◼ Un tableau est un ensemble de données qui sont toutes de mêmes type (octet,
word, …) , les données dans un tableau sont contiguës en mémoire.
◼ C’est donc une zone mémoire constituée de cases de taille identique.
◼ Le nombre de cases d’un tableau est connu au moment de sa déclaration et la
zone mémoire réservée à un tableau possède un début et une fin.
◼ En assembleur, un tableau se déclare dans le segment de données (DS). Il
existe deux types de tableaux :
- Tableau d’octets (ou de caractères) déclaré par le mot clé BYTE;
- Tableau d’entiers déclaré par les mots clés WORD, DWORD, etc.
◼ Remarques :
- Un tableau d’une chaîne de caractères est défini par le type BYTE (un octet
pour chaque élément) et où chaque caractère est présenté comme une valeur de
code ASCII. On ne peut pas utiliser le type WORD pour déclarer des chaînes
de caractères.

FSO Pr. Khadija LAAROUSSI 343


Jeu d’instructions
Tableaux: Déclaration
◼ Exemples:
a BYTE 48h, 65h, 6Ch, 6Ch, 6Fh, 00h
b BYTE ’Hello’, 0
c WORD 10,-9,45,3
- a est un tableau de type byte de 5 éléments.
- Le tableau b est exactement une copie du tableau a (une chaîne de
caractères se termine par 0).
- Le premier élément est initialisé avec le code ASCII de la lettre H
majuscule, le deuxième élément avec le code ASCII de la lettre e
minuscule, etc.
- Le tableau b constitue une chaîne de 5 caractères, les chaînes de
caractères étant simplement des tableaux d’octets en assembleur.
- c est un tableau de 4 mots initialisés par 10, -9, 45, 3.
FSO Pr. Khadija LAAROUSSI 344
Jeu d’instructions
Tableaux: Représentation en mémoire
◼ Les éléments d’un tableau sont rangés dans la mémoire à des
emplacements contigus (l’un après l’autre).
◼ La représentation des tableaux a et b en mémoire est :

Un indice

… 0 1 2 3 4 5 0 1 2

48 65 6C 6C 6F 00 48 65 6C …
a[0] a[1] a[2] a[3] a[4] a[5] b[0] b[1] b[2]

Un élément

FSO Pr. Khadija LAAROUSSI 345


Jeu d’instructions
Tableaux: Manipulation
◼ Pour accéder à une case d’un tableau, on utilise un indice qui repère
le numéro de la case à laquelle on fait référence.
◼ Le premier élément du tableau porte l’indice 0 et le ième élément porte
l’indice (i-1).
◼ Exemple :
mov AL, a[3]
enregistre le 4ème élément du tableau a dans le registre AL.
◼ On peut également utiliser l’un des registres BX, SI, DI, BP. Par
exemple :
mov SI, 3
mov AL, a[SI]
ce code est équivalent au premier.

FSO Pr. Khadija LAAROUSSI 346


Jeu d’instructions
Tableaux: L’opérateur DUP
◼ Pour déclarer un tableau, on peut utiliser l’opérateur DUP lorsqu’on
veut faire des répétitions.
◼ Syntaxe :
Nom_Tableau Type nombre DUP (valeur(s))
où :
- nombre est une constante indiquant le nombre de répétition.
- valeur est l’expression que DUP doit répéter.
◼ Exemples :
T1 BYTE 10 dup(?) ; T1 est un tableau de 10 octets non initialisés.
T2 BYTE 5 dup(9) ; T2 est un tableau de 5 octets initialisés par 9.
T3 WORD 4 dup(8) ; T3 est un tableau de 4 mots initialisés par 8.
T4 DWORD 6 dup(2) ; T4 est un tableau de 6 mots doubles initialisés par 2.
◼ Remarque : Un tableau initialisé doit être défini dans la directive .data.

FSO Pr. Khadija LAAROUSSI 347


Jeu d’instructions
Tableaux: L’opérateur DUP
◼ Exemples :
T1 dword 3 dup(?) T2 word 3 dup(?) T3 byte 3 dup(?) T4 byte "chaine",0
T1[0] T2[0] T3[0] c T4[0]
T3[1] h
T2[1] T3[2] a T4[2]
i
T1[1] T2[2] n
e
0 T4[6]

T1[2]

FSO Pr. Khadija LAAROUSSI 348


Jeu d’instructions
Tableaux: L’opérateur DUP :
▪ Exemple 1: Qu’affiche le programme suivant.
Include irvine32.inc
.data
a byte 48h,65h,6Ch,6Ch,6Fh
b byte "Hello", 0
.code
main PROC
mov edx, offset a[2]
call WriteString
call crlf
exit
main endp
end main
◼ Résultat : lloHello
Nous n’avons pas terminé le premier tableau a par 00h, c’est pourquoi que l’affichage
commence à a[2] et s’arrête au premier 0 rencontré. Donc, le code affiche llo du
tableau a suivi directement de Hello du tableau b.
FSO Pr. Khadija LAAROUSSI 349
Jeu d’instructions
Tableaux: L’opérateur DUP :
▪ Exemple 2 : Qu’affiche le programme suivant.
Include irvine32.inc
.data
a byte 48h,65h,6Ch,6Ch,6Fh,00h
.code
main PROC
mov edx, offset a[0]
call WriteString Résultat :
call crlf
mov edx, offset a[1] Hello
call WriteString
call crlf ello
mov edx, offset a[3] lo
call WriteString
call crlf
exit
main endp
end main

FSO Pr. Khadija LAAROUSSI 350


Chapitre 7:
Interruptions

FSO Pr. Khadija LAAROUSSI 351


Interruptions
Introduction
◼ Le microprocesseur ne peut exécuter qu’une seule instruction à la fois. Par
conséquent, le code du programme courant est exécuté de manière linéaire.
Mais qu’est ce qu’il arrive si un événement extérieur, par exemple la pression
d’une touche du clavier, demande l’attention de l’ordinateur ?
◼ La machine doit pouvoir réagir immédiatement, sans attendre que le
programme en cours d’exécution se termine. Pour cela, elle interrompt ce
dernier pendant un bref instant, le temps de traiter l’événement survenu puis
rend le contrôle au programme interrompu.
◼ Une interruption est un appel d’un sous-programme spéciale présente en
mémoire appelée ISR ( Interrupt Service Routine).
◼ L’appel se fait via l’instruction int 21h. Le registre ah contient un numéro qui
référence la fonctionnalité que l’on veut utiliser. Par exemple, on utilise le
numéro 9 pour afficher une chaîne de caractères, le numéro 1 pour saisir la
frappe d’un caractère au clavier, et le numéro 2 pour écrire un caractère à
l’écran.
FSO Pr. Khadija LAAROUSSI 352
Interruptions
Types d’interruptions
◼ Les interruptions se divisent généralement en trois catégories :
- Interruptions électroniques, par exemple : le clavier.
- Interruptions du BIOS, par exemple : l’accès aux disques.
- Interruptions du DOS, par exemple : l’accès aux systèmes de fichiers.
◼ Une autre façon de classifier les interruptions est la manière de son
déclenchement. Dans ce sens, on peut distinguer deux types :
- Interruptions matérielles : sont déclenchées par notre matériel. Par exemple,
lorsque nous appuyons sur une touche du clavier. Dans ce cas, aucun logiciel
n’intervient et le contrôle est passé directement à la routine qui gère le clavier.
- Interruptions logicielles : sont appelées par des instructions en langage
machine au sein d’un programme. Leur importance est capitale. En effet,
contrairement au langage C par exemple, l’assembleur ne dispose pas de
fonction préprogrammée. Chaque instruction doit être directement traduisible
en langage machine.
◼ Dans ce qui suit, nous intéressons aux interruptions logicielles du DOS.
FSO Pr. Khadija LAAROUSSI 353
Interruptions
Exemples d’interruptions du DOS
◼ Pour déclencher un événement tel que : écrire une chaîne de
caractères à l’écran, ou bien pour lire un caractère entré au clavier, on
procède de la même façon que le DOS lui-même. En effet, on
déclenche les interruptions appropriées à l’aide de l’instruction INT
du langage machine.
◼ INT est une routine du DOS (ou parfois du BIOS) qui fera tout le
travail. Les paramètres (ou leurs adresses) sont passés dans les
registres.
◼ Le microprocesseur 8086 peut gérer jusqu’à 256 interruptions ayant
des numéros codés sur 8 bits (0 à 255)
◼ C’est pourquoi qu’on fait recours à une liste des interruptions pour
travailler, par exemple celle de Ralph Brown.
FSO Pr. Khadija LAAROUSSI 354
Interruptions
Exemples d’interruptions du DOS
◼ Afficher un caractère à l’écran
▪ Le code ci-après affiche le caractère ’A’ à l’écran.

mov dl, ’A’


mov ah, 02
int 21h
En effet,
- la première instruction demande au processeur de mettre dans le registre
DL le code ASCII de la lettre ’A’, c’est-à-dire 65, ou 41h ;
- la deuxième instruction mis le nombre 2 dans le registre AH;
- la dernière instruction appelle l’interruption numéro 21h.
◼ Dans le code précédent, la fonction numéro 2 de l’interruption 21h sert à
écrire un caractère à l’écran. Il faut pour cela écrire le code ASCII du
caractère dans le registre DL et bien sûr placer le nombre 2 dans AH.
FSO Pr. Khadija LAAROUSSI 355
Interruptions
Exemples d’interruptions du DOS
◼ Afficher un message à l’écran
Le code suivant affiche le message ’Bonjour tout le monde’ à l’écran.
.data
message db ’Bonjour tout le monde $’, 13, 10
.code
mov ah, 09
mov dx, offset message
int 21h
end
▪ La chaîne de caractères doit se terminer par le caractère ’$’, c’est le caractère de fin
de chaîne sous DOS. Les caractères 13 et 10 sont les codes ASCII des deux
caractères constituant un retour-chariot.
▪ L’instruction mov dx, offset message pointe vers l’adresse du premier caractère de
la chaîne de caractères message. Puis, on appelle la fonction numéro 9 de
l’interruption 21h et on donne la main au DOS.
FSO Pr. Khadija LAAROUSSI 356
Interruptions
Exemples d’interruptions du DOS
◼ Saisir une frappe au clavier
▪ Saisir un caractère:
Le code suivant renvoie dans le registre al le code du caractère lu au
clavier.
mov ah, 01
int 21h

FSO Pr. Khadija LAAROUSSI 357


Interruptions
Exemples d’interruptions du DOS
◼ Lire l’heure courante
▪ La fonction 2ch de l’interruption 21h lit l’heure courante, telle qu’elle
est stockée dans l’ordinateur.

mov ah, 2ch


int 21h
▪ Après ce code, les informations de l’heure sont contenus dans les
registres comme ceci :
- Les heures dans ch.
- Les minutes dans cl.
- Les secondes dans dh.
- Les centièmes de secondes dans dl.

FSO Pr. Khadija LAAROUSSI 358


Interruptions
Exemples d’interruptions du DOS
◼ Lire la date courante
▪ La fonction 2ah de l’interruption 21h lit la date courante, telle qu’elle
est stockée dans l’ordinateur.
mov ah, 2ah
int 21h
▪ Après ce code, les informations de l’heure sont contenus dans les
registres comme ceci :
- Le jour de la semaine dans al, il est codé comme ceci : 0 pour le
dimanche, 1 pour le lundi, etc.
- L’année dans cx.
- Le mois dans dh.
- Le jour dans dl.
FSO Pr. Khadija LAAROUSSI 359

Vous aimerez peut-être aussi