Académique Documents
Professionnel Documents
Culture Documents
Module :
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
✓ Programmer en assembleur.
Chapitre 1:
𝑁(𝑏) = 𝑎𝑖 . 𝑏 𝑖
𝑖=0
Avec :
- 𝒃: est la base du système de numération utilisé.
- 𝒂𝒊: chiffre de rang 𝑖 avec 0 ≤ 𝒂𝒊 < 𝒃 .
- 𝒃𝒊 : pondération associée à 𝑎𝑖 .
𝑁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
◼ Exemples:
b30 b23 b0
b31
Signe S
▪ 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.
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.
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)
Socket du CPU
Unités d’Entrées/Sorties
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
Mémoire
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
x = (11)10 = (1011)2 10
9
= (00001011)2 8
7
◼ D’où, x est stocké à l’adresse 1. 6
Adresse 1
Mémoire Mémoire
Microprocesseur
cache centrale
Mémoire Mémoire
Processeur Bus local ou BSB
centrale cache
Bus mémoire
2
Succès de cache
Microprocesseur 1 2
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
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.
RAM
Mémoire Interface
Processeur
principale E/S
Largeur : 1
Bus parallèle
Socket du processeur
Connecteur AGP
Carte graphique Chipset Nord
Chipset Sud
Slots mémoire
Bios
Support du processeur
Connecteurs de stockage AM3+, LGA, Socket A
Caractéristiques
IDE, Floppy, SATA
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
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.
Audio
PS2
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.
Unités fonctionnelles
L2 cache L1 cache
(Données)
Unité de contrôle
Bus
Unité d’instruction
Registres
L1 cache
(Instructions)
Unité des gestion
des E/S
CO
Décodeur
Séquenceur
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
Registre adresse
LCO CCO ……………
……………
Décodeur
Accumulateur Bus d’adresses PSR
Registre d’état
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
Recherche de l’instruction
Exécution de l’instruction
Recherche de l’instruction
Exécution de l’instruction
Registre adresse
LCO CCO ……………
……………
Décodeur
Accumulateur Bus d’adresses PSR
Registre d’état
Horloge
EDA Top
UAL 18
Séquenceur
LEC ECR
Décodeur
Registre
Registre Instruction Mot
CEB
LMM EMM
CEA
CRI
Bus de données
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
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
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
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
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
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
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
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
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
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
Chapitre 4:
Introduction au Langage Assembleur
Ordre 3 : …
Programme en
Hiérarchie Langage assembleur
de traduction
Programme en Assembleur
Langage machine
Chargeur
en Mémoire
.data ?
nom type ?
◼ Exemple:
.data ?
a BYTE ?
b REAL4 ?
.const ; Constantes
v equ 10 ; v est une variable constante égale à 10.
Architecture Intel
d’adressage
SI SS
Registres
DI ES
BP PC
SP
GENERATION D’ADRESSES
&
BUS DE CONTROLE
Opérandes
Registres d'état
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
EFLAGS EIP
31 0 31 0
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
◼ 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
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.
0 00000h
0B560h
1B55Fh
Solution
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.
Inst. 1 LE DE CH EX ENR
Inst. 2
LE DE CH EX ENR
Inst.1
LE DE CH EX ENR
Time
◼ 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
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
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.
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.
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
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
INC source
- effectue : source = source + 1
◼ Exemple:
mov al, 3Fh
inc al
Résultat :
AL contient par suite la valeur 40h.
◼ Exemple:
mov al, 01h
dec al
Résultat :
AL contient par suite la valeur 00.
◼ Remarque: L’un des OP1 ou OP2 doit être un registre (adressage direct).
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
x 1 1 0 0 1 0 1 1
+ 0110
0101
= 1011
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.
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 :
mov ax, 0
TantQue :
cmp ax, 10
JAE FinTQ ; Si ax>=10, on saute au label FinTQ
INC ax
JMP TantQue
FinTQ :
▪ C’est l’équivalent en C de :
for (cx=5 ; cx>0 ; cx- -)
ax = ax + cx ;
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
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).
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
...
▪ 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.
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
T1[2]