la famille x86 - lsl · très vieille architecture: basée sur le 8080 (commercialisé en 1974,...

21
Eduardo Sanchez Laboratoire de Systèmes Logiques Ecole Polytechnique Fédérale de Lausanne La famille x86

Upload: ngothuan

Post on 16-Sep-2018

214 views

Category:

Documents


0 download

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

Eduardo Sanchez

Ecole Polytechnique Fédérale de LausannePage 21

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