Base des systèmes à microprocesseur

43
Architecture des systèmes à microprocesseur Bases de l’informatique IUT de l’Indre Eric PERONNIN

Transcript of Base des systèmes à microprocesseur

Architecture des systèmes à

microprocesseur Bases de l’informatique

IUT de l’Indre

Eric PERONNIN

www.geii.eu 2

Le microprocesseur

Unité de traitements (Central Processing Unit) capable d’exécuter

du code reposant sur un jeu d’instructions spécifique

Réduit dans le cas des processeurs RISC

Cas de la plupart des microcontrôleurs – 35 instructions pour les PIC16 de Microchip

– 75 instructions pour les PIC18

– 133 pour l’Atmega128A d’Atmel

Complexe : microprocesseurs CISC

Plusieurs centaines d’instructions – Tous les descendants de la famille x86 d’Intel dont ceux des architectures IA32

et IA64 actuelles

– AMD compatible x86, IA32 et IA64

Architecture sans périphérique interne

www.geii.eu 3

Le microcontrôleur

Système complet sur une seule puce résultant de l’association

D’un cœur de microprocesseur

D’une mémoire de programme (souvent)

D’une mémoire de données (souvent)

De périphériques

mémoire EEPROM (informations de configuration)

timers

DAC et ADC

bus 2, 3 et 4 fils (I2C, SPI)

USART …

Utilisation : divers systèmes embarqués ...

www.geii.eu 4

Introduction

Systèmes à processeur(s) : de la diversité

Electronique embarquée

Microcontrôleur 1 cœur : quelques centaines de MIPS – Gestion d’évènements et commande matériel simple

» Divers fonctions en automobile

» Petits automates

– Interface utilisateur simple et configuration des circuits intégrés d’une carte

électronique

» Produits grand public audio/vidéo

» Electroménager

Informatique nomade

Processeur multi-cœurs : quelques milliers de MIPS – Tablettes

– Téléphones portables

www.geii.eu 5

Introduction

Systèmes à processeur(s) : de la diversité

Ordinateur personnels portables ou de bureau

Processeur multi-cœurs (2 à 12) : plusieurs centaines de milliers de MIPS

Supercalculateurs vectoriels

Le plus puissant du monde est chinois « Tianhe-2 »

– 3 120 000 cœurs ou 260 000 Pentium XEON (12 cœurs)

– 33 862 TFlops de puissance de calcul

– 17,8 MW de puissance consommée

– 1024 To de RAM

– Système Kylin Linux

www.geii.eu 6

Introduction

Système à microprocesseur : 2 architectures mémoires de base possibles

Eléments communs

1 unité d’exécution d’instructions micro-programmées (le processeur, désigné par CPU)

1 circuit d’horloge assurant le cadencement synchrone du fonctionnement du système

1 décodeur d’adresse gérant la cartographie de l’espace mémoire

divers périphériques permettant de communiquer avec l’extérieur, de stocker des données en grande quantité

Architecture de Harvard

1 mémoire permettant le stockage du programme

1 mémoire assurant le stockage des données

Architecture de Von Neumann

1 mémoire permettant le stockage du programme et des données

www.geii.eu 7

Introduction

Système minimum de Von Neumann

Microprocesseur Mémoire RAM

Périphérique 1

Périphérique 2

Périphérique :

mémoire de

stockage

Horloge

Superviseur

d’alimentation

D

E

C

O

D

E

U

R

D

A

D

R

E

S

S

E

S

Bus de données

Bus d’adresse

Signaux de contrôle

Mémoire RAM

www.geii.eu 8

Bus système

Bus d’adresse

Spécifie l’emplacement mémoire auquel le CPU accède

Possède M fils de signaux binaires notés AM-1 à A0 permettant de cibler 2M emplacements

Bus 16 bits : 65536 = 64K emplacements

Bus 20 bits : 1 048 576 = 1M emplacements

Bus 32 bits : 4G emplacements

Bus 64 bits : 1T emplacements

Bus de donnée

Contient la donnée échangée entre le CPU et la mémoire ou un périphérique du système

Possède N fils de signaux binaires notés DN-1 à D0 où N est un multiple de 8

N = 8 : la donnée est un Octet

N = 16 : la donnée est un Mot (Word)

N = 32 : on parle de Double Mot (DWord)

www.geii.eu 9

Eric PERONNIN

Bus système–Décodeur d’adresses

Bus de contrôle

Véhicule tous les autres signaux du CPU

CLK : l’horloge système

RW : informe si le CPU effectue une opération de lecture (RW = 1) ou d’écriture (RW = 0)

INT : informe le CPU d’une demande de traitement d’interruption

etc …

et les signaux du décodeur d’adresse

Décodeur d’adresse

Assure le décodage de l’adresse pour respecter une cartographie mémoire donnée

Pour une adresse @ donnée, il assure la sélection du composant placé à cette adresse en générant un signal Chip Select (noté CS_) destiné à ce composant

www.geii.eu 10

Cartographie mémoire

Figure ou tableau spécifiant l’espace mémoire adressable réservé

à chaque élément connecté sur le bus d’@

Exemple avec un bus mémoire sur 16 bits

Mémoire RAM

@

0000h

7FFFh

Périphérique 1

8000h

8FFFh

Inutilisé

Périphérique 2

A000h

FFFFh

Lorsque @ est comprise entre

0000h et 7FFFh, le décodeur

d’adresse envoie un signal

CS_RAM = 0 pour sélectionner la

RAM.

Si @ est comprise entre 8000h et

8FFFh, le décodeur d’@ envoie

CS_PER1 = 0 pour sélectionner

le Périphérique 1.

Si @ est comprise entre A000h et

FFFFh, le décodeur d’@ envoie

CS_PER2 = 0 pour sélectionner le

Périphérique 2.

www.geii.eu 11

Structure interne d’un CPU

Décodeur d’instructions / Unité d’exécution

Queue

d’instruction

s

Registres

UAL Chargement

d’instruction

Mémoire de programme et de données

Gestionnaire d’@

UAL = Unité

Arithmétique et

Logique

www.geii.eu 12

Structure interne d’un CPU

Eléments additionnels présents dans les processeurs d’aujourd’hui

Décodage/Exécution des instructions en parallèle (1 complexe et plusieurs simples)

Architectures multi-cœurs

Cache mémoire de différents niveaux avec contrôleurs associés pour palier à la lenteur de la mémoire centrale

L1 : mémoire en liaison directe avec le processeur – fonctionne à la fréquence du processeur

– petite capacité (qques Ko)

L2 : en liaison avec le cache de niveau L1 et L3 – fonctionne à une fréquence moindre

– capacité moyenne (qques centaines de Ko)

L3 : interface entre le cache L2 et la mémoire centrale – Fréquence plus faible que le processeur

– capacité de qques Mo

– partager entre les différents cœurs du processeur

www.geii.eu 13

Structure interne d’un CPU

Eléments additionnels présents dans les processeurs

d’aujourd’hui

Unité multiple de calcul en virgule flottante double précision (80

bits)

Unité de calcul vectoriel

plusieurs calculs simultanés sur des entiers – 8 par cycles en 8 bits (pour la vidéo)

calculs vectoriels sur des flottants – 4 par cycles en simple précision

Contrôleur de mémoire intégré au CPU

Plus d’utilisation du chipset pour les traitements rapides

Processeur graphique intégré au CPU

www.geii.eu 14

Cas concret : les processeurs Intel

Année ModèleFréquence

CPUMIPS Architecture

Bus

interneCache L1

Cache

L2Fréq. Bus Bus Externe Transistors Gravure Boitier

Tension

CPUTDP Remarque

1979 8086 10 MHz 0,75 16 bits 16 bits 10 MHz 20 bits (1 Mo) 29 000 3 µm 40 DIP 5 vBus d'adresse

sur 20 bits

1989 80386DX 33 MHz 11,4 32 bits 32 bits 33 MHz 32 bits (4 Go) 275 000 1 µm 5 v

1994 80486DX4 100 MHz 54 32 bits 64 bits 16 Ko 100 MHz 32 bits (4 Go) 1 600 000 0,6 µm 5 v

1998 Pentium MMX 233 MHz 300 32 bits 64 bits16 Ko Inst. + 16

Ko Data66 MHz 32 bits (4 Go) 3 100 000 250 nm 296 PGA 1,8 v

Instructions

MMX

2001 Pentium III 1 GHz 3438 32 bits 64 bits16 Ko Inst. + 16

Ko Data256 Ko 133 MHz 32 bits (4 Go) 28 000 000 180 nm 370 FC PGA 1,7 v 33 W

Instructions

SSE

2007 Core 2 Duo E4300 1800 MHz 1960064 bits (2

cœurs)Multiples

2 x 32 Ko Inst. +

2 x 32 Ko Data 2 Mo

800 MHz

(200 x 4)64 bits (1 To) 167 000 000 65 nm 775 FC LGA6 0,85 v 65 W

SSE, SSE2,

SSE3, SSE4

2013 Core i7 4770K 3500 MHz 12700064 bits (4

cœurs)Multiples

4 x 32 Ko Inst. +

4 x 32 Ko Data

4 x 256

Ko1666 MHz 64 bits (1 To) 1 400 000 000 22 nm 1150 LGA

0,685 à

1,11 v84 W

Cache L3 de 8

Mo

Du 8086 au i7

Le i7 d’aujourd’hui, toujours capable d’exécuter les instructions du premier processeur de PC, le 8086 de 1977

Historique

Au rythme d’innovations diverses, la nombre de transistors dans un processeur double environ tous les 2 ans suivant la loi de Moore

Gordon Moore : cofondateur d’Intel avec Robert Noyce édicte sa loi dite de Moore en 1971 et toujours vérifiée à ce jour.

www.geii.eu 15

Puce gravée d’un processeur Intel série Haswell

www.geii.eu 16

Microarchitecture d’un coeur

www.geii.eu 17

Architecture de la carte mère

www.geii.eu 18

Programmation des processeurs

Intel d’architecture IA32

Repose sur

un jeu d’instructions 32 bits directement exécutable par le

processeur

un ensemble de registres, mémoires internes de travail du

processeur

registres généraux 32 bits – eax, ebx, ecx, edx qui permettent de réaliser différents types de calcul

– chacun de ces registres peut être décomposé en sous registre de 16 et 8 bits.

Exemple pour eax

ah al

ax

eax

Bits 31 16 15 8 7

0

www.geii.eu 19

Programmation des processeurs

Intel d’architecture IA32

des registres de déplacement sur 32 bits (index) – edi, esi, ebp, esp

– dont les poids faibles sont accessibles par respectivement di, si, bp, sp

1 registre pointeur d’instruction sur 32 bits précisant l’adresse de la prochaine instruction à exécuter par le processeur

– eip (poids faible accessible par le registre 16 bits ip)

des registres de segment 16 bits intéressants pour séparer les zones mémoires en fonction de leur rôle

– cs pour le segment de code

– ds, es, fs, gs pour les segments de données

– ss pour le segment de pile

des registres spécifiques à certaines instructions pour le traitement parallèle ou les traitements en virgule flottante

– 8 registres 128 bits (SSE, SSE2)

– 8 registres 80 bits (ST0 à ST7 pour les calculs en flottant)

www.geii.eu 20

Programmation des processeurs d’architecture IA32

1 registre d’état EFLAG renseignant sur l’état du système

et la nature du résultat du dernier calcul effectué

www.geii.eu 21

Eric PERONNIN

Initiation à l’assembleur IA32 Objectifs purement pédagogiques

Connaître succinctement le fonctionnement d’un processeur de PC par la connaissance de ses instructions

Comprendre le travail réalisé par un compilateur C

Outils employés : tous gratuits

Assembleur MASM32

Environnement de développement RadASM

Debugger OLLYDBG

Remarque sur l’intérêt réel de programmer en assembleur

Sur PC

Aucun car les compilateurs produisent un code optimisé tenant compte des spécificités des processeurs

Exception faite, parfois, de la programmation de pilotes

Sur microcontrôleur

Parfois utile pour des besoins très spécifiques et ponctuels

www.geii.eu 22

Un premier programme

www.geii.eu 23

Eric PERONNIN

Un premier programme (suite)

www.geii.eu 24

Un premier programme (suite)

www.geii.eu 25

Règles d’écriture d’un programme

L’écriture d’un programme assembleur obéit à des règles :

La première colonne contient des labels ou étiquettes, des

directives d’assembleur,

la seconde colonne contient des directives ou des instructions

(mnémoniques),

la troisième colonne contient des opérandes et paramètres

divers.

Enfin, tout ce qui se trouve après un point-virgule est considéré

comme un commentaire.

Note : on peut utiliser la 4ième colonne à cette fin.

www.geii.eu 26

Document de référence - Notations

Un document de référence

la datasheet INTEL Pentium IA32 Reference Instruction Set (2 tomes de 750 pages)

Notations utilisées pour qualifier les opérandes d’une instruction

Opérandes de type registre :

reg8 représente un registre 8 bits (ah, al, bh, bl, ch, cl, dh, dl)

reg16 pour un registre général sur 16 bits (ax, bx, cx, dx, sp, bp, si, di)

reg32 pour les registres généraux sur 32 bits (eax, ebx, ecx, edx, esp, ebp, esi, edi)

segreg pour un registre de segment (cs, ds, ss, es)

Opérandes en valeurs immédiates :

imm8 pour une valeur sur 8 bits

imm16 pour une valeur sur 16 bits

imm32 pour une valeur sur 32 bits

www.geii.eu 27

Notations

Notations (suite)

Opérandes de type emplacement mémoire :

mem8 désigne un emplacement mémoire sur 8 bits

mem16 désigne un emplacement mémoire sur 16 bits

mem32 désigne un emplacement mémoire sur 32 bits

En cas d’ambiguïté sur le format d’un opérande mémoire, on précisera le type par un suffixe

BYTE PTR (si la cible doit être considérée comme un mem8),

WORD PTR (pour une cible de type mem16)

DWORD PTR pour préciser l’accès à une donnée sur mem32

Opérandes registres ou mémoires (instructions acceptant les deux types d’opérandes) :

r/m8 est la contraction de reg8 ou mem8

r/m16 est la contraction de reg16 ou mem16

r/m32 est la contraction de reg32 ou mem32

www.geii.eu 28

Jeu d’Instructions - Affectation

Instruction MOV

Syntaxe : mov destination,source

Destination : r/m8, r/m16, r/m32, segreg

Source : r/m8, r/m16, r/m32, imm8, imm16, imm32

Equivalent algorithmique : destination source

Différents modes d’adressage en fonction de l’origine des données

Adressage immédiat : spécification explicite de la valeur Exemple : eax 12

mov eax, 12

mov eax, 0Ch ; h pour hexa

mov eax, 1100b ; b pour binaire

Adressage par registre : valeur placée dans un registre Exemple : eax ebx

mov eax, ebx

www.geii.eu 29

Modes d’adressage

Différents modes d’adressage (suite)

Adressage mémoire direct : donnée située à un emplacement

mémoire indiqué explicitement

Exemple : eax (0ACA9910h)

mov eax, [0ACA9910h]

Note : on dit que eax reçoit le contenu de l’emplacement

mémoire 0ACA9910h

Adressage mémoire indirect : donnée située à un emplacement

mémoire indiqué par un registre

Exemple : eax (ebp)

mov eax, [ebp]

Note : on dit que eax reçoit le contenu de l’emplacement

mémoire pointé par ebp

www.geii.eu 30

Modes d’adressage Différents modes d’adressage (suite)

Adressage mémoire indexé : donnée située à un emplacement mémoire indiqué par calcul Base+Décalage

Exemple : eax (ebp+10)

mov eax, [ebp + 10]

Note : ebp est le registre de Base ; 10 est le décalage

Exemple : ebx (ebp + esi + 10)

mov ebx, [ebp+esi+10]

Note : esi + 10 constitue le décalage (esi seul est l’index)

Mixage des modes d’adressage

Exemple : (ebp) 12

mov word ptr [ebp], 12

Note : word ptr précise que la valeur 12 est une donnée sur 16 bits (donc les adresses ebp et ebp+1 seront modifiées)

mov byte ptr [ebp], 12

Note : byte ptr précise que la valeur 12 est une donnée sur 8 bits (donc seul l’octet pointé par ebp est modifié)

www.geii.eu 31

Unité arithmétique et logique - Registre d’état

Fonctionnement basé sur l’unité arithmétique et logique (UAL ou ALU)

L’ALU nécessite 1 ou 2 opérandes.

Elle renvoie un résultat et des indicateurs binaires dans le FLAGS REGISTER (sur 32 bits en IA32)

Bits du FLAGS REGISTER

CF = Carry Flag : indique un dépassement de capacité dans les opérations non signées (unsigned overflow)

PF = Parity Flag : drapeau de parité, mis à 1 si le résultat contient un nombre pair de 1

Z = Zero Flag : mis à 1 quand le résultat vaut 0

SF = Sign Flag : indique si le résultat est négatif (SF prend en fait la valeur du bit de poids fort du résultat)

IF = Interrupt Enable Flag : autorise les interruptions externes si IF = 1.

www.geii.eu 32

Registre d’état (suite)

DF = Direction Flag : drapeau utile pour les instructions sur

chaînes indiquant le sens de traitement (0 = en avant ; 1 = en

arrière).

OF = Overflow Flag : OF = 1 si une opération signée aboutit à

un dépassement de capacité.

Remarque : ces drapeaux ne sont pas accessibles directement

mais utilisés par des instructions (opérations, branchements …)

www.geii.eu 33

Instructions arithmétiques Additions

adc op1,op2

Équivalent algo : op1 op1 + op2 + CF où CF est le Carry Flag

add op1,op2

Équivalent algo : op1 op1 + op2

inc op1

Equivalent algo : op1 op1 + 1

Utile pour le traitement des boucles

Soustractions

sbb op1,op2

Equivalent algo : op1 op1 – (op2+CF)

Rappel : CF est le Carry Flag

sub op1,op2

Equivalent algo : op1 op1 – op2

Note : op1 et op2 désignent des opérandes qui peuvent être de différents types : r/m8 , r/m16, r/m32, imm8, imm16, imm32 …

www.geii.eu 34

Instructions arithmétiques

Multiplication non signée

mul r/m8

Equivalent : ax ax * r/m8 (multiplication sur 8 bits)

mul r/m16

Equivalent : dx:ax ax * r/m16 (multiplication sur 16 bits)

Remarque : le résultat est donc sur 32 bits d’où l’association de dx:ax pour composer un registre sur 32 bits

mul r/m32

Equivalent : edx:eax eax * r/m32 (multiplication sur 32 bits)

Même remarque que pour la multiplication sur 16 bits : ici edx:eax compose un registre du 64 bits pour le résultat

Division

Voir documentation IA32 lors des Travaux Pratiques

Opérations sur des flottants 32 bits

Cf documentation.

www.geii.eu 35

Opérations logiques

Opérations logiques bit à bit

and op1,op2 :

op1 op1 and op2 (c’est un ET bit à bit)

or op1,op2 :

op1 op1 or op2 (OU bit à bit)

not op

op NON op (complément à 1 bit à bit)

xor op1,op2

op1 op1 OU EXCLUSIF op2

test op1,op2 :

c’est un AND sans sauvegarde dans op1

www.geii.eu 36

Opérations « niveau bit »

Instructions de décalages de bits

shl op,count et sal op,count (Shift Arithmetic Left et Shift Logical Left)

Effectue un décalage des bits de op vers la gauche de count bits.

Les bits de poids faibles entrants sont fixés à 0.

Le dernier bit sortant est conservé dans CF.

sar op,count (Shift Arithmetic Right)

Décale op de count bits vers la droite.

CF contient le dernier bit sortant par la droite.

Les bits entrants sont fixés à 0.

Le bit de poids fort résultant est identique au bit de poids fort initial de op.

shr op,count (Shift Logical Right)

Idem shl mais vers la droite.

www.geii.eu 37

Branchements conditionnés

Comparaison : CMP op1,op2

Effectue la comparaison entre op1 et op2.

op1 et op2 restent inchangés; ce sont les flags qui sont affectés.

Branchements conditionnés

je addr : saut si égal

jne addr : saut si non égal

jo addr : saut si overflow

jno addr : saut si non overflow

jp addr : saut si parité paire

jnp addr : saut si parité impaire

Cas d’un résultat non signé

jbe addr : saut si inférieur ou égal

jnbe addr : saut si supérieur

jc addr : saut si inférieur (ou si CF = 1)

jnc addr : saut si supérieur ou égal (ou si CF = 0)

www.geii.eu 38

Branchements conditionnés ou non

Cas d’un résultat signé

jl addr : saut si inférieur

jge addr : saut si supérieur ou égal

jle addr : saut si inférieur ou égal

jg addr : saut si supérieur

Branchements inconditionnels :

jmp addr : Saute à l’adresse addr sans condition

Instructions de boucles

Elles utilisent le registre de boucle cx

jcxz addr : saut si cx = 0

loop addr : cx cx – 1 et saut si cx <> 0

loope ader : cx cx – 1 et saut si cx <> 0 ou si ZF = 1

loopne addr : cx cx – 1 et saut si cx <> 0 ou si ZF = 0

www.geii.eu 39

La pile

Qu’est-ce que la pile ? A quoi sert-elle ?

C’est une zone mémoire utilisée pour la sauvegarde temporaire

de registres et d’adresses.

Elle est de type LIFO (Last In, First Out) : la dernière donnée

entrée est la première récupérée (à comparer avec un

empilement de pièces).

La dernière donnée écrite dans la pile est pointée par le pointeur

de pile : esp (Extended Stack Pointer).

www.geii.eu 40

Instructions de pile en IA32

Empilement de données

push reg32 : permet d’empiler un registre 32 bits dans la pile.

push imm32 : empile une valeur codée sur 32 bits.

push (addr) : empile la valeur 32 bits mémorisée à l’adresse

addr. addr peut être spécifiée de façon directe, indirecte ou

indexée.

Dépilement de données

L’instruction « pop » s’utilise comme l’instruction « push » et

réalise l’opération inverse (pop imm32 est bien sûr impossible).

www.geii.eu 41

Fonctionnement de la pile

Initialisation du pointeur de pile

mov esp, FFFFFFFEh ; avec un OS, c’est l’OS qui

; impose l’emplacement de la pile

Initialisation et stockage dans la pile d’un registre

mov eax, 1234h ; eax 1234h

push eax ; on sauve eax dans la pile

Récupération de la valeur stockée dans la pile dans un autre

registre

pop ebx ; on dépile la dernière donnée

; écrite dans la pile dans ebx

www.geii.eu 42

Ecriture de sous-programmes

Pourquoi écrire des sous-programmes ou fonctions

Parce qu’ils peuvent être utilisés plusieurs fois.

Pour une plus grande lisibilité du programme principal.

Parce que le découpage en fonction implique des phases de tests et de validation progressives : chaque fonction peut être validée individuellement.

Comment en écrire en assembleur ?

En exploitant la pile ou des registres pour le passage des paramètres.

En utilisant des instructions spécifiques :

call addr ; pour appeler un sous-programme

ret ; pour effectuer un retour à la fin du ; sous-programme.