La famille x86

Transcription

La famille x86
La famille x86
Eduardo Sanchez
Laboratoire de Systèmes Logiques
Ecole Polytechnique Fédérale de Lausanne
Désavantages de l’architecture x86
◆ Très vieille architecture: basée sur le 8080 (commercialisé en
1974, 6’000 transistors et 8 registres)
◆ Le premier 8086 fut commercialisé en 1978, conçu par deux
ingénieurs en 3 semaines (29’000 transistors et 8 registres)
◆ Seulement 8 registres pour les entiers et 8 pour les réels (et ces
derniers sont organisés dans une pile). Plutôt que des registres
généraux, c’est des registres spécialisés (extended accumulator)
◆ Bus 16 bits pour les données et pour les adresses
◆ Adressage segmenté (registres 16 bits)
◆ Longueur variable des instructions (1-17 bytes)
◆ “Difficile d’expliquer, impossible d’aimer”
Page 2
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Processeurs d’Intel
Pentium Pro
Exécution désordonné
10 M
Pentium
Superscalar
Nombre de transistors
1M
486
Pipeline
386
Extensions 32 bits
100 K
286
Mode protégé
24 bits d’adresse
8086
Premier processeur x86
10 K
8080
Registres de base
8008 8bits
4004 4 bits
1K
1971
1976
1981
1986
Date de commercialisation
Page 3
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
1991
1996
Processeur
Date
4004
8008
8080
8086
8088
80286
80386
80486
Pentium
Pentium Pro
Pentium II
4/71
0.108
4/72
0.108
4/74
2
6/78
5-10
6/79
5-8
2/82
8-12
10/85
16-33
4/89
25-100
3/93
60-233
3/95 150-200
5/97 233-400
Page 4
MHz Transistors
2300
3500
6000
29000
29000
134000
275000
1.2M
3.1M
5.5M
7.5M
Mémoire
640
16KB
64KB
1MB
1MB
16MB
4GB
4GB
4GB
4GB
4GB
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Caractéristique
Premier microprocesseur
Premier micro 8 bits
Premier CPU général
Premier micro 16 bits
Utilisé par IBM PC
Protection de mémoire
Premier micro 32 bits
Mémoire cache interne (8K)
Deux pipelines
Deux niveaux de cache interne
MMX
Registres
80386
8086
31
15
7
0
EAX
AX
AH
AL
Accumulator
ECX
CX
CH
CL
Count reg: string, loop
EDX
DX
DH
DL
Data reg: multiply, divide
EBX
BX
BH
BL
Base addr reg
ESP
SP
Stack pointer
EBP
BP
Base ptr (for base of stack reg)
ESI
SI
Index reg, string source ptr
EDI
DI
Index reg, string dest ptr
EIP
IP
Instruction ptr (PC)
EFLAGS
Page 5
8
FLAGS
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Condition codes
15
0
CS
Code segment ptr
SS
Stack segment ptr (top of stack)
DS
Data segment ptr
ES
Extra data segment ptr
FS
Data segment ptr 2 (80386)
GS
Data segment ptr 3 (80386)
◆ Pour la partie virgule flottante: 8 registres à 80 bits (FPR0..FPR7)
et un registre status à 16 bits (également stack pointer des 8
registres FPR)
Page 6
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Registre de flags:
11 10
9 8
7
6
OF DF IF TF SF ZF
4
2
0
AF
PF
CF
Conditions:
CF carry
ZF zero
SF sign
OF overflow
AF auxiliary
PF parity
Bits de contrôle:
DF direction
IF interrupt
TF trace
Page 7
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Segmentation de la mémoire
◆ Mode réel (8086)
adresse logique
segment
offset
16
16
x
16
20
+
20
adresse physique
Page 8
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Mode protégé (80286)
adresse logique
segment
offset
16
16
24
+
segmentation
24
adresse physique
Page 9
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Mode protégé (80386, 80486, Pentium)
segment
offset
16
32
32
+
adresse linéaire
10
segmentation
32
20
10
20
10
20
paging
32
12
adresse physique
Page 10
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Types d’opérande
Source/destination
registre
registre
registre
mémoire
mémoire
Seconde source
registre
constante
mémoire
registre
constante
◆ Les constantes peuvent être à 8, 16 ou 32 bits
◆ Le registre peut être choisi parmi les 14 registres principaux (tous
sauf IP et FLAGS)
Page 11
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Modes d’adressage
◆ Absolute
◆ Register indirect
Registres en mode 16 bits: BX, SI, DI
Registres en mode 32 bits: EAX, ECX, EDX, EBX, ESI, EDI
◆ Based
Registres en mode 16 bits: BP, BX, SI, DI
Registres en mode 32 bits: EAX, ECX, EDX, EBX, ESI, EDI
Le déplacement peut être en 8, 16 ou 32 bits (ce dernier seulement
en mode 32 bits)
◆ Indexed
L’adresse est donnée par la somme de deux registres: BX+SI,
BX+DI, BP+SI, BP+DI
Page 12
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Based indexed with displacement
L’adresse est donnée par un déplacement plus le contenu de deux
registres (les mêmes combinaisons que pour le mode indexed)
◆ Based with scaled indexed
Cet adressage existe uniquement en mode 32 bits. L’adresse est
donnée par:
(registre base) + 2scale(registre index)
où scale peut valoir 0, 1, 2 ou 3; le registre index peut être n’importe
lequel des 8 registres généraux, à l’exception de ESP; le registre
base peut être n’importe lequel des 8 registre généraux
◆ Based with scaled indexed and displacement
L’adresse est donnée par la somme d’un déplacement plus
l’expression du mode précédent
Page 13
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Pour tous les modes d’adressage, l’instruction devrait spécifier le
registre de segment à utiliser. Afin de simplifier les instructions,
les registres de segment sont choisis automatiquement, en
fonction du registre d’adresse utilisé:
✸ les références aux instructions (IP) utilisent CS (code segment register)
✸ les références à la pile (BP ou SP) utilisent SS (stack segment register)
✸ pour tous les autres cas, le registre segment par défaut est DS (data
segment register)
Page 14
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Types d’instruction
◆ Les opérations du 8086 se font sur des bytes ou des mots (16 bits).
Le 80386 a introduit les opérations sur les double-mots (32 bits)
◆ Les instructions sur les entiers peuvent être classées en quatre
grands groupes:
✸
✸
✸
✸
transfert de données (move, push, pop)
instructions arithmétiques et logiques
contrôle de séquence (sauts conditionnels et inconditionnels, call, return)
instructions sur les chaînes
◆ Les sauts peuvent se faire dans le même segment (near) ou dans un
autre segment (far). Seulement les sauts inconditionnels peuvent
changer de segment:
✸ en mode 16 bits: deux valeurs 16 bits suivent l’opcode. L’un sera le nouveau
segment (à charger dans CS) et l’autre le nouveau IP
✸ en mode 32 bits: on donne le nouveau IP sur 32 bits
Page 15
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
◆ Les instructions call et return sont également de type near et far.
Dans le cas near, le call stocke dans la pile le IP et le segment. Il faut
faire attention d’utiliser le même type de call et de return à chaque fois
◆ Exemples d’instruction:
✸ JE adr
✸ JMP adr
✸ CALL adr,seg
✸
✸
✸
✸
✸
✸
MOVW BX,[DI+45]
PUSH SI
POP DI
ADD AX,#6765
TEST DX,#42
MOVSB
Page 16
if equal(CC) then IP ← adr
IP-128 ÿ adr < IP+128
IP ← adr
SP ← SP-2; M[SS:SP] ← IP+5;
SP ← SP-2; M[SS:SP] ← CS;
IP ← adr; CS ← seg
BX ← M[DS:DI+45]
SP ← SP-2; M[SS:SP] ← SI
DI ← M[SS:SP]; SP ← SP+2
AX ← AX+6765
set CC flags with (DX and 42)
M[ES:DI] ← M[DS:SI]; DI ← DI+1;
SI ← SI+1
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Instructions à virgule flottante
◆ Les registres en virgule flottante sont organisés sous la forme
d’une pile: les opérations load et store sont équivalentes à des
push et des pop; les opérations sont faites sur les deux opérandes
au sommet de la pile
◆ Mais il est également possible de réaliser des opérations entre une
position de mémoire et un registre FPR quelconque. Toutefois, les
load et store opèrent uniquement avec le sommet de la pile
◆ Le sommet de la pile est ST. Le I-nième registre au-dessous du
sommet est ST(i)
◆ Les donnés en mémoire peuvent être à 32 bits (single precision) ou
64 bits (extended precision). Mais, dans les registres, les données
sont toujours stockées sur 80 bits
Page 17
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Format des instructions
◆ Une instruction peut avoir de 1 jusqu’à 17 bytes:
Repeat
Lock
Seg. override
Addr. override
Size override
80386
Page 18
Opcode
Opcode ext.
mod, reg, r/m
sc, index, base
Disp8
Disp16
Disp24
Disp32
Imm8
Imm16
Imm24
Imm32
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Prefixes
Opcode
Address specifiers
Displacement
Immediat
◆ Exemples:
4
JE
4
8
cond
displ
8
16
6
2
8
MOV
5
3
PUSH reg
3
SHL
v/
w
7
TEST
MOV BX,[DI+45]
16
ADD reg w
2
displ
PUSH SI
1
6
segment number
8
d/ r-m
w postbyte
4
16
offset
CALLF
Page 19
JE PC+displacement
constant
ADD AX,#6765
8
1
SHL BX,1
8
w postbyte
8
immediat
TEST DX,#42
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
CALLF
Marché des microprocesseurs en 1997
180
Millions d’unités vendues
160
140
x86 (9)
i960 (9)
ARM (10)
SPARC (1.5)
29K (2.3)
ST20 (2.3)
PowerPC (3.9)
SuperH (23.5)
120
100
MIPS (44.0)
Macintosh
Workstations
80
60
40
68K (79.3)
PCs
20
0
Page 20
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne
Marché des microprocesseurs x86 en 1997
◆ Intel:
profit record de 6.9 KM $
80 millions de pièces vendues
15% de Pentium II ou Pro
◆ AMD:
pertes de 21 M $
◆ Cyrix:
acheté par National
pertes de 6 M $ les 6 mois avant son achat
Page 21
Eduardo Sanchez
Ecole Polytechnique Fédérale de Lausanne

Documents pareils