format ppt

publicité
Unité 5a: Architecture du Pentium
Objectifs :
À la fin de cette unité vous connaîtrez l'architecture du Pentium du
point de vue du programmeur. Pour y arriver, vous devrez avoir
atteint les objectifs suivants :
- énumérer les registres du Pentium accessibles au programmeur.
- énumérer les indicateurs usuels et décrire leur rôle.
©Pierre Marchand, 2001
24
Unité 5a: Architecture du Pentium
Pourquoi l’assembleur ?
•
•
•
•
Rapide
Compact
Puissant
Pour mieux comprendre et utiliser :
• les langages de haut niveau :
- variables globales
- variables locales et allocation dynamique
- passage de paramètres et variables registres
- déboguage
©Pierre Marchand, 2001
25
Unité 5a: Architecture du Pentium
Pourquoi l’assembleur ?
• Pour mieux comprendre et utiliser :
• les compilateurs :
- édition de liens
- génération de code
• La structure interne des processeurs
• La virgule flottante
• Les interruptions
• Pour mieux accéder aux périphériques
©Pierre Marchand, 2001
26
Unité 5a: Architecture du Pentium
Pourquoi l’assembleur ?
• Universellement utilisé
• Indispensable dans la programmation des microcontrôleurs ou des
systèmes embarqués
• Finalement, parce que c’est amusant!!
©Pierre Marchand, 2001
27
Unité 5a: Architecture du Pentium
Inconvénients de l’assembleur ?
•
•
•
•
Plus long à programmer que les langages de haut niveau
Pas de vérification de types
Pas de structures de contrôle (if, while, etc.)
Dépend du processeur
©Pierre Marchand, 2001
28
Unité 5a: Architecture du Pentium
Architecture de von Neumann
16
8
PC
R1
R2
R3
R4
R5
Acc1
Acc2
BUS D'ADRESSES
Tampon
BUS DE DONNѓ ES
Tampon
CCR
DЋcodeur
Microprogramme
BUS DE CONTRп LE
Tampon
IR
L0
29
Verrou
F0
F
n
S0
S1
©Pierre Marchand, 2001
Verrou
ALU
DЋcaleur
L1
Unité 5a: Architecture du Pentium
Architecture de von Neumann
Exécution séquentielle des instructions
• Chargement (fetch) de l’instruction dans IR
• Décodage de l’instruction
• Chargement des opérandes s’il y a lieu
• Exécution
• Écriture du résultat
Même avec une horloge de 500 MHz,
un tel processeur serait plus lent que
les processeurs d’aujourd’hui.
Pourquoi ?
©Pierre Marchand, 2001
30
Unité 5a: Architecture du Pentium
Architecture de von Neumann
• Les registres n’ont que 8 bits
• Bus d’adresses de 16 bits -> 64 Ko max de RAM
• Même si on mettait tous les registres à 32 bits et des bus de
données et d’adresses de 32 bits, on n’aurait pas encore une
performance élevée.
• Les accès mémoire prennent de l’ordre de 100 ns. Le processeur a
un temps de cycle de 2 ns à 500 MHz.
• Il faudrait donc ajouter un cache de niveau 1 sur la puce et un cache
de niveau 2.
• Il manque encore la virgule flottante et la mémoire virtuelle.
©Pierre Marchand, 2001
31
Unité 5a: Architecture du Pentium
Architecture de von Neumann
• Même en ajoutant des instructions de virgule flottante et la mémoire
virtuelle, on n’aurait pas encore une performance comparable à celle
des processeurs actuels.
• En effet, il n’y a qu’une unité d’exécution. Chaque instruction prend
au moins quatre à six cycles :
- Chargement de l’instruction
- Décodage de l’instruction
- Exécution de l’instruction
- Écriture du résultat.
• Et, le cas échéant,
- Chargement d’un ou deux opérandes
©Pierre Marchand, 2001
32
Unité 5a: Architecture du Pentium
Architecture de von Neumann
Or les processeurs actuels effectuent en moyenne plus d’une
instruction par cycle.
Comment y parviennent-ils ?
©Pierre Marchand, 2001
33
Unité 5a: Architecture du Pentium
Amélioration de la performance
Examinons différentes façons d’améliorer la performance d’un processeur :
1. Augmenter la vitesse de l’horloge.
• Ceci implique généralement la réduction de la géométrie sur la puce
pour minimiser les délais de propagation et la consommation de
puissance. La technologie en est aujourd’hui à ~ 0,15 microns (µm).
Les vitesses d’horloge atteignent présentement ~1000 MHz.
©Pierre Marchand, 2001
34
Unité 5a: Architecture du Pentium
Amélioration de la performance
2. Exécuter les différentes instructions de façon combinatoire plutôt
que séquentielle.
• Multiplicateurs combinatoires, décaleurs à barillet, retenue
anticipée.
• Viser à ce que la plupart des instructions s’exécutent en 1 cycle
d’horloge.
3. Introduire du parallélisme
• Pipeline.
• Plusieurs unités d’exécution travaillant simultanément :
Processeurs superscalaires (plus d’une instruction par cycle
d’horloge).
• Prédiction de branchements.
©Pierre Marchand, 2001
35
Unité 5a: Architecture du Pentium
Amélioration de la performance
4. Minimiser les accès à la mémoire
• Mémoire cache pour les données et les instructions sur la puce
du processeur lui-même.
• Plus grand nombre de registres.
5. Augmenter la bande passante du bus
• Les processeurs modernes ont des bus de données de plus en
plus larges, ce qui augmente la quantité d’informations (données
et instructions) lues lors de chaque accès à la mémoire. Par
exemple, le bus de données du Pentium est de 64 bits.
©Pierre Marchand, 2001
36
Unité 5a: Architecture du Pentium
Le Pentium II
©Pierre Marchand, 2001
37
Unité 5a: Architecture du Pentium
Le Pentium II
Le Pentium est un processeur CISC :
• Nombre élevé d’instructions
• La plupart des instructions peuvent accéder à la mémoire
• Instructions de longueur très variable (8 à 108 bits)
• Faible nombre de registres (4 registres généraux)
• On ne vise pas l’exécution de chaque instruction en 1 cycle
Il adopte cependant plusieurs des principes de la technologie RISC :
• Pipeline
• Multiples unités d’exécution
©Pierre Marchand, 2001
38
Unité 5a: Architecture du Pentium
Le Pentium II
©Pierre Marchand, 2001
39
Unité 5a: Architecture du Pentium
Registres de base
7
15
31
AH
BH
CH
DH
0
EBX BX
ECX CX
SI
EDX DX
ESI
DI
EDI
BP
SP
EBP
ESP
Registres de Segment
15
EAX AX
AL
BL
CL
DL
Source index
Destination index
Base pointer
Stack pointer
Registres fantômes
0
Code Descriptor
Dat a Descriptor
St ack Descriptor
Ext ra Descriptor
F Descriptor
G Descriptor
CS
DS
SS
ES
FS
GS
31 Registres d'état et de contrôle 0
FLAGS
EFLAGS
0
31
IP
©Pierre Marchand, 2001
Registres généraux
40
EIP
Unité 5a: Architecture du Pentium
Registres généraux
Accumulateur
Registre de Base
Registre de Comptage
Registre de Données
Indice source
Indice destination
Pointeur de base
Pointeur de pile (stack)
©Pierre Marchand, 2001
eax, ax, ah, al
ebx, bx, bh, bl
ecx, cx, ch, cl
edx, dx, dh, dl
esi,si
edi,di
ebp,bp
esp, sp
41
Unité 5a: Architecture du Pentium
Registres de segment
Segment code
Segment pile
Segment données
Segment extra
Segment F
Segment G
CS
SS
DS
ES
FS
GS
Autres
Compteur ordinal
EIP
Registre d’état et de contrôle EFlags
©Pierre Marchand, 2001
42
Unité 5a: Architecture du Pentium
Registres de virgule flottante
Signe
64 63
79 78
R0
Registres de données
Exposant
0
Mantisse
R1
R2
R3
R4
R5
R6
R7
15
0
Registre de
contrôle
Registre
d'état
Registre
Étiquette
©Pierre Marchand, 2001
43
47
0
Pointeur d'instruction de FPU
Pointeur d'opérande de FPU
10
0
Opcode
Unité 5a: Architecture du Pentium
Registres MMX
Il est à noter que ces 8 registres sont physiquement les mêmes que les
registres de virgule flottante.
63
0
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
©Pierre Marchand, 2001
44
Unité 5a: Architecture du Pentium
Registres SIMD
Il est à noter que ces 8 registres sont physiquement les mêmes que les
registres de virgule flottante.
127
0
XMM0
XMM1
XMM2
XMM3
XMM4
XMM5
XMM6
XMM7
©Pierre Marchand, 2001
45
Unité 5a: Architecture du Pentium
Le registre EFLAGS
31
16 15
8 7
0
I V V A V R N IO O D I T S Z A P
C
0 0 0 0 0 0 0 0 0 0 0 D I I C M F 0 T PL F F F F F F 0 F 0 F 1 F
P F
CF = Carry Flag
PF = Parity Flag
AF = Auxiliary Carry Flag
ZF = Zero Flag
SF = Sign Flag
TF = Trap Flag
IF = Interrupt Enable Flag
DF = Direction Flag
OF = Overflow Flag
IOPL = I/O Privilege Level
©Pierre Marchand, 2001
46
NT = Nested Task Flag
RF = Resume Flag
VM = Virtual 386 Mode
AC = Alignment Check
VIF = Virtual Interrupt Flag
VIP = Virtual Interrupt Pending
ID = Identification Flag
Unité 5a: Architecture du Pentium
Autres registres
CR0 à CR4 (mémoire virtuelle)
Global Descriptor Table Register GDTR
Interrupt Descriptor Table Register IDTR
Local Descriptor Table Register LDTR
Task Register TR
Debug Registers DR0 à DR7
Test Registers TR6 et TR7
Time Stamp Counter TSC
©Pierre Marchand, 2001
47
Unité 5a: Architecture du Pentium
Historique
• L’histoire de la famille 80x86 d’Intel commence dans les années 70
avec le 8080, un processeur de 8 bits avec un bus d’adresses de
16 bits, qui pouvait adresser un total de 64 Ko.
• Vers 1980, le 8086 et le 8088 font leur apparition, ce dernier avec le
premier PC d’IBM. Ce sont des processeurs de 16 bits avec un bus
d ’adresses de 20 bits, qui avaient une capacité d ’adressage de 1
Mo. Le 8088 diffère du 8086 par la largeur du bus de données
externe qui est de 8 bits.
©Pierre Marchand, 2001
48
Unité 5a: Architecture du Pentium
Historique
• Toutefois, même si le bus d’adresses était de 20 bits, les registres
internes d’adresses étaient toujours de 16 bits pour assurer la
compatibilité avec le 8080. Comment donc accéder au reste de la
mémoire?
• Toute la complexité des processeurs Intel vient de la solution
adoptée à cette époque pour régler ce problème.
©Pierre Marchand, 2001
49
Unité 5a: Architecture du Pentium
Historique
On décida que l’adresse serait constituée des 16 bits des registres
internes ajoutée à 16 fois le contenu d’un de quatre registres
appelés registres de segment.
Segment
+
0000
Offset 16 bits
Adresse 20 bits
Ces quatre registres étaient CS (Code Segment), DS (Data Segment),
SS (Stack Segment) et ES (Extra Segment).
©Pierre Marchand, 2001
50
Unité 5a: Architecture du Pentium
Historique
• On remarque que chaque segment a une taille de 64 Ko (offset 16
bits), et que la distance entre chaque segment peut aller de 16
octets à 64 Ko.
La capacité totale d ’adressage est :
FFFF0 + FFFF = 10FFEF,
qui dépasse légèrement 1 Mo (FFFFF).
• Le 80286 fait son apparition quelques années plus tard avec un bus
d’adresses de 24 bits (capacité de 16 Mo). C’est là que les choses
se compliquent.
©Pierre Marchand, 2001
51
Unité 5a: Architecture du Pentium
Historique
• Jusqu’alors, les processeurs fonctionnaient en ce qu’Intel appelle le
« mode réel ». Les systèmes d’exploitation utilisés avec ces
processeurs étaient mono-tâches et mono-usagers. Les registres
de segment contenaient de vraies adresses, et l’utilisateur pouvait
accéder sans limite à toutes les ressources du système : les
périphériques, les interruptions, etc.
• Toutefois, les registres de segment demeuraient de 16 bits.
Comment donc accéder aux 16 Mo que permettait le bus
d’adresses de 24 bits du 80286?
©Pierre Marchand, 2001
52
Unité 5a: Architecture du Pentium
Historique
• Pour permettre l’avènement de systèmes d’exploitation plus
performants et une plus grande capacité de mémoire, Intel
introduisit avec le 80286 le « mode protégé ».
• Mais comme la plupart des applications roulant sous MS-DOS, qui
dominait le marché, étaient incompatibles avec le mode protégé, on
continua pendant des années à fonctionner en mode réel avec une
capacité de mémoire de 1 Mo.
©Pierre Marchand, 2001
53
Unité 5a: Architecture du Pentium
Historique
• Le 80286 fut donc longtemps considéré comme un 8086 rapide
parce que personne ne savait comment utiliser le mode protégé.
Pourtant, ce processeur offrait la mémoire virtuelle, des droits
d’accès pour la sécurité, des niveaux de privilège d’exécution, etc.
• Pendant ce temps, Motorola mettait en marché la famille 68000, qui
offrait des registres de 32 bits et, à partir de 1985 avec le 68020,
une capacité d ’adressage de 4 Go.
©Pierre Marchand, 2001
54
Unité 5a: Architecture du Pentium
Historique
• En 1987, Intel met au point le 80386, puis le 80486, ensuite le
Pentium, le Pentium II en 1997, le Pentium III en 1999 et finalement
le Pentium 4 en 2001. Les ordinateurs que nous utilisons pour ce
cours sont munis de Pentium III.
©Pierre Marchand, 2001
55
Unité 5a: Architecture du Pentium
Historique
Sélecteur
15
Index
2
1
0
TI
RPL
Index = index dans une table de descripteurs, possibilité de 8 K
segments (13 bits).
TI = indice de table : 0 = GDT, 1 = LDT
RPL = niveau de privilège demandé 0 à 3
©Pierre Marchand, 2001
56
Unité 5a: Architecture du Pentium
Historique
Descripteur de segment
31
16 15
0
base 0-15
63
56
base 24-31
limit 0-15
48 47
A
G D O V limit
L 16-19
39
D S
P P = Type A
L 0
base 16-23
Droits
d'accès
Base = adresse de départ du segment
Limit = taille du segment : 0 à 1 méga-unités
G = granularité : unité = 1 octet si G = 0 ou 4 Ko si G = 1
©Pierre Marchand, 2001
57
32
Unité 5a: Architecture du Pentium
Environnement
Les ordinateurs de nos laboratoires fonctionnent tous sous Windows
2000.
Ceci crée des difficultés pour la programmation en assembleur :
Les accès aux interruptions logicielles et matérielles (accès au BIOS)
ainsi qu’aux entrées/sorties sont interdits sauf si on exécute le
programme à partie de la fenêtre DOS.
Pour que les programmes fonctionnent normalement sous Windows
2000, il faut utiliser un assembleur 32 bits et effectuer des appels
système pour accéder aux fonctions système et aux périphériques.
©Pierre Marchand, 2001
58
Unité 5a: Architecture du Pentium
Exemple :
En C
void main() {
short i, j, k;
i = 4;
j = 6;
k = i + j + 5;
}
©Pierre Marchand, 2001
59
Unité 5a: Architecture du Pentium
Exemple :
En assembleur
.586
.model flat, stdcall
option casemap:none
; Pentium
; mémoire 4 Go, appel de fonctions normal
; respecte la casse
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data?
i
dw ?
j
dw ?
k dw ?
©Pierre Marchand, 2001
; librairie pour ExitProcess
; variables globales non initialisées
; word = 16 bits = short
60
Unité 5a: Architecture du Pentium
Exemple :
En assembleur
.code
start:
mov
mov
mov
mov
add
add
mov
invoke
end start
©Pierre Marchand, 2001
; début du programme principal
ax, 4
i, ax
bx, 6
j, bx
ax, bx
ax, 5
k, ax
ExitProcess, 0
61
;i=4
;j=6
;i+j+5
; résultat dans k
; retourner à Windows
; fin du programme
Téléchargement