Vous êtes sur la page 1sur 209

MICRO-ARCHITECTURE Introduction

DES PROCESSEURS
SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Domaines de l’Electronique et de l’Informatique :


Systèmes Electronique

Analogique

Numérique:
Processeurs

Informatique

Systèmes d’exploitation
Outils de développement
Langages de programmation

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Analogique Numérique

Les processeurs numériques offrent de nombreux


avantages (p/r aux analogiques):
•  Dépannage et maintenance •  Temps de développement (TTM)
•  Amélioration et mise à jour •  Consommation
•  Nombre de composants •  Coût
•  Encombrement •  Sensibilité aux perturbations
3 – copyleft
VUE MATÉRIELLE D’UN ORDINATEUR
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

¡  Un ordinateur est constitué de plusieurs parties :


§  souris
§  écran
§  clavier
§  unité centrale
§  lecteur de disquettes ...
¡  A l’intérieur de l’unité centrale
§  une carte mère
§  une carte vidéo
§  des disques ....
¡  Sur la carte mère
§  un microprocesseur
§  de la mémoire (ROM, RAM) ...
¡  Dans le microprocesseur est composé d’une puce
électronique
CONSTITUTION D’UNE PUCE
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR


¡  Une puce éléctronique est un carré de silicium constitué de millions de
transistors
¡  Avec les progrès:
+++de transistors, en conséquence, +++ de fonctions intégrés
¡  Elles sont généralement protégés dans un boîtier rectangulaire,
équipés sur 2 côtés opposés de broches (pattes) de connexion
permettant d'établir les connexions électriques avec l'extérieur du
boîtier.
¡  Historique de l’échelle d’intégration:

¡  Les techniques actuelles permettent des milliards de por tes. Leur


densité permet d'ef fectuer des calculs complexes à des vitesses
élevées.

VUE MACROSCOPIQUE D’UNE PUCE
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Décodeur Additionneur
Porte NAND
l’Electronique Numérique

Transistor MOS
Bascule
A la base de

Compteur

Multiplexeur …

Wafer
Processeur
Boîtier

Applications …

7 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Familles de Processeurs Numériques

Architectures à CPU Logique Programmable Spécialisés

GPU
Graphical
Processor Unit
GPP MCU DSP FPGA PLD (GPGPU
General Micro Digital Field Programmabl généralistes)
Purpose Controller Signal Programmabl e
APU
Processor Unit Processor e Logic
Accelerated
(spécialisé Gate Device
Processor
) Array
Unit
Desktop CPLD SPLD
Laptop SoC
Server System on Chip
MainFrame 8 – copyleft
Embedded Systems PAL GAL
SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

•  Focus sur les architectures à CPU :


Intéressons-nous aux familles de composants travaillant autour d’une voire plusieurs
unités centrales de traitement ou CPU’s. Dans les grandes lignes, tous possèdent la même
architecture : Une représentation fonctionnelle:
•  Les bloc sont des puces en silicium
•  Les buses des réseau de fils pour
faire communiquer les éléments
entre eux
•  Ces composant sont
Memory programmables et
reprogrammables
Peripherals (ex: les mises à jour installation d’un
Buses nouveau système)

Central
Processing
Unit
9 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Etudions le rôle de chaque élément constitutif de ce type d’architecture :

2 types d’informations sont stockés en mémoire :

Code exécutable ou code binaire ou programme ou


Memory instructions binaires: Nous parlerons de mémoire programme
(program memory)
Peripherals

Buses Données: Nous parlerons de mémoire donnée (data memory)

Central
Processing
Unit

10 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Etudions le rôle de chaque élément constitutif de ce type d’architecture :

Le CPU est une unité de traitement et donc bien plus


qu’une simple unité de calcul. Voici ses principales tâches :

•  Aller chercher le code présent en mémoire programme


Memory puis l’exécuter séquentiellement
Peripherals

Buses
•  Manipuler les informations présentes en mémoire
donnée ou dans des registres. Il est maître des bus.
Central
Processing
Unit

11 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Etudions le rôle de chaque élément constitutif de ce type d’architecture :

•  Une grande majorité des périphériques servent


d’interface avec l’extérieur du processeur. Prenons
quelques exemples : contrôleurs USB, Ethernet, FireWire,
graphique, série, …
Memory •  Tout périphérique, d’interface ou non, permet de
soulager le CPU en déportant des traitements. Prenons
Peripherals

Buses quelques exemples : DMA (accès mémoire autonome),


Timer (comptage) …

Central
Processing
Unit

12 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Etudions le rôle de chaque élément constitutif de ce type d’architecture :

Les bus permettent l’interconnexion et la communication


des différents éléments précédemment présentés. Il existe
différents types de bus : adresse, donnée, instruction et
contrôle
Memory Un bus est constitué d’un ensemble de conducteurs
physiques. De nombreux protocoles et standards existent dans
Peripherals

Buses le domaine du numérique.

Central
Processing
Unit

13 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Un GPP (General Purpose Processor) ou microprocesseur ou MPU (Micro Processor Unit)


n’est qu’un CPU. Il est généralement monté sur une carte mère incorporant des bus, les
mémoires principale et secondaire ainsi que certains périphériques.

Dans le monde des ordinateurs personnels, le leader des semi-conducteur


incontesté du marché en 2013 est le géant Américain Intel :

14 – copyleft
SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Observons les avantages et inconvénients des GPP à côté de solutions entièrement


intégrées (MCU, DSP, SoC..) :

Avantages :
•  Polyvalence (applications généralistes,TNSignal, pipeline ,superscalaire performant pour
code système, traitement d’image ...) et grande puissance de calcul
•  Grande communauté et grand nombre de ressources logicielles sur architectures x86
•  Grand nombre de drivers matériels

Inconvénients :
•  Encombrement (carte mère : bus, mémoires, périphériques ...)
•  Coût (en 2013, Intel Haswell processor i5-4430 entrée de gamme ~180€)
•  Consommation et échauffement (en 2012, corei7 ~15-20W vs Atom (dédié principalement
pour le mobile et les tablettes) ~2W)

15 – copyleft

SYSTÈMES ELECTRONIQUES –NUMÉRIQUES
DES TRANSISTORS AUX PROCESSEURS
FAMILLE DE PROCESSEURS
ARCHITECTURE À CPU
GENERAL PURPOSE PROCESSOR

Les principales applications grand public et donc grand volume des GPP’s sont bien
évidemment les ordinateurs de bureau ou desktop et les ordinateurs portables ou laptop :

16 – copyleft
MICRO-ARCHITECTURE Carte Mère
DES PROCESSEURS
CARTE MÈRE

¡  La carte-mère est en fait le système nerveux du pc.

¡  C’est le circuit imprimé principal de l’ordinateur.

¡  Elle supporte les principaux composants de l’ordinateur :

§  Le microprocesseur
§  La mémoire
§  Les contrôleurs de périphériques
§  Le chipset
§  …

¡  Les cartes mères du marché sont toutes différentes par les options qu’elles
proposent.

¡  Son choix est primordial si vous souhaitez pouvoir faire évoluer votre
configuration à moindre coût.
CARTE MERE
Structure – Architecture Core2 – Evolutions

Le principal rôle d’une carte mère est d’interconnecter les principaux


éléments constitutifs d’un processeur travaillant autour d’un CPU. Elle
embarque le plus souvent quelques périphériques standards (contrôleur
réseau Ethernet, codec audio, I/O héritées …) :

Mother Board

Memory
Slot

Peripherals
Peripherals

Buses Buses

Slot
Central
Processing
Unit
Slot

19Slot
– copyleft
CARTE MERE
Structure – Architecture Core2 – Evolutions

Elle est également chargée de répartir les alimentations et les références d’horloge des
différents composants embarqués.

Mother Board Clock Power

Memory
Slot

Peripherals
Buses

Slot
Central
Processing New
Peripheral
Unit Slot

Slot

20 – copyleft
L’HORLOGE SYSTÈME D E S C O M P O SA NT S

¡  L’horloge système permet la synchronisation des échanges entres


les composants.

¡  Elle émet des tops électroniques régulièrement, délivrés par un


système électronique dont l’élément principal est un quartz.

¡  A i n s i , l e s c o m p o s a n t s d u p c , v e r r o n t l e u r f r é q u e n c e d e
fonctionnement réglée, par l’intermédiaire d’un coefficient
multiplicateur appliquée sur l’horloge système.
CARTE MERE
Structure – Architecture Core2 – Evolutions

En 2012, le Taïwanais ASUS (ASUSTeK Computer, Inc) est le leader du


marché dans le design de carte mère avec plus de 30% du marché (autres
principaux acteurs : MSI, Intel …). Il fournit notamment des solutions pour
Apple, HP et Dell.
Aujourd'hui, 1 ordinateur sur 3 est équipé d'une carte mère ASUS.

Juste pour information, étudions la référence d’une carte mère ASUS.


Exemple de carte mère pour GPP Intel :

H61 = Chipset H61 Intel

P8H61-MLX
P = Intel MLX = différents jeu de périphériques
8 = Famille GPP = Corei7/5/3 embarqués, slots…

22 – copyleft
STRUCTURE – ARCHITECTURE CORE2 – EVOLUTIONS

¡  Intéressons-nous à l’architecture d’une carte mère


¡  Exemple: Intel Dell de 2006. CPU Core2 socket LGA 775 (boîtier) et
chipset G31 Express :
REPÉRAGE DES ÉLÉMENTS
LE BUS

¡  Un bus informatique est une voie de communication, formée d'un ou


plusieurs conducteurs, sur laquelle sont disposées plusieurs connexions.
¡  Schéma bloc d'un ordinateur
LE BUS

¡  Nous distinguons le bus de donnée du bus d'adressage et du bus de


contrôle.

¡  Le bus d'adressage (Address Bus) sur lequel le processeur envoie les


adresses des cellules mémoire et des entrées/sorties auxquelles il veut
accéder

¡  Le bus de données (Data Bus) est bidirectionnel puisque le processeur


l'utilise pour lire et pour écrire en mémoire ou dans les I/O

¡  Le bus de commande (Control Bus) véhicule tous les autres signaux.


Le CPU utilise l'un d'eux pour indiquer le sens des transferts sur le bus
de données (lecture ou écriture).
Un autre est utilisé par les mémoires pour signaler quand elles sont
prêtes pour répondre à une commande de lecture.
LA BANDE PASSANTE

¡  La bande passante, aussi appelée taux de transfert, représente le débit


maximum auquel peuvent circuler les données. Elle s'exprime en méga
octets par seconde (Mo/s).

Bande passante (en Mo/s) = largeur du bus (en octets) x fréquence (en Hz)

¡  Il y a deux manières d'accroître ce débit : élargir la voie de circulation


pour permettre le déplacement de plus de bits en parallèle ou accélérer
la cadence des échanges ( la fréquence)
L'ARCHITECTURE MULTI-BUS

¡  La dif férenciation des vitesses s'est marquée progressivement entre les


composants et l'architecture des bus a dû s'adapter pour que les
communications entre les composants restent possibles.

¡  La fréquence du processeur et des mémoires qui a progressivement


augmenté. La vitesse des unités E/S restait par contre limitée à 8  MHz.
Il a donc fallu trouver un procédé pour que les voies d'accès aux
mémoires soient plus rapides que celles qui mènent aux périphériques.

¡  Le bus qui relie le CPU à la mémoire cache est appelé bus processeur
ou "Back Side Bus" (BSB). Il est plus rapide que le bus système qui
relie le processeur à la RAM dynamique et qui depuis est souvent
nommé "Front Side Bus" (FSB). Ces bus tournent à la vitesse du
processeur. Leur fréquence convient aux mémoires mais les signaux
devaient être temporisés par un "pont" (bridge) pour en adapter la
cadence aux périphériques plus lents.
CARTE MERE
Structure – Architecture Core2 – Evolutions
Ÿ NorthBridge
Ÿ SouthBridge
Ÿ Chipset

Le northBridge est un composant matériel servant de passerelle entre CPU et fonctions


matérielles rapides (mémoire principale et vidéo):

CPU

FSB Front-Side Bus

DDR
Graphical

VGA
NorthBridge
Main
PCIe Memory

Les fonctions interfacées étant exigeantes en bande passante, les bus de communications
utilisés sont des bus parallèles relativement larges (DRR bus, PCIe x16).

29 – copyleft
CARTE MERE
Structure – Architecture Core2 – Evolutions
Ÿ NorthBridge
Ÿ SouthBridge
Ÿ Chipset

Le southBridge est un composant matériel servant de passerelle entre northBridge et les


interfaces ‘’plus lentes’’ (PCI, USB, S-ATA…):

CPU

FSB Front-Side Bus

DDR
Graphical

VGA
NorthBridge
Main
PCIe Memory

DMI Direct Media Interface

PS/2 LPC
serial Legacy PCI
parallel SouthBridge

BIOS S-ATA Hard Disk

Audio connectors
USB …

30 – copyleft
CARTE MERE
Structure – Architecture Core2. – Evolutions
Ÿ NorthBridge
Ÿ SouthBridge
Ÿ Chipset

On appel Chipset (jeu de composants) l’ensemble northBridge et southBridge. Intel étant


leader sur le marché des GPP, il l’est également sur celui des chipsets :

CPU

Chipset FSB Front-Side Bus

DDR
Graphical

VGA
NorthBridge
Main
PCIe Memory

DMI Direct Media Interface

PS/2 LPC
serial Legacy PCI
parallel SouthBridge

BIOS S-ATA Hard Disk

Audio connectors
USB …

31 – copyleft
CARTE MERE
Structure – Architecture Core2 – Evolutions

Carte Graphique
Externe sur PCIe
CPU Corei7
northBridge intégré
Legacy
Interface

SouthBridge
Integrated
Controller Hub

BIOS

Slots

http://www.intel.com
32 – copyleft
CARTE MERE
Structure – Architecture Core2 – Evolutions

La gamme Corei7 Sandy Bridge de Intel embarque notamment le northBridge (interface


PCIe, interface mémoire principale et sortie vidéo) :

•  Display
•  DMI
•  Miscellaneaous I/O
(PCIe, DMM..)

http://www.presence-pc.com
33 – copyleft
CARTE MERE
Structure – Architecture Core2 – Evolutions

Dans la suite de ce cours, nous allons nous attarder et voir plus en détail deux éléments clés
de l’architecture d’un ordinateur, à savoir le CPU et les mécanismes de gestion mémoire:

•  CPU (Architectures, jeux d’instruction, mécanismes d’optimisation..)

•  Mémoire (Registres, caches processeur, mémoire principale, segmentation, pagination,


protection..)

•  Carte mère en vidéo

Main
CPU Cache Memory

34 – copyleft
SÉANCE-2
VUE FONCTIONNELLE
DES SYSTÈMES À Rappelle

PROCESSEURS
ARCHITECTURE HAUTE PERFORMANCE
DES BUS

rapide

lent
LA VUE FONCTIONNELLE
LES MÉMOIRES
LA MÉMOIRE (PARTIE PASSIVE)

¡  Une mémoire est un circuit à semi-conducteur permettant


d’enregistrer, de conser ver et de restituer des informations
(instructions et variables).

¡  Stocke des informations utilisées par le processeur (partie active)

¡  Juxtaposition de cellules
(la plus petite quantité mémoire adadressable)
¡  Chaque cellule est numérotée (adresse)
¡  Généralement les mémoires sont adressables par octets
¡  Taille d'une cellule
– octet : 8 bits (byte)
– word : 16 bits, Double word : 32 bits, Quad word 64 bits, en
fonction des machines (16, 32 ou 64 bits)

¡  Notation :
– S i M désigne une cellule mémoire
– [M] représente son contenu
UN BOITIER MÉMOIRE

¡  Un boitier mémoire comprend en plus des fils d’adresses et


de données:
§  Une entrée de commande (R/W) qui permet de définir le type
d’action que l’on effectue avec la mémoire (lecture/écriture)
§  Une entrée de sélection CS qui permet de mettre les entrées/sorties
du boitier en haute impédance (pour la sélection de la mémoire
correspondante)
ORGANISATION D’UNE MÉMOIRE

¡  Organisation d’une mémoire:


ORGANISATION D’UNE MÉMOIRE

¡  Si les adresses des cases mémoires sont codées sur n bits, il


est possible de référencer au plus 2 n cases mémoire.

¡  Chaque case est remplie par un mot de données


§  Un mot représente un regroupement de bits
§  Sa longueur est toujours une puissance de 2

¡  Le nombre de fils d’adresses d’une mémoires définit le


nombre de cases mémoires qu’elle comprend.

¡  Le nombre de fils de données définit la taille des données que


l’on peut sauvegarder dans chaque case mémoire.
CARACTÉRISTIQUES DES MÉMOIRES
CARACTÉRISTIQUES DES MÉMOIRES
TEMPS DE CYCLE/ TEMPS D’ACCÈS
LES T YPES DES MÉMOIRES

• MÉMOIRE VIVE ou VOLATILE: RAM (à accès aléatoire)


Mémoire volatile
Cycle de lecture/écriture (@ bus d'adresse, D bus de donnée, CS, R/W)
Mémoire vive statique -> SRAM
Mémoire vive dynamique -> DRAM

• MÉMOIRE non VOLATILE:


Conserve l'information
ROM,
PROM,
EPROM(UVPROM),
EEPROM,
EEPROM Flash
LES MÉMOIRES VIVES OU VOLATILES:
RAM
LES MÉMOIRES VIVES OU VOLATILES:
RAM
LES MÉMOIRES VIVES OU VOLATILES:
RAM
LES MÉMOIRES VIVES OU VOLATILES:
RAM
LES MÉMOIRES VIVES OU VOLATILES:
RAM
LES MÉMOIRES NON VOLATILES
ROM
¡ Une mémoire morte, à lecture seule, leur contenu est
défini à la fabrication.

¡ Une matrice à 4 octets de diodes. L'adresse du mot à


lire agit sur un décodeur qui dans le schéma ci-
dessous est représenté symboliquement par un
commutateur à quatre positions (à gauche).

¡  L e c o d e l u e n s o r t i e d e l a m é m o i r e e s t u n e
combinaison de bits à 1 et à 0. Les niveaux '1' sont
fournis au travers de résistances électriques reliées à
la tension d'alimentation du circuit. Par endroits, des
diodes forcent les bits de la ligne sélectionnée vers
une tension qui correspond au niveau logique 0.
LES MÉMOIRES NON VOLATILES
PROM - EPROM
PROM: Ce sont des ROM programmables une seule fois,

§  Une matrice où les diodes sont remplacées par des fusibles,


§  A l’achat, tous les points mémoire sont contiennent des fusibles.
§  A garder pour écrire un ‘1’ ou griller pour écrire un ‘0’.

L'EPROM: "Erasable PROM" est effaçable.

On efface ces mémoires en les laissant 10 à 20 minutes sous des


rayons ultraviolets. Le composant possède une petite fenêtre qui
permet le passage des UV.
Une fois effacée, l'EPROM peut être reprogrammée.
LES MÉMOIRES NON VOLATILES
EEPROM – FEPROM
¡  EEPROM: "Electricaly Erasable PROM" est une EPROM qui
s'efface par des impulsions électriques.

¡  FEPROM: La Flash EPROM plus souvent appelée mémoire


Flash est un modèle de mémoire effaçable électriquement.
Les opérations d'effacement et d'écriture sont plus rapides
qu'avec les anciennes EEPROM. C'est ce qui justifie
l'appellation "Flash".
Cette mémoire, comme les autres ROM, conserve les données
même quand elle n'est plus sous tension. Ce qui en fait le
composant mémoire amovible idéal pour les appareils photos
numériques, les GSM, les PDA et l'informatique embarquée.
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
INTERFAÇAGE MICROPROCESSEUR/
MÉMOIRE
HIÉRARCHIE DES MÉMOIRES
HIÉRARCHIE DES MÉMOIRES
HIÉRARCHIE DES MÉMOIRES
HIÉRARCHIE DES MÉMOIRES
AVANTAGE HIÉRARCHIE DES MÉMOIRES
MÉMOIRES RAPIDES: REGISTRES

¡  Mémoire locale et privée du processeur


¡  Information temporaire
¡  Capacité limitée (1 à 128bits)

¡  Visibles ou invisibles (accessibles par l’utilisateur ou uniquement par le


processeur).

Exemple des processeurs Pentium :

Registres Généraux sur 32 bits : EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
(AX, BX, .. 16 bits)

Registre pointeur d’instruction : IP

Registre de segment : CS, DS, SS, ES, FS, GS

Registre d’état : FLAGS


MÉMOIRES RAPIDES REGISTRES

Registres généraux
– Accumulateurs pour opérations arithmétiques
– De taille fixe -> pentium 32 bits, 68000 32 bits
– Adressables sur 16 bits ou sur 8 bits :
• Registres de segment
– Registres utilisés pour pointer le début des zones mémoires
¡  CS Code Segment
¡  DS Data Segment
¡  SS Stack Segment
¡  ES, FS, GS Zones mémoires additionnelles
• Registre Pointeur d’instruction
– Contient l’adresse de la prochaine instruction à exécuter

• Registre d’état
¡  Contrôle et indique des opérations
¡  Indicateurs système
¡  Indicateurs application
MÉMOIRES RAPIDES REGISTRES

• Registres de gestion de la pile


– zone mémoire spécialisée
– mémorise les adresses d’appel et retour de sous programmes
MÉMOIRE CACHE ET MÉMOIRE VIRTUELLE

¡  M é m o i r e C a c h e : L a p r é s e n c e d e m é m o i r e c a c h e p e r m e t
d'accélérer l'exécution d'un programme`

¡  Le terme "mémoire" fait surtout référence la mémoire principale,


c'est à dire à la RAM, mais la gestion de celle-ci demande la
contribution de la mémoire auxiliaire (mémoire de masse,
spacieuse mais lente) et à la mémoire cache (rapide mais de
taille restreinte).

¡  La mémoire vir tuelle: est une fonctionnalité d'un système


d'exploitation (OS, Operating System) qui permet à un ordinateur
de compenser le manque de mémoire physique en transférant
temporairement des pages de données de la mémoire vive (RAM,
Random Access Memor y) vers un stockage sur disque.
MÉMOIRE CACHE
MÉMOIRE CACHE

¡  Une mémoire cache ou antémémoire est, en informatique, une


m é m o i r e q u i e n r e g i s t r e te m p o r a i r e m e n t d e s c o p i e s d e
données provenant d'une source, afin de diminuer le temps
d'un accès ultérieur (en lecture) d'un matériel informatique
(en général, un processeur) à ces données.

Problèmes
¡  Mémoire cache doit être petite (quelques centaines de Ko à
quelques dizaines de Mo) pour être efficace en terme de débit
¡  Ne peut donc pas y stocker tous les programmes en cours
d'exécution et leurs données
MÉMOIRE CACHE

¡  Algorithmes pour « deviner » et mettre dans le cache les données/


instructions avant que le CPU en ait besoin
¡  Recherche bon compromis entre tailles, types de cache (données/
instructions), niveaux de cache, techniques d'accès au cache ... pour
meilleures per formances

Principe de localité: pour le bon fonctionnement du cache :

¡  L o c a l i t é s p a t i a l e : l e c o d e d ’ u n p ro g r a m m e s ’ ex é c u te to u j o u r s à
l’intérieur de petites zones répétées de mémoire (des blocs
correspondant à des boucles ou/et des sous-programmes)
¡  Localité temporelle: les blocs s’exécutent en séquences très proches (il
y a plus de chances d’accéder à une position de mémoire utilisée il y a
10 cycles qu’à une autre utilisée il y a 10000 cycles)

¡  for (i=0; i < N; i++) somme += A[i];


¡  Localité spatiale : A[i] (A[i+1], A[i+2]...)
¡  Localité temporelle : N, A , i
ORGANISATION EN NIVEAUX

Cache est organisé en plusieurs niveaux:


¡  Jusqu'à 3 niveaux (L1 , L2 et L3)
¡  De rares processeurs avec un L4
¡  L3 généralement utilisé pour l'échange de données entre cores
dans un processeur multi-core
¡  L1 et L2 généralement spécifique à un core

¡  Cache L1 généralement scindé en 2 parties : un dédié aux


instructions et l'autre aux données

¡  Cache Li+1 joue le rôle de cache pour le niveau Li

¡  Cache Li+1 plus grand que Li mais moins rapide en temps


d'accès aux données
ACCÈS PAR LIGNES MÉMOIRE

¡  Note : dans les transparents qui suivent, pour simplifier les


explications, on considère que l'on a qu'un seul niveau de
cache
¡  Mémoire cache = sous-partie de la mémoire centrale
¡  Comment est déterminée cette sous-partie ?
Principe
¡  Les échanges d'informations entre mémoire de niveaux
différents se font par blocs d'adresses consécutives
Une ligne mémoire cache
¡  Car ce n’est pas beaucoup plus coûteux de lire une ligne qu'un
seul mot
¡  Et s'adapte bien au principe de localité spatiale
ORGANISATION DU CACHE

¡  Donc le cache est organisé par lignes. Chaque ligne contient


une portion de 8 à 512 octets des données en mémoires et
une étiquette (tag en anglais) qui est l'adresse de ces
données en mémoire.
¡  Lorsque le micro-processeur veut accéder à la mémoire, il
compare l'adresse avec les étiquettes des lignes du cache. S'il
trouve l'adresse parmi les étiquettes, le micro-processeur
utilise directement les données du cache. On parle alors de
succès de cache. Sinon on parle de défaut de cache ou
d'échec de cache (cache miss).
¡  Les données qui ont été écrites dans le cache sont écrites en
mémoire centrale au moment où la ligne qui contient ces
d o n n é e s e s t l i b é r é e . Po u r s avo i r s i c e t te é c r i t u r e e s t
nécessaire, chaque ligne contient un bit appelé dirty bit qui
indique s'il y a eu au moins une écriture dans cette ligne.
LECTURE/DÉFAUTS DE CACHE
/POLITIQUE DE REMPLACEMENT
Défauts de cache
¡  Lecture: les données sont chargées de la mémoire centrale dans
le cache puis envoyées au micro-processeur.

¡  Ce chargement nécessite de libérer au préalable une ligne du


cache pour y placer les nouvelles données. Le choix de la ligne à
libérer est contrôlé par la politique de remplacement.
( https://fr.wikipedia.org/wiki/Algorithmes_de_remplacement_des_lignes_de_cache
LRU recently used , FIFO, Algorithme Aléatoire,LFU frequently used)

¡  Le chargement dans le cache des données à partir de la mémoire


centrale implique un délai puisque cette dernière est beaucoup
plus lente que le cache. Ce délai est par fois augmenté par le fait
qu'il faille copier en mémoire le contenu de la ligne libérée.
POLITIQUES D'ÉCRITURE

¡  La politique appelée write-through consiste à répercuter en


mémoire centrale chaque écriture dans le cache. Chaque
écriture dans le cache provoque alors une écriture en
mémoire centrale.

¡  À l'opposé, la politique write-back retarde au maximum les


écritures en mémoire centrale. Les données qui ont été
écrites dans le cache sont écrites en mémoire centrale au
moment où la ligne qui contient ces données est libérée. Pour
savoir si cette écriture est nécessaire, chaque ligne contient
un bit appelé dir ty bit qui indique s'il y a eu au moins une
écriture dans cette ligne.
POLITIQUES D'ÉCRITURE

Des politiques intermédiaires:

¡  Dans le cas du write-through: les écritures à faire peuvent être


mises en attente temporairement dans une file. Plusieurs
écritures consécutives à la même adresse peuvent ainsi être
répercutées par une seule écriture en mémoire.

¡  Dans le cas du Write-back: le cache peut anticiper l'écriture


en mémoire de certaines lignes modifiées du cache; Il profite
de périodes sans échange avec la mémoire pour écrire
cer taines lignes dont le dir ty bit est positionné. Cette
technique permet d'éviter l'écriture de la ligne au moment
celle-ci est libérée.
ASSOCIATIVITÉ

Mémoire cache, Contient des lignes de mots de la mémoire


centrale, Un élément crucial de l'efficacité du cache est de
retrouver rapidement si des données à une adresse mémoire
sont déjà dans le cache.

Trois méthodes pour gérer la correspondance entre une ligne


dans le cache et une ligne de la mémoire centrale:
Correspondance directe
Correspondance associative totale
Correspondance associative par ensemble

Associativité: Le nombre de lignes où peuvent être mises les


données à une adresse mémoire fixée, il est appelé
l'associativité du cache.
ASSOCIATIVITÉ

¡  Correspondance directe: Lorsque l'associativité est réduite à 1 ,


c'est-à-dire que les données de chaque adresse peuvent être
mises dans une seule ligne du cache, on parle de cache direct.
¡  Correspondance associative totale: Si au contraire l'associativité
est égale au nombre de ligne du cache, c'est-à-dire que chaque
donnée peut être mise dans n'importe quelle ligne du cache, le
cache est dit complètement associatif.
¡  Correspondance associative par ensemble: Si l'associativité est
un entier n, on parle de cache n-associatif (n-way en anglais).

¡  Les caches sont très souvent directs, 2-, 3- ou 4-associatifs mais


rarement plus.

Le cache de niveau 1 de l'Athlon est par exemple 2-associatif.


CACHES DIRECTS

¡  La ligne où sont placées les données à une adresse sont


généralement déterminés par des bits de poids faible de
l'adresse.
Plusieurs avantages:
¡  le numéro de la ligne est très facile à déterminer à partir de
l'adresse. Il suf fit en ef fet de comparer l'étiquette de la ligne
correspondante avec une partie de l'adresse. Comme la ligne est
unique, il est même possible de commencer la lecture du cache
pendant la comparaison de l'étiquette avec l'adresse. Si cette
comparaison révèle un défaut de cache, cette lecture anticipée
du cache est annulée.
¡  les bits utilisés pour déterminer la lignes n'ont pas à être stocker
dans l'étiquette, ce qui of fre un gains de quelques bits.
Inconvénients:
¡  Si un programme utilise simultanément deux parties de la
mémoire qui doivent aller dans la même ligne de cache, il peut
se produire de nombreux défauts de cache.
EXEMPLE 1: CACHE DIRECT

Soit un cache direct composé de


256 lignes contenant chacune 16
octets.

Comme chaque ligne contient 16


octets, les 4 bits de poids faible
de chaque adresse servent
uniquement à donner la position
(offset) des données dans la
ligne.
Comme le cache a 256 lignes,
les 8 bits suivants déterminent
la ligne où les données doivent
être placées.
EXEMPLE 2: CACHE DIRECT

•  Mémoire adressable par octet dont le bus d’adresse est de 32 bits.


•  Mémoire cache de 2 s Ko, dont les lignes ont une taille 256 bits.
(1 ko = 210 octets et 1 octet = 23 bits)

Une ligne du cache est de 2 5 octet, la mémoire étant adressable par octet, 5 bits
donc pour l’of f set.
La capacité du mémoire cache 2 s + 1 0 octets, donc cette mémoire est gérée par
2 s + 5 lignes de cache. Donc l’indice de la ligne est de s+5 bits.
Donc 2 2 2 - s éléments de la mémoire principale sont gérés par ligne de cache. Le
tag est donc de 22-s bits.
CACHE PLEINEMENT ASSOCIATIF

¡  Chaque ligne de la mémoire de niveau supérieur peut être écrite à


n'impor te quelle adresse de la mémoire cache.
¡  Cette méthode donne accès à de nombreuses possibilités.
¡  L'associativité complète n'est utilisée que dans les mémoires cache de
petite taille. Cela donne le découpage suivant de l'adresse :

Un cache de 256 bits par ligne pour une mémoire adressable par octet
CACHE N-ASSOCIATIF

Un compromis entre le "mapping" direct et complètement associatif


¡  La mémoire cache est divisée en ensembles (sets) de N lignes de cache.
¡  Une ligne de la mémoire de niveau supérieur est af fectée à un ensemble,
elle peut par conséquent être écrite dans n'impor te laquelle des voies i.e.
des N lignes de l'ensemble.

u  Ceci permet d'éviter de nombreux défauts de cache conflictuels.


À l'intérieur d'un ensemble, le mapping est Direct Mapped, alor s que le
mapping des N Sets est Full Associative.

En général, la sélection de l'ensemble est ef fectuée par :


Ensemble = Adresse mémoire mod (Nombre d'ensembles)
EXEMPLE: CACHE N-ASSOCIATIF

Reprenons l'exemple de la section précédente:


¡  Mémoire adressable par octet dont le bus d’adresse est de 32 bits.
¡  Mémoire cache de 2 s koctets mais constitué de 2 n voies et les lignes
de cache est de 256 bits= 2 5 octet.
¡  Le nombre de voies est en ef fet toujour s une puissance de 2 afin
d'obtenir un découpage simple de l'adresse mémoire.
¡  Ensemble = 2 n voies.

¡  La mémoire cache contient donc 2 s + 10 octets.


¡  Sachant qu'une ligne représente 256 bits, il y a donc 2 5 + n octets par
ensemble. Il y a donc 2 s + 5 - n ensemble. L'index est donc de s-n+5 bits.
¡  Le découpage de l’adresse est alors le suivant:
LA MÉMOIRE VIRTUELLE
PAGINATION
LA MÉMOIRE VIRTUELLE

¡  L ' e s p a c e d ' a d r e s s a g e d ' u n p r o c e s s u s , g é n é r é p a r l e s


compilateurs et les éditeurs de liens, constitue la mémoire
virtuelle du processus ou espace d'adressage logique.

¡  L’ensemble de son espace d’adressage (mémoire virtuelle) est


stocké sur disque.

¡  Pour exécuter un processus, le système d’exploitation charge en


mémoire uniquement une ou quelques unités (pages ou
segments) y compris celle qui contient le début du programme.

¡  Lorsqu’un processus est en cours d’exécution, seule une partie


de son espace d’adressage est en mémoire principale. Cette
partie est dite résidante. Les parties de cet espace d’adressage
sont chargées en mémoire principale à la demande.
LA MÉMOIRE VIRTUELLE

¡  E s p a c e d e s a d r e s s e s
virtuelles et espace
physique.

¡  L e p r o c e s s u s d a n s s o n
espace virtuel continu
comprend quatre pages : A,
B, C et D.

¡  Trois blocs sont situés dans


la mémoire physique et un
est sur le disque.
LES PROBLÈMES QUE TRAITENT LA
MÉMOIRE VIRTUELLE
¡  La capacité mémoire: Possibilité d’exécuter des processus
dont la taille excède la taille de la RAM,

¡  L a c o h a b i t a t i o n e n t r e p r o c e s s u s : E v i t e r l e s c o n f l i t s
d’adressage entre les processus, exécuter un processus dans
un espace d’adressage non continu (la mémoire est non
disponible en un seul bloc mais elle est fragmentée),

¡  C o nt rô le de par t ag e de s info rm at io ns e nt re pro c e s s us :


protéger les processus les uns des autres entre autre le
système d’exploitation … ou autoriser qu’une partie de la
mémoire d’un processus soit partagée…

¡  Utilité de la mémoire virtuelle | Renaud Lachaize


LA MÉMOIRE VIRTUELLE

¡  Utilisation de la mémoire secondaire «comme si» c’était de la


Mémoire centrale.
¡  Disponible à par tir des 80386 et 68030
¡  Gestion se fait au niveau du système d’exploitation
¡  Système de gestion de mémoire vir tuelle très sophistiqué

¡  Pagination :
¡  mono dimensionnelle
¡  mappage de l’espace d’adressage sur la mémoire physique.

¡  Les zones mémoires lues sur la mémoire secondaire sont le


pages de 4Ko
¡  Segmentation :
¡  possibilité d’avoir plusieur s espaces d’adressage vir tuels
¡  chaque espace est indépendant : les segments
¡  les segments sont de taille variable (limités à 64k)

¡ S ur les 80X86 la segmentation à été utilisée pour résoudre le


problème des adresses sur 20 bits
LA PAGINATION

¡  La mémoire virtuelle et la
mémoire physique sont
structurées en unités
d’allocations appelés
pages pour la mémoire
virtuelle et cases ou
cadres pour la mémoire
physique.
¡  La taille d’une page est
fixe et égale à celle d’un
cadre.
¡  Elle varie entre 2 Ko et 16
Ko. 4 Ko est une valeur
typique assez répandue.
LA PAGINATION

¡  Les adresses virtuelles, générées par les compilateurs et les


éditeurs de liens, sont des couples composés d'un numéro de
page et d'un déplacement relatif au début de la page.

¡  Les adresses virtuelles référencées par l'instruction en cours


d'exécution doivent être converties en adresses physiques.
Cette conversion d'adresse est effectuée parle MMU Unité de
gestion de la mémoire, qui sont des circuits matériels de
gestion.
LA PAGINATION

¡  Le MMU vérifie si l’adresse virtuelle reçue correspond à une


adresse en mémoire physique. Si c’est le cas, le MMU transmet
sur le bus de la mémoire l’adresse réelle, sinon il se produit un
défaut de page. Un défaut de page provoque un déroutement (ou
TRAP) dont le rôle est de ramener à partir du disque la page
manquante référencée.

¡  La correspondance entre les pages et les cases est mémorisée


dans une table appelée Table de pages (TP). Le nombre d’entrées
dans cette table est égal au nombre de pages virtuelles.

¡  La Table de pages d’un processus doit être (en totalité ou en


partie) en mémoire centrale lors de l’exécution du processus.
Elle est nécessaire pour la conversion des adresses virtuelles en
adresses physiques.
EXEMPLE

¡  S o i t u n p r o g r a m m e d e 6 4 K o s u r u n e
m a c h i n e 3 2 Ko d e m é m o i r e . S o n e s p a c e
d'adressage logique est sur le disque. Il
e s t c o m p o s é d e 16 p a g e s d e 4 Ko .

¡  L a m é m o i r e p hy s i q u e e s t s t r u c t u r é e e n 8
c a d r e s d e 4 Ko ,

¡  Q u a n d l e p r o g r a m m e te n te d ' a c c é d e r à
l ' a d r e s s e 0 ave c u n e i n s t r u c t i o n c o m m e
m ov w $ 0 , % e a x , l ' a d r e s s e v i r t u e l l e 0 e s t
e nvoy é e a u M M U .

¡  L e M M U c o n s t a te q u e c e t te a d r e s s e s e
t r o u ve d a n s l a p a g e 0 ( 0 K - 4 K ) , e t l a
t r a n s fo r m a t i o n d o n n e l a c a s e 2 ( 8 K - 1 2 K )
d a n s l a m é m o i r e p hy s i q u e . C e t te va l e u r
( 81 9 2 ) e s t m i s e d a n s l e b u s d u s y s t è m e .
Ainsi les adresses virtuelles entre 0 et
4095 sont transformées en adresses
Unité de gestion de la mémoire (MMU) p hy s i q u e s c o m p r i s e s e n t r e 81 9 2 à 1 2 2 87 .
EXEMPLE

L'adresse virtuelle est codée sur 16 bits. Les 4 bits de poids fort indiquent le numéro de page,
comprise entre 0 et 15. Les autres bits donnent le déplacement dans la page,
LANGAGE Génaralités
D’ASSEMBLAGE
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Un langage d’assemblage ou assembleur ou ASM est un


langage de programmation bas niveau représentant, sous forme
lisible pour un être humain, le code binaire exécutable par un
processeur (ou code machine). Prenons l’exemple d’une
instruction assembleur élémentaire raccrochée à aucune
architecture connue :
Étiquette ou Mnémonique ou
Adresse en mémoire dénomination de
programme l’instruction Opérandes destination)
(source et/ou

LABEL: ADD opSrc1, opSrc2,opDst3 ;commentaires


Adresse mémoire de
l’instruction
Binaire interprété par
0x7B68 0110011 001 010 011 la machine cible
(CPU)
98 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Hormis label et commentaires, en général à tout champ


d’une instruction assembleur correspond un champ dans le code
binaire équivalent. Ce code binaire ne peut être compris et
interprété que par le CPU cible.

LABEL: ADD opSrc1, opSrc2,opDst3 ;commentaires

0110011 001 010 011


N’est utilisé que
par les instructions
de branchement Opcode
ou
Code opératoire

99 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

L’assembleur est probablement le langage de programmation le


moins universel au monde. Il existe autant de langage
d’assemblage que de familles de CPU. Prenons l’exemple des jeux
d’instructions Cortex-M de ARM. La société Anglaise ARM propose
à elle seule 3 familles de CPU, cortex-M, -R, -A possédant chacune
des sous familles. Ne regardons que la famille cortex-M :
Cortex-Mx ARM Instruction set

100 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Observons les principaux acteurs dans le domaine des CPU’s.


Chaque fondeur présenté ci-dessous propose une voire plusieurs
architectures de CPU qui lui sont propres et possédant donc les
jeux d’instructions associés :
•  GPP CPU architectures : Intel (IA-32 et Intel 64), AMD (x86 et
AMD64), IBM (PowerPC), Renesas (RX CPU), Zilog (Z80),
Motorola (6800 et 68000) …

•  Embedded CPU architectures (MCU, DSP, SoC) : ARM (Cortex –


M –R -A), MIPS (Rx000), Intel (Atom, 8051), Renesas, Texas
Instrument (MSPxxx, C2xxx, C5xxx, C6xxx), Microchip (PICxx) ,
Atmel (AVR), Apple/IBM/Freescale (PowerPC) …

101 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Tout CPU est capable de décoder puis d’exécuter un jeu


d’instruction qui lui est propre (ou instruction set ou ISA ou
Instruction Set Architecture). Dans tous les cas, ces instructions
peuvent être classées en grandes familles :
•  Calcul et comparaison : opérations arithmétiques et logiques (en
C : +, -, *, /, &, |, ! ...) et opérations de comparaison, (en C : >=,
<=, !=, == …). Les formats entiers courts seront toujours
supportés nativement. En fonction de l’architecture du CPU, les
formats entiers long (16bits et plus) voire flottants peuvent l’être
également.
•  Management de données : déplacement de données dans
l’architecture matérielle (CPU vers CPU, CPU vers mémoire ou
mémoire vers CPU)
102 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

•  Contrôle programme : saut en mémoire programme (saut dans


le code). Par exemple en langage C : if, else if, else, switch, for,
while, do while, appels de procédure. Nous pouvons rendre ces
sauts conditionnels à l’aide d’opérations arithmétiques et
logiques ou de comparaisons.

Certaines architectures, comme les architectures


compatibles x86-64 (Intel et AMD), possèdent des familles
spécialisées :

•  String manipulation : manipulation au niveau assembleur de


chaînes de caractères.
•  Divers : arithmétique lourde (sinus, cosinus…), opérations
vectorielles (produit vectoriel, produit scalaire…) … 103 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC MIPS
Ÿ Jeu d’instruction CISC 8086

Les jeux d’instructions et CPU associés peuvent être


classés en 2 grandes familles, RISC et CISC, respectivement
Reduce et Complex Instruction Set Computer. Les architectures
RISC n’implémentent en général que des instructions
élémentaires (CPU’s ARM, MIPS, 8051, PIC18 …). A l’inverse, les
architectures CISC (CPU’s x86-64, 68xxx …) implémentent au
niveau assembleur des traitements pouvant être très complexes
(division, opérations vectorielles, opérations sur des chaînes de
caractères …).
Actuellement, la frontière entre ces deux familles est de
plus en plus fine. Par exemple, un jeu d’instructions des
processeurs spécialisés DSP de type RISC peut compter 323
instructions, c’est déjà beaucoup.
104 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086

Avantages architecture CISC :


•  Empreinte mémoire programme faible, donc plus
d’instructions contenues en cache (Mémoire plus proche du
processeur) . Néanmoins sur CPU CISC, en moyenne près de
80% des instructions compilées sont de types RISC.
•  Compatibles x86-64, rétrocompatibilité des applications
développées sur anciennes architectures.
Inconvénients architecture CISC :
•  Architecture CPU complexe (mécanismes d’accélération
matériels, décodeurs, …), donc moins de place pour le cache.

105 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086

Inconvénients architecture RISC :


•  Empreinte mémoire programme élevée, donc moins
d’instructions contenues en cache et mémoire principale.
Avantages architecture RISC :
•  Architecture du CPU moins complexe (mécanismes
d’accélération matériels, décodeurs, unités d’exécution …).
•  En général, tailles instructions fixes et souvent exécution en
un ou deux cycles CPU.
•  Jeu d’instructions plus simple à appréhender pour le
développeur et donc le compilateur. Jeu d’instructions très bien
géré par les chaînes de compilations (mécanismes
d’optimisation). Beaucoup d’architectures RISC récentes,
travaillent avec de nombreux registres de travail généralistes,
facilite le travail du compilateur. 106 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Exemples:
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086

Observons le jeu d’instructions complet d’un CPU RISC


8051 proposé par Intel en 1980. En 2012, cette famille de CPU,
même si elle reste très ancienne, est toujours extrêmement
répandue et intégrée dans de nombreux MCU’s ou ASIC’s (licence
libre). Prenons quelques exemples de fondeurs les utilisant : NXP,
silabs, Atmel …
8051 Intel CPU (only CPU) MCU Silabs with 8051 CPU
(1980) (2012)

107 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086
ACALL Absolute Call MOV Move Memory
ADD, Add Accumulator (With Carry) MOVC Move Code Memory
ADDC
AJMP Absolute Jump MOVX Move Extended Memory
ANL Bitwise AND MUL Multiply Accumulator by B
CJNE Compare and Jump if Not Equal NOP No Operation
CLR Clear Register ORL Bitwise OR
CPL Complement Register POP Pop Value From Stack

DA Decimal Adjust PUSH Push Value Onto Stack


8051 Instruction set

DEC Decrement Register RET Return From Subroutine


DIV Divide Accumulator by B RETI Return From Interrupt
DJNZ Decrement Register and Jump if Not RL Rotate Accumulator Left
Zero
INC Increment Register RLC Rotate Accumulator Left Through Carry
JB Jump if Bit Set RR Rotate Accumulator Right
JBC Jump if Bit Set and Clear Bit RRC Rotate Accumulator Right Through Carry
JC Jump if Carry Set SETB Set Bit
JMP Jump to Address SJMP Short Jump
JNB Jump if Bit Not Set SUBB Subtract From Accumulator With Borrow
JNC Jump if Carry Not Set SWAP Swap Accumulator Nibbles
JNZ Jump if Accumulator Not Zero XCH Exchange Bytes
JZ Jump if Accumulator Zero XCHD Exchange Digits
LCALL Long Call XRL Bitwise Exclusive OR
LJMP Long Jump
108 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086

Observons le jeu d’instructions complet d’un CPU 16bits


CISC 8086 proposé par Intel en 1978. Il s’agit du premier
processeur de la famille x86. En 2012, un corei7 est toujours
capable d’exécuter le jeu d’instruction d’un 8086. Bien sûr, la
réciproque n’est pas vraie.

8086 Intel CPU


(1978)

109 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086
AAA ASCII adjust AL after addition HLT Enter halt state
AAD ASCII adjust AX before division IDIV Signed divide
AAM ASCII adjust AX after multiplication IMUL Signed multiply
AAS ASCII adjust AL after subtraction IN Input from port
ADC Add with carry INC Increment by 1
ADD Add INT Call to interrupt

AND Logical AND INTO Call to interrupt if overflow


Original 8086 Instruction set

CALL Call procedure IRET Return from interrupt


CBW Convert byte to word Jcc Jump if condition
CLC Clear carry flag JMP Jump
CLD Clear direction flag LAHF Load flags into AH register
CLI Clear interrupt flag LDS Load pointer using DS
CMC Complement carry flag LEA Load Effective Address
CMP Compare operands LES Load ES with pointer
CMPSB Compare bytes in memory LOCK Assert BUS LOCK# signal
CMPSW Compare words LODSB Load string byte
CWD Convert word to doubleword LODSW Load string word
DAA Decimal adjust AL after addition LOOP/LOOPx Loop control
DAS Decimal adjust AL after subtraction MOV Move
DEC Decrement by 1 MOVSB Move byte from string to string
DIV Unsigned divide MOVSW Move word from string to string
ESC Used with floating-point unit MUL Unsigned multiply
110 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086
NEG Two's complement negation SCASB Compare byte string
NOP No operation SCASW Compare word string
NOT Negate the operand, logical NOT SHL Shift left (unsigned shift left)
OR Logical OR SHR Shift right (unsigned shift right)
OUT Output to port STC Set carry flag
POP Pop data from stack STD Set direction flag
POPF Pop data from flags register STI Set interrupt flag
Original 8086 Instruction set

PUSH Push data onto stack STOSB Store byte in string


PUSHF Push flags onto stack STOSW Store word in string
RCL Rotate left (with carry) SUB Subtraction
RCR Rotate right (with carry) TEST Logical compare (AND)
Repeat MOVS/STOS/CMPS/LODS/ WAIT Wait until not busy
REPxx
SCAS
XCHG Exchange data
RET Return from procedure
XLAT Table look-up translation
RETN Return from near procedure
XOR Exclusive OR
RETF Return from far procedure
ROL Rotate left
ROR Rotate right
SAHF Store AH into flags
Shift Arithmetically left (signed shift
SAL
left)
Shift Arithmetically right (signed shift
SAR
right)
SBB Subtraction with borrow 111 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions
Ÿ Jeu d’instruction RISC 8051
Ÿ Jeu d’instruction CISC 8086

Prenons un exemple d’instruction CISC 8086. Les deux


codes qui suivent réalisent le même traitement et permettent de
déplacer 100 octets en mémoire d’une adresse source vers une
adresse destination :

CISC RISC
MOV CX,100 MOV CX,100
MOV DI, dst MOV DI, dst
MOV SI, src MOV SI, src
REP MOVSB LOOP:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
DEC CX
JNX LOOP

112 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Extensions x86 et x64 n’opérant que sur des formats entiers :


CPU Nom Instructions
Architecture extension
- AAA, AAD, AAM, AAS, ADC, ADD, AND, CALL, CBW, CLC, CLD, CLI, CMC, CMP, CMPSzz, CWD, DAA, DAS, DEC, DIV, ESC, HLT,
8086 IDIV, IMUL, IN, INC, INT, INTO, IRET, Jcc, LAHF, LDS, LEA, LES, LOCK, LODSzz, LODSW, LOOPcc, MOV, MOVSzz, MUL, NEG,
Original x86 NOP, NOT, OR, OUT, POP, POPF, PUSH, PUSHF, RCL, RCR, REPcc, RET, RETF, ROL, ROR, SAHF, SAL, SALC, SAR, SBB,
SCASzz, SHL, SAL, SHR, STC, STD, STI, STOSzz, SUB, TEST, WAIT, XCHG,XLAT, XOR
80186/80188 - BOUND, ENTER, INSB, INSW, LEAVE, OUTSB, OUTSW, POPA, PUSHA, PUSHW
80286 - ARPL, CLTS, LAR, LGDT, LIDT, LLDT, LMSW, LOADALL, LSL, LTR, SGDT, SIDT, SLDT, SMSW, STR, VERR, VERW
- BSF, BSR, BT, BTC, BTR, BTS, CDQ, CMPSD, CWDE, INSD, IRETD, IRETDF, IRETF, JECXZ, LFS, LGS, LSS, LODSD, LOOPD,
80386 LOOPED, LOOPNED, LOOPNZD, LOOPZD, MOVSD, MOVSX, MOVZX, OUTSD, POPAD, POPFD, PUSHAD, PUSHD, PUSHFD,
SCASD, SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC,
SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ, SHLD,
SHRD, STOSD
80486 - BSWAP, CMPXCHG, INVD, INVLPG, WBINVD, XADD
Pentium - CPUID, CMPXCHG8B, RDMSR, RDPMC, WRMSR, RSM
- CMOVA, CMOVAE, CMOVB, CMOVB, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB,
Pentium pro CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNL, CMOVNLE, CMOVNO, CMOVNP, CMOVNS, CMOVNZ,
CMOVO, CMOVP, CMOVPE, CMOVPO, CMOVS, CMOVZ, RDPMC, SYSENTER, SYSEXIT, UD2
Pentium III SSE MASKMOVQ, MOVNTPS, MOVNTQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
Pentium 4 SSE2 CLFLUSH, LFENCE, MASKMOVDQU, MFENCE, MOVNTDQ, MOVNTI, MOVNTPD, PAUSE
Pentium 4 SSE3 LDDQU, MONITOR, MWAIT
Hyper Threading
Pentium 4 6x2 VMX VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON
X86-64 - CDQE, CQO, CMPSQ, CMPXCHG16B, IRETQ, JRCXZ, LODSQ, MOVSXD, POPFQ, PUSHFQ, RDTSC, SCASQ, STOSQ,113
SWAPGS
– copyleft
Pentium 4 VT-x VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Les extensions x87 ci-dessous n’opèrent que sur des


formats flottants. Historiquement, le 8087 était un coprocesseur
externe utilisé comme accélérateur matériel pour des opérations
flottantes. Ce coprocesseur fut intégré dans le CPU principal sous
forme d’unité d’exécution depuis l’architecture 80486. Cette
unité est souvent nommée FPU (Floating Point Unit).
CPU Nom Instructions
Architecture extension
- F2XM1, FABS, FADD, FADDP, FBLD, FBSTP, FCHS, FCLEX, FCOM, FCOMP, FCOMPP, FDECSTP, FDISI, FDIV, FDIVP, FDIVR,
FDIVRP, FENI, FFREE, FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FINCSTP, FINIT, FIST, FISTP, FISUB, FISUBR, FLD,
8087 FLD1, FLDCW, FLDENV, FLDENVW, FLDL2E, FLDL2T, FLDLG2, FLDLN2, FLDPI, FLDZ, FMUL, FMULP, FNCLEX, FNDISI, FNENI,
Original x87 FNINIT, FNOP, FNSAVE, FNSAVEW, FNSTCW, FNSTENV, FNSTENVW, FNSTSW, FPATAN, FPREM, FPTAN, FRNDINT, FRSTOR,
FRSTORW, FSAVE, FSAVEW, FSCALE, FSQRT, FST, FSTCW, FSTENV, FSTENVW, FSTP, FSTSW, FSUB, FSUBP, FSUBR, FSUBRP,
FTST, FWAIT, FXAM, FXCH, FXTRACT, FYL2X, FYL2XP1
80287 - FSETPM
80387 - FCOS, FLDENVD, FNSAVED, FNSTENVD, FPREM1, FRSTORD, FSAVED, FSIN, FSINCOS, FSTENVD, FUCOM, FUCOMP, FUCOMPP
- FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU, FCOMI, FCOMIP, FUCOMI, FUCOMIP,
Pentium pro FXRSTOR, FXSAVE
Pentium 4 SSE3 FISTTP 

114 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Les extensions présentées ci-dessous inplémentent


toutes des instructions dites SIMD (Single Instruction Multiple Data) :
•  MMX : MultiMedia eXtensions •  AVX : Advanced Vector Extensions
•  SSE : Streaming SIMD Extensions •  AES : Advanced Encryption Standard
CPU Nom Instructions
Architecture extension
MMX EMMS, MOVD, MOVQ, PACKSSDW, PACKSSWB, PACKUSWB, PADDB, PADDD, PADDSB, PADDSW, PADDUSB, PADDUSW,
Pentium MMX PADDW, PAND, PANDN, PCMPEQB, PCMPEQD, PCMPEQW, PCMPGTB, PCMPGTD, PCMPGTW, PMADDWD, PMULHW, PMULLW,
POR, PSLLD, PSLLQ, PSLLW, PSRAD, PSRAW, PSRLD, PSRLQ, PSRLW, PSUBB, PSUBD, PSUBSB, PSUBSW, PSUBUSB,
PSUBUSW, PSUBW, PUNPCKHBW, PUNPCKHDQ, PUNPCKHWD, PUNPCKLBW, PUNPCKLDQ, PUNPCKLWD, PXOR
SSE ADDPS, ADDSS, CMPPS, CMPSS, COMISS, CVTPI2PS, CVTPS2PI, CVTSI2SS, CVTSS2SI, CVTTPS2PI,
Float Inst. CVTTSS2SI, DIVPS, DIVSS, LDMXCSR, MAXPS, MAXSS, MINPS, MINSS, MOVAPS, MOVHLPS, MOVHPS,
Pentium III MOVLHPS, MOVLPS, MOVMSKPS, MOVNTPS, MOVSS, MOVUPS, MULPS, MULSS, RCPPS, RCPSS, RSQRTPS,
RSQRTSS, SHUFPS, SQRTPS, SQRTSS, STMXCSR, SUBPS, SUBSS, UCOMISS, UNPCKHPS, UNPCKLPS
Integer Inst. ANDNPS, ANDPS, ORPS, PAVGB, PAVGW, PEXTRW, PINSRW, PMAXSW, PMAXUB, PMINSW, PMINUB,
PMOVMSKB, PMULHUW, PSADBW, PSHUFW, XORPS
SSE2 ADDPD, ADDSD, ANDNPD, ANDPD, CMPPD, CMPSD, COMISD, CVTDQ2PD, CVTDQ2PS, CVTPD2DQ, CVTPD2PI,
CVTPD2PS, CVTPI2PD, CVTPS2DQ, CVTPS2PD, CVTSD2SI, CVTSD2SS, CVTSI2SD, CVTSS2SD, CVTTPD2DQ,
Float Inst. CVTTPD2PI, CVTTPS2DQ, CVTTSD2SI, DIVPD, DIVSD, MAXPD, MAXSD, MINPD, MINSD, MOVAPD, MOVHPD,
Pentium 4 MOVLPD, MOVMSKPD, MOVSD, MOVUPD, MULPD, MULSD, ORPD, SHUFPD, SQRTPD, SQRTSD, SUBPD, SUBSD,
UCOMISD, UNPCKHPD, UNPCKLPD, XORPD
Integer Inst. MOVDQ2Q, MOVDQA, MOVDQU, MOVQ2DQ, PADDQ, PSUBQ, PMULUDQ, PSHUFHW, PSHUFLW, PSHUFD,
PSLLDQ, PSRLDQ, PUNPCKHQDQ, PUNPCKLQDQ
SSE3 Float Inst. 115 – copyleft
ADDSUBPD, ADDSUBPS, HADDPD, HADDPS, HSUBPD, HSUBPS, MOVDDUP, MOVSHDUP, MOVSLDUP
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

Les extensions x86-64 présentées jusqu’à maintenant ne


présentent que les évolutions des jeux d’instructions apportées
par Intel. Les extensions amenées par AMD ne seront pas
présentées (MMX+, K6-2, 3DNow, 3DNow!+, SSE4a..).

CPU Nom Instructions


Architecture extension
Core2 SSSE3 PSIGNW, PSIGND, PSIGNB, PSHUFB, PMULHRSW, PMADDUBSW, PHSUBW, PHSUBSW, PHSUBD, PHADDW, PHADDSW,
PHADDD, PALIGNR, PABSW, PABSD, PABSB
SSE4.1 MPSADBW, PHMINPOSUW, PMULLD, PMULDQ, DPPS, DPPD, BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB,
PBLENDW, PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD, PMAXSD, ROUNDPS, ROUNDSS, ROUNDPD,
Core2 (45nm) ROUNDSD, INSERTPS, PINSRB, PINSRD/PINSRQ, EXTRACTPS, PEXTRB, PEXTRW, PEXTRD/PEXTRQ, PMOVSXBW, PMOVZXBW,
PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ,
PMOVZXDQ, PTEST, PCMPEQQ, PACKUSDW, MOVNTDQA
Nehalem SSE4.2 CRC32, PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM, PCMPGTQ
AVX VFMADDPD, VFMADDPS, VFMADDSD, VFMADDSS, VFMADDSUBPD, VFMADDSUBPS, VFMSUBADDPD, VFMSUBADDPS,
Sandy Bridge VFMSUBPD, VFMSUBPS, VFMSUBSD, VFMSUBSS, VFNMADDPD, VFNMADDPS, VFNMADDSD, VFNMADDSS, VFNMSUBPD,
VFNMSUBPS, VFNMSUBSD, VFNMSUBSS
Nehalem AES AESENC, AESENCLAST, AESDEC, AESDECLAST, AESKEYGENASSIST, AESIMC

116 – copyleft
ASSEMBLEUR
Assembleur – Architectures CPU – ISA Extensions

De même, lorsque l’on est amené à développer sur un


processeur donné, il est essentiel de travailler avec les
documents de référence proposés pour Intel, Vous pouvez
télécharger les différents documents de référence à cette URL :
http://www.intel.com/content/www/us/en/processors/
architectures-software-developer-manuals.html

117 – copyleft
LANGAGE
MACHINE :
ASSEMBLEUR 8086
UNITÉ ARITHMÉTIQUE ET LOGIQUE (UAL)

ð  Unité chargée
ð  Des opérations arithmétiques :
ð  ADD (+), SUB (-), MUL (*), DIV (:), INC (+ 1), DEC (- 1)
ð  Des opérations logiques :
ð  AND, OR, XOR, NOT, CMP
ð  LSL, LSR, ASR (décalages)
ARCHITECTURE DE VON NEUMAN
UNITÉ DE COMMANDE

¡  L’Unité de commande dirige le


fonctionnement de toutes les
autres unités : UAL, mémoire,
entrées / sorties, etc., en leur
fournissant les signaux de
cadence et de commande. Elle
comporte:
§  Le compteur ordinal CO
§  Le registre d’instruction RI
§  Le décodeur de code opération
§  Le séquenceur
§  L’horloge
§  RA = registre d ’adresses RM =
registre mot
LE SÉQUENCEUR

¡  Le séquenceur est un automate qui a la responsabilité de générer les


signaux de commande nécessaires pour actionner et contrôler les unités
participant à l’exécution d’une instruction donnée.

¡  Cette fonction peut être réalisée de deux façons : séquenceur câblé ou


séquenceur microprogrammé.
¡  U n s é q u e n c e u r c â b l é e s t u n c i r c u i t s é q u e n t i e l c o m p l e x e q u i f a i t
correspondre à chaque instruction un sous-circuit capable de commander
son déroulement.

¡  On peut obtenir le même résultat avec une suite de micro-instructions


stockées dans une mémoire de microprogrammation. Ce micro-
programme est capable de générer une suite de signaux de commande
équivalent à celle qui serait produite par un séquenceur câblé.

¡  La synchronisation de ces signaux est réalisée par l’horloge définissent


le cycle de base ou le cycle machine (clock cycle).
LES SIGNAUX DE COMMANDE

ð  R e g i s t r e s

ð  Adresse, Donnée
ð  INST, IP, SP , constantes (0, 1, ...),
Registres A, B, C, …
ð  Registres tampons (TampA, TampB)
ð  Registre des drapeaux de l'UAL
(Flags)

ð  2 B u s

ð  S i g n a u x d e c o m m a n d e

ð  Bus 1 : entrée (RO), sortie (AI, TA,


TB)
ð  UAL : M (sélection de Donnée ou
TampA), C (choix de l'opération), FI
(mise à jour des Flags)
ð  Bus 2 : sortie (DI I, RI)
ð  Lecture/ Écriture : DI E , DO (accès
à la mémoire)
SÉQUENCEMENT DES ACTIONS

Exemple :
R e g A <- R e g A + R e g B Signaux

Acti ons :

Tr a n s f e r t ( B u s 1 ) R e g A - > Ta m p A R O 1 0 , TA
Tr a n s f e r t ( B u s 1 ) R e g B - > Ta m p B R O 11 , T B
Choix UAL (C= 100, M= 0, Flags) C 2C1C 0 ,M, FI
Tr a n s f e r t ( B u s 2 ) U A L - > R e g A RI10

Une micro- instruction = ensemble des actions faisant fonctionner une fois le
chemin de do nn ée s
R O 1 0 ,TA ; RO 11 ,TB ; C= 100 , M= 0 , FI ; RI 1 0

L ’ UC l it l e « o p c o d e » de l’addition de deux registres dans la mémoire


e t d é c l e n c h e l e m ic ro -p rog ramme correspondant qui génère les signaux de
commande.
CODE OPÉRATION

Exemple:
¡  Programme en langage machine 80486 implanté à l’adresse
mémoire 0100h
A1 01 10 03 06 01 12 A3 01 14

ð Ce programme additionne le contenu de deux cases mémoire et


range le résultat dans une troisième
ð Voici une transcription langage symbolique du programme complet.
L'adresse de début de chaque instruction est indiquée à gauche (en
hexadécimal).

Adresse Contenu MP Langage Symbolique Explication

0100 A1 01 10 MOV AX, [0110] Charger AX avec le contenu


de 0110.
0103 03 06 01 12 ADD AX, [0112] Ajouter le contenu de 0112
a AX (résultat dans AX).
0107 A3 01 14 MOV [0114],AX Ranger AX en 0114.
CODE OPÉRATION / ASSEMBLEUR

Symbole Code Op. Octets


MOV AX, valeur B8 3 AX <- valeur
MOV AX, [ adr ] A1 3 AX <- contenu de l'adresse adr.
MOV [ adr ], AX A3 3 range AX à l'adresse adr.
ADD AX, valeur 05 3 AX <- AX + valeur
ADD AX, [ adr ] 03 06 4 AX <- AX + contenu de adr.
SUB AX, valeur 2D 3 AX <- AX - valeur
SUB AX, [ adr ] 2B 06 4 AX <- AX - contenu de adr.
SHR AX, 1 D1 E8 2 décale AX à droite.

¡  On utilise des programmes spéciaux, appelés assembleurs, pour


traduire automatiquement le langage symbolique en code machine.
PROCESSEUR 8086
PROCESSEURS 80X86

ð  Micro-processeurs 80x86 équipent les PC et compatibles

ð  Premiers PC (début 80) = 8086, micro-processeur 16 bits


ð  Puis 80286, 80386, 80486, Pentium…
ð  Augmentation de la fréquence d’horloge, de la largeur des bus
d’adresses et de données
ð  Ajout de nouvelles instructions et de registres

ð  Rappel: la compatibilité est ascendante

ð  Un programme écrit dans le langage machine du 286 peut


s’exécuter sur un 386 (l’inverse est faux)
ð  En TP on utilisera un assembleur 8086
CARACTÉRISTIQUES DU 8086

ð  Bus de données : 16 bits


ð  Bus d’adresse : 20 bits
ð  Il peut adresser 1 Mo
ð  14 Registres de taille16 bits

ð  4 accumulateurs 16 bits

ð  Accumulateur (AX)
ð  Base (BX)
ð  Counter (CX)
ð  Accumulateur auxiliaire (DX)
ð  Registres accessibles sous forme de 2 mots de 8 bits

ð  AX se décompose en AH (poids fort) et AL (poids faible de


AX)…
Accumulateur: Registre de l'unité de traitement d'un ordinateur où sont enregistrés les
résultats des opérations.
CARACTÉRISTIQUES DU 8086

ð  4 accumulateurs 16 bits

ð  AX, BX, CX ,DX


ð  Registres d’index :

ð  Pointeur d’instruction (IP)


ð  Index source ou destination(SI, DI)
ð  Pointeur de Pile ou de base (SP, BP)
ð  3+1 registres segment :

ð  Segment de code (CS) : contient le prog en cours d’exécution


ð  Segment data (DS) : contient les données du programme
ð  Segment stack (SS) : contient des données particulières
ð  Extra Segment (ES)
Un registre d'index est un registre qui participe au calcul de l'adresse d'un opérande par
exemple pour faire des opérations répétitives sur plusieurs éléments d'un vecteur ou d'un
tableau.
INTEL 8086
ARCHITECTURE MATÉRIELLE

Le processur 8086 anciennement proposé par Intel. Ce CPU est à la base des
architectures x86, il se présente sous la forme d’un Boîtier à 40 broches:
: bus d’adresse de donnée

: bus de contrôle

: Interruptions

•  7 mode d’adressage, : Direct Memory Access


•  Opérations sur des bits, des
octets, des mots et des chaînes
de caractères,
•  Arithmétique signée ou non
signée,
•  Arithmétique binaire ou BCD,
sur 8 ou 16 bits,

131 – copyleft
Organisation interne 8086
•  Execution Unit : décode puis
exécute les instructions
présentes dans la file d’attente;

•  Bus Interface Unit : contrôle des


bus pour les accès mémoire.
Calcul adresses physiques sur
20 bits (segmentation). Gestion
phases de fetch via IP ou
Instruction Pointer (équivalent à
PC ou Program Counter).

•  Fetch: recherche les instructions


dans la mémoire et les range
dans la file d’attente.

•  Les deux unités fonctionnent


simultanèment
132 – copyleft
REGISTRES DU 8086

Registres généraux:
L e r e g i s tr e AX : Ap p e l é r e g i s tr e ac c umul ate ur. C ’e s t l e r e g i s tr e l e p l us uti l i s é
implicite me nt pa r le s ins tructions du 8086. Il pe ut ê tre sou s forme de de ux
r e g i s t r e s i n d é p e n d an t s d e t ai l l e 8 b i t s   : AL et AH .

L e r e g i s tr e BX :
Il e s t appe lé re g is tre d e base . Il e s t utilisé aussi bie n pour le calcul que pour
l’adr e ssage . Comme AX, le re gis tre BX e s t cons titué de de ux re gis tre s 8 bits  : BL
et BH.

L e r e g i s tr e C X :
C ' e s t l e r e g i s tr e c o mp te ur. I l e s t s o uve n t e mp l oyé d ' un e man i è r e i mp l i c i te p ar
ce r t aine s in s tructi ons comme compte ur ( ins tructions de bou cle , tr aite me nt de s
chaîne s de s ca r actè re s,...) .
CX = CH : CL

L e r e g i s tr e DX :
Ap p e l é r e g i s tr e d e d on n é e , i l e s t uti l i s é i mp l i c i te me n t p ar c e r tai n e s i n s tr uc ti on s
p o ur s to c ke r d e s o p é r an d e s o u d e s r é s ul tats .
DX = DH : DL
REGISTRES DU 8086

¡  Registre de pointeur et d’index (adressage):


Il en existe quatre de taille 16 bits : SI, DI, SP et BP.
 
Les regis tres SI (Source Index) et DI (Des tination Index)
Appelés Index de source et index de destination respectivement. Ils sont
souvent utilisés dans la gestion des tableaux et des chaînes de caractères
dans la zone mémoire réser vée aux données segment DS.
 
Les regis tres SP (Stack Pointer) et BP (Base Pointer)
SP et BP s’appellent pointeur de pile et pointeur de base respectivement. Ils
ser vent à la gestion de la pile selon le principe LIFO dans le segment pile SS.
REGISTRES DU 8086

¡  Registre segment(CS,DS,SS,ES):
§  CS: Code Segment: registre segment de code;
§  DS: Data Segment: registre segment de données;
§  SS: Stack Segment: registre segment de pile;
§  ES: Extra Segment: registre segment supplémentaire pour compléter les
données;

¡  Ces registres segment sont chargés de sélectionner les différents segments


de la mémoire en pointant sur le début de chacun d’entre eux.

¡  Chaque segment de mémoire ne peut excéder le 65536 =2 16 octets (64 Ko)

¡  Si la taille du programme dépasse les 64ko, alors on divise le code sur


plusieurs segment chacun ne dépasse pas les 64 ko et pour basculer d’une
partie à une autre il suffit de changer la valeur du registre CS. Même astuce
pour des données dont la taille dépasse 64ko.
REGISTRES DU 8086
REGISTRE IP

¡  IP est un registre qui contient en permanence l’adresse de la


prochaine instruction à exécuter,

¡  Il est automatiquement mis à jour par le microprocesseur


après chaque instruction,

¡  IP contient uniquement l’adresse logique de l’instruction, le


segment se trouve dans le registre CS,

¡  Adresse physique de la prochaine instruction à exécuter est


CS:IP = IP + (10h x CS) = IP + (16 10 x CS ) = CS << 4 + IP
REGISTRES DU 8086
REGISTRE D’ÉTAT (OU FLAG)

Ces drapeaux sont divisés en deux catégories :


 Indicateurs d’états :
Les indicateurs d’état sont mis à jour après chaque instruction. Leur
valeur indique la nature du résultat obtenu :
REGISTRES DU 8086
REGISTRE D’ÉTAT (OU FLAG)

¡  Indicateurs de contrôle :
¡  Les indicateurs de contrôle permettent de modifier le compor tement
du microprocesseur. Ils sont positionnés par le programmeur.
SEGMENTATION DE LA MÉMOIRE

ð  Largeur du bus d’adresse = 20 bits

ð  Possibilité d’adressage mémoire = 220 = 1 Mo

ð  Le pointeur d’instruction fait 16 bits


ð  Possibilité d’adresser 216 = 64 Ko (ce qui ne couvre pas la mémoire)

ð  On utilise deux registres pour indiquer une adresse au processeur


ð  Chaque segment débute à l'endroit spécifié par un registre spécial
nommé registre segment.
ð  Le déplacement permet de trouver une information à l'intérieur du
segment.
ð  CS:IP : lecture du code d’une instruction (CS registre segment et IP
déplacement)
ð  DS : accès aux données (MOV AX,[1045] = lecture du mot mémoire
d’adresse DS:1045h)
SEGMENTATION DE LA MÉMOIRE

ð  Registres de déplacement = sélectionner une information dans un


segment.

ð  Dans le segment de code CS : le compteur de programme IP joue ce


rôle. CS:IP permet d'accéder à une information dans le segment de
code.

ð  Dans les segments de DS : les deux index SI ou DI jouent ce rôle.


Le déplacement peut être aussi une constante. DS:SI ou DS:DI
permettent d'accéder à une information dans le segment de
données.

ð  Dans le segment de pile SS le registre SP (stack pointer) et BP


(base pointer) jouent ce rôle. SS:SP ou SS:BP permettent d'accéder
à une information dans le segment de pile.
LA SEGMENTATION DE LA MÉMOIRE

¡  L’unité de segmentation est chargée de réaliser la translation


d’une adresse logique (couple segment:of f set) ver s une
adresse physique sur 20 bits (broches en sor tie du CPU).
Etudions la correspondance adresse logique adresse
physique :
¡  L’adresse de dépar t du segment doit être un multiple de 16,
les 4 bits de poids faible sont à zéro.

¡  Adresse physique = segment << 4 + offset

DS (Data Segment) Segment:offset Physical Address


0xFB0A DS:0x0005 0xFB0A5
0xF000 DS:0xB0A5 0xFB0A5
0xF203 DS:0x9075 0xFB0A5
… … …
La segmentation de la mémoire par le 8086

Observons un exemple de mapping mémoire :


Unified Memory Unified Memory
1Mo 0xFFFFF 1Mo 0xFFFFF

Extra Segment Extra Segment


64Ko ES:0x00FF 64Ko ES:DI
ES:0x0000 ES:0x0000

Stack Segment SS:SP Stack Segment SS:SP


64Ko 64Ko SS:BP
SS:0x0000
SS:0x0000
Data Segment DS:0x1400 Data Segment DS:DI
64Ko DS:0x0000 64Ko DS:0x0000
Code Segment CS:IP Code Segment CS:IP
64Ko CS:0x0000 64Ko CS:0x0000
Instruction
0x00000 à exécuter 0x00000

Les registres de segments peuvent être associés à des


registres de d’index (SI, DI, BP et SP). Observons les principaux
couples : SS:BP, SS:SP, DS:SI, DS:DI, ES:SI et ES:DI
142 – copyleft
La segmentation de la mémoire par le 8086

Les segments peuvent très bien se chevaucher voir même


se recouvrir : Unified Memory
1Mo 0xFFFFF

Extra Segment
Stack Segment
Data Segment

ES:0x0000
SS:
Code Segment

0x0000

DS:0x0000

CS:0x0000
0x00000

Pour information, observons les valeurs par défaut au


reset du CPU : IP=0x0000, CS=0xFFFF, DS=ES=SS=0x0000.
143 – copyleft
LA SEGMENTATION DE LA MÉMOIRE PAR
LE 8086
Jeu d’instruction 8086
Mode d’adressage
Exemple : l’instruction MOV plusieurs modes d’adressage.
Ceci est typique d’un CPU CISC. En général, les CPU RISC
implémentent moins de modes d’adressage avec des instructions
dédiées à chaque mode.
•  Adressage registre : déplacement de données dans le CPU.
Registre vers registre.
Mov ax, bx

•  Adressage immédiat : affectation d’une constante dans un


registre. Le déplacement d’une constante vers la mémoire est
également possible.
Mov bx, 1A2Fh

145 – copyleft
Jeu d’instruction 8086
Mode d’adressage

•  Adressage direct : déplacement de données du CPU vers la


mémoire ou vice versa. L’adresse de la case mémoire à
manipuler est directement passée avec l’opcode de
l’instruction.

•  Par défaut, c’est ds, pour es il faut le préciser

Mov [000Fh], bl
Mov ax,[es:10h]

1o
64Ko 0xFFFF
Data Memory


0x000F

146 – copyleft
0 0x000
Jeu d’instruction 8086
Mode d’adressage

•  Adressage indirect (basé) : déplacement de données du CPU


vers la mémoire ou vice versa. L’adresse de la case mémoire à
manipuler est passée indirectement par un registre.
1o
64Ko 0xFFFF

Data Memory
mov bx,000Fh, …
Mov [bx], al (segment ds)
0x000F
Mov [bp],al (segment ss)

0 0x000
0

•  Adressage indexé : Utilise les Registres d’index SI et DI.


•  Adressage basé et indexé: Mov [bx+sI], ah
•  Adressage basé avec déplacement: Mov [bx+123h], ah
•  Adressage indexé avec déplacement: Mov [dI+123h], ah
•  Adressage basé et indexé avec déplacement:
Mov [bx+sI+123h], ah
147 – copyleft
JEU D’INSTRUCTION (1)

ð  Instruction d’affectation : MOV


(Transfert CPU Mémoire)

ð  Instructions arithmétiques : INC (incrémentation)


(Opération Acc / Donnée) : DEC (décrementation)
: ADD (addition)
: SUB (soustraction)
: CMP (soustraction sans
sauvegarde)
: NEG (complément à 2)

ð  Instructions logiques : NOT, OR, XOR


: AND, TEST (= AND sans
sauvegarde, pour les sauts conditionnels)
: SHL (SHR), SAL (SAR)
: ROL (ROR), RCL (RCR)
JEU D’INSTRUCTION (2)

ð  Branchement : JMP
ð  Branchements conditionnels : JE/ JZ (JNE/ JNZ) : Jump if
zero
: JO (JNO) : Jump if overflow
: JS (JNS) : Jump if sign
ð  Comparaison de valeurs

CMP AX, BX suivi d ’un test :

(entiers naturels) (complément à 2)


AX > BX ? JA ( >= JAE) JG (JGE)
AX < BX ? JB (JBE) JL (JLE)
BRANCHEMENTS

ð  Le processeur exécute une instruction en mémoire puis passe à


celle qui suit en mémoire : séquentiel

ð  Besoin de faire répéter au processeur une suite d’instructions


ð  Besoin de déclencher une action qui dépend d’un test

ð  Utilisation d’une instruction de branchement ou saut

ð  On indique au processeur l’adresse de la prochaine instruction

ð  On distingue deux catégories de branchements

ð  le saut est toujours effectué (sauts inconditionnels)


ð  il est effectué seulement si une condition est vérifiée (sauts
conditionnels).
RAPPEL SUR LE REGISTRE
IP

ð  Le registre IP du processeur conserve l'adresse de la prochaine


instruction à exécuter
ð  Le processeur effectue les actions suivantes pour chaque
instruction :

1.  lire et décoder l'instruction à l'adresse IP;


2.  IP IP + taille de l'instruction;
3.  exécuter l'instruction.

ð  Pour modifier le déroulement normal d'un programme

ð  l'exécution de l'instruction doit modifier la valeur de IP


ð  c'est ce que font les instructions de branchement.
SAUTS INCONDITIONNELS

ð  Principale instruction de saut inconditionnel = JMP

ð  L'opérande de JMP est un déplacement, c'est à dire une valeur


qui va être ajoutée à IP. L'action effectuée par JMP est :

ð  IP = IP + déplacement

ð  Le déplacement est un entier relatif codé sur 8 bits. La valeur du


déplacement est :

ð  déplacement = adr. instruction visée - adr. instruction suivante


SAUTS INCONDITIONNELS :
EXEMPLE

ð  Exemple : le programme suivant écrit indéfiniment la valeur 0 à


l'adresse 0140h.

ð  La première instruction est implantée à l'adresse 100h.

Adresse Contenu MP Langage Symbolique Explication en français

0100 B8 00 00 MOV AX, 0 met AX a zéro


0103 A3 01 40 MOV [140], AX écrit à l'adresse 140
0106 EB FC JMP 0103 branche en 103
0107 xxx -> instruction jamais exécutée

ð  Le déplacement est ici égal à FCh, c'est à dire -4 (=103h-107h).


INDICATEURS

ð  Les instructions de branchement conditionnels utilisent les


indicateurs,

ð  bits spéciaux positionnés par l'UAL après certaines opérations.


ð  nous étudierons ici les indicateurs nommés ZF, CF, SF et OF.

ZF : Zero Flag

Cet indicateur est mis à 1 lorsque le résultat de la dernière opération


est zéro. Sinon, ZF est positionné à 0.

CF : Carry Flag

C'est l'indicateur de report (retenue). Il est positionné par les


instructions ADD, SUB et CMP (entiers naturels).
CF = 1 s'il y a une retenue
INDICATEURS (SUITE)

ð  SF : Sign Flag

SF est positionné à 1 si le bit de poids fort du résultat d'une addition ou


soustraction est 1; sinon SF=0. SF est utile lorsque l'on manipule des
entiers relatifs, car le bit de poids fort donne alors le signe du résultat.

ð  OF : Overflow Flag (Indicateur de débordement)

OF=1 si le résultat d'une addition ou soustraction donne un nombre qui


n'est pas codable en relatif dans l'accumulateur (par exemple si l'addition
de 2 nombres positifs donne un codage négatif).

ð  CMP = SUB, mais ne stocke pas le résultat de la soustraction


(positionner les indicateurs)

ð  !"#$%&'$($)$ZF = 1 si AX contient 5, et ZF = 0 si AX 5.
DÉCALAGE ET ROTATIONS

ð  Décalage vers la gauche ou vers la droite les bits de


l'accumulateur.

ð  opérations utilisées pour décoder bit à bit des données


ð  ou pour diviser ou multiplier rapidement par une puissance de 2.
ð  En effet : décaler AX de n bits vers la gauche revient à le multiplier
par 2n
ð  De même, un décalage vers la droite revient à diviser par 2n.

ð  Ces opérations peuvent opérer sur les registres AX ou BX (16


bits) ou sur les registres de 8 bits AH, AL, BH et BL.

ð  SHL, SHR, ROL, ROR, RCL, RCR…


DÉCALAGE

SHL registre, 1 (Shift Left)

Décale les bits du registre d'une position vers la gauche. Le bit de


gauche est transféré dans l'indicateur CF. Les bits introduits à droite sont
à zéro.
 
                                                      

SHR registre, 1 (Shift Right)

Comme SHL mais vers la droite. Le bit de droite est transféré dans CF.
SHL et SHR peuvent être utilisé pour multiplier/diviser des entiers
naturels (et non des relatifs car le bit de signe est perdu)
ROTATIONS

ROL registre, 1 (Rotate Left)

Rotation vers la gauche : le bit de poids fort passe à droite, et est aussi
copié dans CF. Les autres bits sont décalés d'une position.

                                                       

ROR registre, 1 (Rotate Right)

Comme ROL, mais à droite.


DÉCALAGE ET ROTATIONS

RCL registre, 1 (Rotate Carry Left)

Rotation vers la gauche en passant par l'indicateur CF. CF prend la place


du bit de poids faible; le bit de poids fort part dans CF.

                                                   

RCR registre, 1 (Rotate Carry Right)

Comme RCL, mais vers la droite.

RCL et RCR sont utiles pour lire bit à bit le contenu d'un registre7.
OPÉRATIONS LOGIQUES

ð  3 opérateurs logiques : ET, OU et OU exclusif.

ð  jamais propagation de retenue lors de ces opérations (chaque bit du


résultat est calculé indépendamment des autres)

ð  Opérations sont de la forme : OR


destination, source

ð  destination : registre ou emplacement mémoire (adresse) où doit


être placé le résultat.
ð  source : constante (adressage immédiat), registre (adressage
implicite), ou adresse (adressage direct).
$
OPÉRATIONS LOGIQUES

ð  OR destination, source (OU : 1 ou 0 =1 ; 1 ou 1 = 1…)

ð  OR est souvent utilisé pour forcer certains bits à 1. Par exemple


après OR AX, FF00, l'octet de poids fort de AX vaut FF, tandis que
l'octet de poids faible est inchangé.

ð  AND destination, source (ET : 1 et 1 = 1 …)

ð  AND est souvent utilisé pour forcer certains bits à 0. Après AND AX,
FF00, l'octet de poids faible de AX vaut 00, tandis que l'octet de
poids fort est inchangé.

ð  XOR destination, source (OU EXCLUSIF : 1 xor 1 = 0…)

ð  XOR est souvent utilisé pour inverser certains bits. Après XOR AX,
FFFF, tous les bits de AX sont inversés
CODAGE

ð  Les instructions et leurs opérandes (paramètres) sont stockés en


mémoire principale

ð  La taille totale d'une instruction (nombre de bits nécessaires pour la


représenter en mémoire) dépend du type d'instruction et aussi du
type d'opérande.

ð  Chaque instruction est toujours codée sur un nombre entier


d'octets, afin de faciliter son décodage par le processeur. Une
instruction est composée de deux champs :

ð  le code opération, qui indique au processeur quelle instruction


réaliser;
ð  le champ opérande qui contient la donnée, ou la référence à une
donnée en mémoire (son adresse).
CODAGE

ð  Selon la manière dont la donnée est spécifiée, c'est à dire selon le


mode d'adressage de la donnée, une instruction sera codée par
1, 2, 3 ou 4 octets.

ð  Nous distinguerons ici quatre modes d'adressage :

ð  Implicite
ð  immédiat
ð  Direct
ð  Basé
ð  indexé
PROCESSUS
D’ASSEMBLAGE
ð  3 phases :
1.  Saisie du code source avec un éditeur de texte
2.  Compilation du code source
3.  Édition des liens
ð  permet de lier plusieurs codes objets en un seul exécutable
ð  permet d ’inclure des fonctions prédéfinies dans des
bibliothèques
VARIABLES

Le processeur supporte deux types de variables: BYTE, WORD

DB : Variable 8 bits
DW : Variable 16 bits
EQU : Constante

var2 DB ?
tab DB 5 DUP (1,2)
Etiquette : adresse d’une méthode/ branchement
EXEMPLE:
message db 'hello, world’
msglen equ $-message
REPRÉSENTATION
MÉMOIRE : .COM

CS, DS, SS
Header DOS
100h
IP
Programme

64 Ko
Variables

SP
FICHIER .COM

ð  Un seul segment de 64 Ko pour les données le


programme et la pile

ð  .exe : on peut avoir un segment pour chaque

ð  Au début du programme

ð  IP pointe sur l’adresse 100h du segment (header DOS)


ð  CS, DS, SS pointent au début
ð  SP pointe à la fin (tête de pile) : attention que votre pile
n’écrase pas votre programme ou vos données
EXEMPLE DE PROGRAMME
NASM
org 100h
;affichage de B
mov ah,02h
mov ah,02h
mov dl,4Ah
mov dl,42h
int 21h
int 21h
;affichage de O
int 20h

mov ah,02h
mov dl,4Fh
int 21h Int 20h It informs DOS that the
program is complete and that
;affichage de N occupied memory should be
released.
mov ah,02h
mov dl,4Eh
int 21h
PILE

ð  Structure de « rangement » de données

ð  définie dans un segment de mémoire particulier (.exe) ou


dans le même que le code et les données (.com)
ð  fonctionnement LIFO (Last In, First Out)

ð  Comment y accéder :

ð  adresse du dernier élément posé : SS:SP


ð  empiler : PUSH Reg16 (registre 16 bits)
ð  dépiler : POP Reg16 (registre 16 bits)

ð  La pile augmente vers les adresses faibles

ð  PUSH : SP SP- 2, POP : SP SP+ 2


PILE : EXEMPLE
D’UTILISATION (1)
ð  PUSH registre

ð  empile le contenu du registre sur la pile.

ð  POP registre

ð  retire la valeur en haut de la pile et la place dans le registres


spécifié.

ð  Exemple : transfert de AX vers BX en passant par la pile.

PUSH AX ; Pile <- AX


POP BX ; BX <- Pile

Note : cet exemple n'est pas très utile, il vaut mieux employer
MOV AX, BX.)
PILE : EXEMPLE
D’UTILISATION (2)
ð  La pile est souvent utilisée pour sauvegarder
temporairement le contenu des registres :

;AX et BX contiennent des données a conserver


PUSH AX
PUSH BX
MOV AX, 5
MOV BX, 4 ; on utilise AX
ADD AX, BX ; et BX
POP BX ; récupère l'ancien BX
POP AX ; et l'ancien AX

ð  On voit que la pile peut conserver plusieurs valeurs.

ð  La valeur dépilée par POP est la dernière valeur empilée;


c'est pourquoi on parle ici de pile LIFO (Last In First Out,
Premier Entré Dernier Sorti).
PILE : REGISTRES SS ET
SP
16 bits
ð  Le registre SS (Stack
Segment) = registre segment qui
contient l'adresse du segment de
pile courant (16 bits de poids fort
de l'adresse). Il est normalement
initialisé au début du programme
et reste fixé par la suite.
PUSH POP
ð  Le registre SP (Stack Pointer)
contient le déplacement du
sommet de la pile (16 bits de SP
poids faible de son adresse).
PILE : REGISTRES SP

ð  L'instruction PUSH effectue les opérations suivantes :

SP SP - 2
[SP] valeur du registre 16 bits.

Notons qu'au début (pile vide), SP pointe ``sous'' la pile

ð  L'instruction POP effectue le travail inverse :

registre destination [SP]


SP SP + 2

Si la pile est vide, POP va lire une valeur en dehors de


l'espace pile, donc imprévisible.
PILE : REGISTRES SP

16 bits

Emplacement
Adresses libre
Croissantes
SP-2
SP

PUSH POP
PROCÉDURES (1)

ð  Déclaration d’une procédure :

ð  nous utiliserons une étiquette ou label pour définir le début et


le nom d’une procédure

ð  Appel de la procédure dans le programme

ð  CALL label ð  “near” signifie que


l'adresse de cette
... procédure est réduite
CALL affiche à un offsetest. Les
« call far » sont assez
affiche : peu utilisés.
MOV AH,9
INT 0x21
RETN
PROCÉDURES (2)

ð  Comment l’unité de traitement arrive-t-elle à retourner au


programme principal à la fin de la procédure ?

ð  Au moment de l’appel de la fonction, l’adresse de


l’instruction suivante est sauvegardée dans la pile :

ð  sauvegarde de IP

ð  A la fin de la procédure, l ’Unité de Traitement récupère les


valeurs sauvegardées pour retourner au programme principal

ð  RETN = dépilement de IP
PASSAGE DE PARAMÈTRES

ð  2 méthodes de passage de paramètres :

ð  par registre
ð  par la pile

ð  Passage de paramètres par registre :

ð  les paramètres d’entrée de la procédure sont mis dans des


registres avant l’appel de la procédure
ð  les paramètres de sortie sont aussi rangés dans des
registres
ð  avantage = rapidité
ð  inconvénients = peu de registres
PASSAGE PAR REGISTRE

;programme principal ;Procédure


...
Moyenne :
Mov AX, N1
Mov BX, N2 Add AX, BX
SHR AX, 1
Call Moyenne RETN

Mov Res, AX
Retn = dépilement de IP
... pour retourner au
programme principal
PASSAGE PAR LA PILE (1)

ð  Les paramètres d’entrée sont empilés avant l’appel de la


procédure
ð  Les paramètres de sortie sont dépilés par le programme
principal

ð  avantage = « portabilité »
ð  inconvénients = récupération des ;Procédure
paramètres plus « lourde »
Moyenne :
;programme PUSH BP
... Mov BP, SP
PUSH N1 Mov AX, [BP+4]
PUSH N2 Add AX, [BP+6]
Call Moyenne SHR AX, 1
POP Res Mov [BP+ 6], AX
... POP BP
Retn 2
PASSAGE PAR LA PILE (2)

ð  Évolution de la pile

ð  A quoi sert BP ?

ð  BP = référence de la pile au début de la procédure


ð  permet d’avoir une référence fixe pour récupérer les
paramètres
ð  ici : [BP+ 4] pour N2 et [BP+ 6] pour N1
PASSAGE PAR LA PILE (3)

ð  Sauvegarde du résultat et nettoyage de la pile


RAPPELS : REGISTRES DE
SEGMENT

Nom Taille Fonction

Cs (Code Segment) 16 bits Mémorise le segment où se trouve le code en


cours d'exécution (ne peut pas être modifié par
le programme)

Ds (Data Segment) 16 bits Mémorise le segment où se trouve les


données du programme.

Ss (Stack Segment) 16 bits Mémorise le segment où se trouve la pile de


données du programme

Es (Extra Segment) 16 bits Ce segment peut être utilisé pour faire ce que
l'on veut. Par exemple, il peut pointer sur la
mémoire écran.
RAPPELS : REGISTRES DE
TRAVAIL

Nom Taille Fonction

Ax (Accumulateur) 16 bits On l'utilise généralement pour des opérations


arithmétiques, telles que MUL (multiplication)
ou DIV (division). Ax peut se diviser en deux
sous-registres de 8 bits. Ah représente les 8
premiers bits, et Al les 8 derniers.

Bx (Base) 16 bits Bx est utilisé lors de l'accès à une zone


mémoire sous forme de tableau, il représente
l'indice de ce tableau. Par exemple, on écrira
Mov Dx, Es:[Bx]. Bx peut se diviser en deux
sous-registres de 8 bits. Bh représente les 8
premiers bits, et Bl les 8 derniers.
RAPPELS : REGISTRES DE
TRAVAIL

Nom Taille Fonction

Cx (Compteur) 16 bits Lors de l'appel d'instructions comme REP


(répéter) ou LOOP (boucle), c'est le registre
Cx qui est lu Cx peut se diviser en deux sous-
registres de 8 bits. Ch représente les premiers
bits, et Cl les 8 derniers.

Dx (Données) 16 bits Ce registre est généralement utilisé pour


stocker des données provisoires. Dx peut se
diviser en deux sous-registres de 8 bits. Dh
représente les 8 premiers bits, et D les 8
derniers.
RAPPELS : REGISTRES
D'OFFSET
(à combiner avec une adresse de segment)

Nom Taille Fonction

Si (Source Index) 16 bits Lors d'opérations sur les chaînes de


caractères, comme MOVSB Ds:[Si] désigne la variable 'source'.

Di (Dest Index) 16 bits Lors d'opérations sur les chaînes de


caractères, comme MOVSB Es:[Di] désigne la variable 'destination'.

Bp (Base Pointeur) 16 bits Bp a un rôle proche de celui de Bx, mais il est


généralement utilisé avec le segment de pile -Ss:[Bp]-.
RAPPELS : REGISTRES
D'OFFSET

(à combiner avec une adresse de segment)

Nom Taille Fonction

Ip (Instruction Point) 16 bits Cs:[Ip] indique la prochaine instruction à exécuter.

Tout comme Cs, Ip ne peut être manipulé par le programme exécuté.

Sp (Stack Pointeur) 16 bits Ss:[Sp] indique le dernier élément de la pile.

Chaque opération PUSH (empiler) ou POP (dépiler) modifie le registre Sp.


FONCTIONS DU BIOS

ð  BIOS librairie de fonctions

ð  Chaque fonction effectue une tâche bien précise (par exemple


afficher un caractère donné sur l'écran)

ð  L'appel de l'une de ces fonctions = appel système

ð  Fonctions du BIOS procédures appelées avec


l'instruction CALL

ð  il a été prévu de pouvoir modifier le comportement du BIOS en


cours d'utilisation (par exemple pour gérer un nouveau
périphérique)
ð  Code du BIOS en ROM = non modifiable
ð  Le BIOS étant différent d'un ordinateur à l'autre, les adresses
des fonctions changent...
VECTEURS
D’INTERRUPTION (1)

ð  Problème résolu par l'utilisation d'une table = la table des


vecteurs d'interruptions

ð  table est placée en RAM : contient les adresses (en ROM ou en


RAM) des fonctions du BIOS
ð  implantée à partir de l'adresse 00000000H (première case
mémoire)
ð  elle est initialisée par le BIOS lui même au moment du démarrage
du PC (boot).

Adresse contenu
0000 adresse de la première fonction du BIOS
0004 adresse de la deuxième fonction du BIOS
...
VECTEURS
D’INTERRUPTION

ð  Chaque élément de la table occupe 4 octets (adresse 32 bits).

ð  table à 256 éléments (1Ko).


ð  exemple : si l'on sait que la fonction du BIOS qui affiche un
caractère est la 33ième, on va l'appeler en lisant la 33ième ligne de
la table, puis en allant exécuter les instructions à l'adresse trouvée :

Adresse contenu
...
0084H F1234560H (car 4x33 = 84H).
...
ð  La table des vecteurs d'interruptions contient des valeurs
différentes pour chaque version de BIOS

ð  peut être modifiée pour pointer sur du code en mémoire


principale, modifiant alors le BIOS existant.
INTERRUPTIONS

ð  Unité de Traitement exécute séquentiellement les


instructions ou effectue des sauts programmés (JMP,
CALL)

ð  Il existe des situations où l ’U. T. est « déroutée » de sa


tâche :

ð  Reset : signal envoyé au processeur pour un (re-)


démarrage
ð  Exceptions (interruptions internes) : débordement de pile,
dépassement de capacité, div /0, …
ð  Appels systèmes (int. logicielles) : appels du
programme lui- même « int 21h » …
ð  Interruptions physiques (int. externes) : appels d’autres
périphériques
INTERRUPTIONS
LOGICIELLES : INT N

ð  L'instruction INT n permet d'appeler la n-ième


fonction de la table des vecteurs d'interruptions.

ð  n est un entier compris entre 0 et 255 (1 octet), car il y a


256 vecteurs d'interruptions dans la table (ex: Int 21h )

ð  L'instruction INT n est semblable à l'instruction CALL

ð  sauf que l'adresse de destination est donnée par la table


des vecteurs d'interruptions
ð  que les indicateurs sont automatiquement sauvegardés
sur la pile.
ð  l’adresse de retour complète doit être empilée car le
traitant d’interruption n’est pas nécessairement dans le
même segment de code que le programme
APPELS SYSTÈME

ð  Le système DOS (Disk Operating System) repose sur le


BIOS,
ð  il appelle les fonctions du BIOS pour interagir avec le matériel

ð  Les fonctions du DOS s'utilisent comme celles du BIOS, via


des vecteurs d'interruptions

ð  fonctionnalités de plus haut niveau que le BIOS (entrées/sorties,


ouverture de fichiers sur disque, etc.)

ð  Les fonctions du DOS s'appellent à l'aide du vecteur 21H

ð  La valeur du registre AH permet d'indiquer quelle est la fonction


que l'on appelle : MOV AH, numero_fonction INT 21H
ð  fonction 4CH du DOS = terminer un programme et de revenir à
l'interpréteur de commandes DOS : MOV AH, 4CH INT 21H
FONCTIONS DU DOS

Numéro Fonction

01H Lecture caractère met le code ascii lu dans AL


02H Affiche caractère code ascii dans registre DL
09H Affiche chaîne de car DX=adresse début chaîne,
terminée par '$'
0BH Lit état clavier met AL=1 si caractère, 0 sinon.

ð  Ce programme lit un caractère au clavier et l'affiche en majuscule :

MOV AH, 01H ; code fonction DOS


INT 21H ; attente et lecture d'un caractère
AND AL, 11011111b ; passe en majuscule
MOV DL, AL ; MOV AH, 02H ; code fonction affichage
INT 21H ; affiche le caractère
LISTE D’INTERRUPTION

¡  Liste de fonctions de l'interruption ms-dos int 21H (256


interruptions)
EXEMPLE
Affichage d'un octet en binaire : afficher la valeur contenue dans un
registre 8 bits (BL).
L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de
gauche, et de décaler BL à gauche pour parcourir ainsi tous les bits.

$ $*+,$-.'$/0 $1$+2$34534$64$78+9$:,4;$-.</0$$$$$
$ $*+,$!&'=$ $ $1$;+*734>8$?4$@+>;64$
$*:5A>4)$ $B453$-.'$/0000000@$$$$ $$
$ $CDE$@F3/G
$@F30)$ $"+,$H.'I0I$$$$$
$ $J*7$:KKF;L4$
$@F3/)$ $"+,$H.'I/I$
$:KKF;L4)$ $*+,$%M'N$ $1$:KKF;L:94$$$$
$ $ $F23$N/L$$$$ $ $$
$ $OM.$-.'/$$$$ $ $$
$ $.++7$*:5A>4$
$KF2)$$ $$
$ $*+,$:L'P!L$$$$ $$
$ $F23$N/L
IF … THEN … ELSE
FOR…

INSTRUCTIONS DE CONTRÔLE
INSTRUCTIONS DE CONTRÔLE
INSTRUCTIONS DE CONTRÔLE
L’OS ET COMPILATEUR
INTERPRÉTEUR ET
COMPILATEUR (1)
ð  On distingue grossièrement deux familles de langages
informatique

ð  les langages interprétés


ð  les langages compilés

ð  Un programme en langage interprété va être traduit au fur et


à mesure de son exécution par un interpréteur

ð  interpréteur : programme chargé de décoder chaque instruction


du langage et d'exécuter les actions correspondantes

ð  Programmes compilés : traduction en langage machine a


lieu une fois pour toute.

ð  Le compilateur (traducteur) traduit chaque instruction du


langage en une suite d'instructions en langage machine
INTERPRÉTEUR ET
COMPILATEUR (2)

ð  Les programmes compilés s'exécutent ainsi plus rapidement


que les programmes interprétés

ð  La traduction est déjà faite


ð  Mais on perd en souplesse de programmation, car les types de
données doivent être connus au moment de la compilation

ð  Compilateur = traduit un programme source écrit dans un


langage de haut niveau (C) en un autre programme dans un
langage de bas niveau (par exemple l'assembleur)

ð  Opération de traduction complexe


ð  Compilateurs = programmes sophistiqués
PRINCIPAUX LANGAGES
ð  Les principaux langages compilés sont :

ð  C/C++ : programmation système et scientifique


ð  ADA : logiciels embarqués
ð  Cobol : gestion
ð  Fortran : calcul scientifique
ð  Pascal : enseignement

ð  Quelques langages interprétés :

ð  BASIC : bricolage
ð  LISP, Prolog : Intelligence Artificielle
ð  Python : programmation système, Internet
ð  Java : applets internet
ð  MATLAB : calcul scientifique

ð  LISP, Java ou Python : une première phase de compilation vers un


langage intermédiaire (bytecode), qui sera lui même interprété.
COMPILATION DU C
ð  Traduction en assembleur des programmes en langage C

ð  Le détail de cette traduction (ou compilation) dépend

ð  Compilateur utilisé
ð  Système d'exploitation (DOS, Windows, UNIX,...).
ð  Taille des types : exemple int (16 ou 32 bits)
ð  Modèle de mémoire utilisé (pointeurs sur 16 ou 32 bits,
données et code dans des segments différents ou non, etc.)

ð  Exemple : compilateur Turbo C++ version 3 sous DOS


(entiers de 16 bits et le modèle de mémoire « small »)

ð  Génère directement du code objet (fichier .OBJ) à partir d'un


fichier source en langage C
ð  Il est cependant possible de demander l'arrêt de la
compilation pour obtenir du langage assembleur (fichier .ASM)
C ET ASSEMBLEUR
ð  Introduction d’instructions assembleur dans des
programmes en langage C (ou C++).

ð  Programme non portable, car le langage assembleur


diffère d'un type d'ordinateur à l'autre

ð  Pour un programme utilisant les ressources matérielles


d'une machine : plus confortable d'écrire un programme C
contenant quelques lignes d'assembleur que de tout
écrire en assembleur.
void main(void) {
int A = 20;
ð  Exemple avec asm{
Turbo C++/TASM MOV AX, A
SHL AX, 1
}
printf(’’AX =%d\n’’,_AX);
}
Ce programme affiche 40.
SYSTÈME D’EXPLOITATION

ð  OS : Operating System : le programme permettant


d'utiliser les circuits qui ont été câblés.

ð  Soit entièrement en ROM


ð  Soit un code de boot en ROM se chargeant de placer en
RAM le reste de l'OS à partir de la disquette ou du DD
ð  Souvent, une ROM de boot contient néanmoins la partie
de l'OS la plus primitive: le BIOS.

ð  But de l'OS = décharger le programme des tâches


répétitives et de bas niveau.

ð  Gain de temps lors du développement programmes


ð  Pas à se soucier du fonctionnement de la circuiterie
électronique
SYSTÈME D’EXPLOITATION
ð  Le système d’exploitation doit s’occuper de :

ð  l ’exécution des commandes d’entrée/ sortie


ð  la gestion de la mémoire
ð  la gestion des fichiers
ð  la multi- programmation (« multi- tâche »)
ð  Comment exécuter plusieurs programmes à la fois ?
ð  Et si ces programmes veulent tous accéder à l ’imprimante
en même temps ?
ð  Et s’ils doivent échanger des informations ?…
ð  Comment exécuter un seul programme avec plusieurs
processeurs ?
ð  la sécurité (gestion des accès,…)

ð  Le SE doit aussi fournir :

ð  un langage de commande
ð  divers utilitaires (compilateurs, éditeurs, outils, …)
ð  une interface graphique pour l’utilisateur
SYSTÈME D’EXPLOITATION

ð  Windows 95/ 98, Windows NT (Microsoft) :


ð  processeurs 80x86

ð  OS/ 2 (IBM)

ð  MacOS (Apple) :
ð  processeurs 68000 puis PowerPC

ð  UNIX = famille de SE :
ð  Versions payantes généralement spécialisées à un type
de machine :
ð  SunOS/ Solaris (Sun)
ð  AIX (IBM)
ð  HP/ UX (HP)
ð  Versions libres :
ð LINUX : 80x86, 68000, PowerPC, Sparc …
PRÉSENTATION DU BIOS

ð  BIOS (Basic Input Output System) : partie de l'OS du plus


bas niveau

ð  opérations très primitives: lecture du clavier, affichage écran en


mode texte, accès simplifié au lecteur de disquette et au disque
dur, accès au ports série et parallèle.

ð  Le programme du BIOS se trouve en mémoire morte (ROM)

ð  une mémoire gardant son contenu lorsque l'on interrompt son


alimentation électrique

ð  Chaque modèle de PC est vendu avec une version du BIOS


adapté à sa configuration matérielle.

Vous aimerez peut-être aussi