la famille x86 - lsl · très vieille architecture: basée sur le 8080 (commercialisé en 1974,...
TRANSCRIPT
Eduardo Sanchez
Laboratoire de Systèmes Logiques
Ecole Polytechnique Fédérale de Lausanne
La famille x86
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 2
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”
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 3
Processeurs d’Intel
4004 4 bits8008 8bits
8080
Registres de base
8086
Premier processeur x86
286
Mode protégé
24 bits d’adresse
486
Pipeline
386
Extensions 32 bits
Pentium
Superscalar
Pentium Pro
Exécution désordonné10 M
1 M
100 K
10 K
1 K
1971 1976 1981 1986 1991 1996
Date de commercialisation
No
mb
re d
e t
ran
sis
to
rs
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 4
ProcesseurProcesseurProcesseurProcesseur DateDateDateDate MHzMHzMHzMHz TransistorsTransistorsTransistorsTransistors MémoireMémoireMémoireMémoire CaractéristiqueCaractéristiqueCaractéristiqueCaractéristique4004 4/71 0.108 2300 640 Premier microprocesseur
8008 4/72 0.108 3500 16KB Premier micro 8 bits
8080 4/74 2 6000 64KB Premier CPU général
8086 6/78 5-10 29000 1MB Premier micro 16 bits
8088 6/79 5-8 29000 1MB Utilisé par IBM PC
80286 2/82 8-12 134000 16MB Protection de mémoire
80386 10/85 16-33 275000 4GB Premier micro 32 bits
80486 4/89 25-100 1.2M 4GB Mémoire cache interne (8K)
Pentium 3/93 60-233 3.1M 4GB Deux pipelines
Pentium Pro 3/95 150-200 5.5M 4GB Deux niveaux de cache interne
Pentium II 5/97 233-400 7.5M 4GB MMX
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 5
Registres
31 15 078
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
EIP
EFLAGS
AX
CX
DX
BX
SP
BP
SI
DI
IP
FLAGS
AH AL
CH CL
DH DL
BH BL
Accumulator
Count reg: string, loop
Data reg: multiply, divide
Base addr reg
Stack pointer
Base ptr (for base of stack reg)
Index reg, string source ptr
Index reg, string dest ptr
Instruction ptr (PC)
Condition codes
80386 8086
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 6
◆ Pour la partie virgule flottante: 8 registres à 80 bits (FPR0..FPR7)
et un registre status à 16 bits (également stack pointer des 8
registres FPR)
15 0
CS Code segment ptr
Stack segment ptr (top of stack)
Data segment ptr
Extra data segment ptr
Data segment ptr 2 (80386)
Data segment ptr 3 (80386)
SS
DS
ES
FS
GS
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 7
◆ Registre de flags:
OF
02467891011
DF IF TF SF ZF 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
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 8
Segmentation de la mémoire
◆ Mode réel (8086)
xx
++
adresse logique
segment offset
adresse physique
16
16
16
20
20
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 9
◆ Mode protégé (80286)
++
adresse logique
segment offset
adresse physique
16
16
24
24
segmentation
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 10
◆ Mode protégé (80386, 80486, Pentium)
++
segment offset
adresse physique
1632
32
32
segmentation
12
20
32
2010
10
20
10
paging
adresse linéaire
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 11
Types d’opérande
◆ Les constantes peuvent être à 8, 16 ou 32 bits
◆ Le registre peut être choisi parmi les 14 registres principaux (tous
sauf IP et FLAGS)
Source/destination Seconde source
registre registre
registre constante
registre mémoire
mémoire registre
mémoire constante
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 12
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
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 13
◆ 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
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 14
◆ 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)
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 15
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
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 16
◆ 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 if equal(CC) then IP ←←←← adrIP-128 ÿ adr < IP+128
✸ JMP adr IP ←←←← adr
✸ CALL adr,seg SP ←←←← SP-2; M[SS:SP] ←←←← IP+5;SP ←←←← SP-2; M[SS:SP] ←←←← CS;IP ←←←← adr; CS ←←←← seg
✸ MOVW BX,[DI+45] BX ←←←← M[DS:DI+45]
✸ PUSH SI SP ←←←← SP-2; M[SS:SP] ←←←← SI
✸ POP DI DI ←←←← M[SS:SP]; SP ←←←← SP+2
✸ ADD AX,#6765 AX ←←←← AX+6765
✸ TEST DX,#42 set CC flags with (DX and 42)
✸ MOVSB M[ES:DI] ←←←← M[DS:SI]; DI ←←←← DI+1;SI ←←←← SI+1
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 17
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
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 18
Format des instructions
◆ Une instruction peut avoir de 1 jusqu’à 17 bytes:
Repeat
Lock
Seg. override
Addr. override
Size override
Opcode
Opcode ext.
mod, reg, r/m
sc, index, base
Disp8
Disp16
Disp24
Disp32
Imm8
Imm16
Imm24
Imm32
Prefixes
Opcode
Address specifiers
Displacement
Immediat
80386
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 19
◆ Exemples:
JE
CALLF
MOV
PUSH
ADD
SHL
TEST
condcondcondcond displdispldispldispl
offsetoffsetoffsetoffset segment numbersegment numbersegment numbersegment number
displdispldispldispl r-m r-m r-m r-m
postbytepostbytepostbytepostbyte
d/d/d/d/
wwww
regregregreg
regregregreg constantconstantconstantconstant
v/v/v/v/
wwww
w
wwww postbytepostbytepostbytepostbyte immediatimmediatimmediatimmediat
JE PC+displacement
CALLF
MOV BX,[DI+45]
PUSH SI
ADD AX,#6765
SHL BX,1
TEST DX,#42
4 4 8
8 16 16
6 2 8
5 3
8
4 3 16
6 2 8
7 1 8
1
8
Eduardo Sanchez
Ecole Polytechnique Fédérale de LausannePage 20
Marché des microprocesseurs en 1997
180
160
140
120
100
80
60
40
20
0
68K (79.3)
MIPS (44.0)
SuperH (23.5)
ARM (10)i960 (9)x86 (9)
SPARC (1.5)
29K (2.3)
ST20 (2.3)
PowerPC (3.9)
PCs
Macintosh
Workstations
Mill
ion
s d
’un
ité
s v
en
du
es