Giugno 1978: 8086 Giugno 1978: 8086
è 40 piedini è 40 piedini
è 29.000 transistori è 29.000 transistori
è f = 5 Mhz
è f = 5 Mhz
8086 8086
è tempo medio per istruzione:
15 * 200 ns = 3 micro secondi equivalenti a 0,33 MIPS
è tempo medio per istruzione:
15 * 200 ns = 3 micro secondi equivalenti a 0,33 MIPS
è Spazio memoria: 1 Mbyte è Spazio memoria: 1 Mbyte è Parallelismo: 16 bit, interno
(registri) ed esterno (bus dati)
è Parallelismo: 16 bit, interno
(registri) ed esterno (bus dati)
Modello di Programmazione Modello di Programmazione
è 8 registri di uso generale è 8 registri di uso generale
è 4 registri di segmento è 4 registri di segmento
è1 registro di stato (FLAGS)
è 1 registro di stato (FLAGS)
Modello di Programmazione
Modello di Programmazione
Registri dati Registri dati
è (Quasi) intercambiabili è (Quasi) intercambiabili
è Ma hanno anche ruoli specifici:
AX: accumulatore BX: base
CX: contatore
è Ma hanno anche ruoli specifici:
AX: accumulatore BX: base
CX: contatore
Registri puntatori Registri puntatori
è SP: Stack Pointer è SP: Stack Pointer
è BP: Base Pointer
per puntare entro entro lo stack è BP: Base Pointer
per puntare entro entro lo stack è SI: Source Index
è SI: Source Index
CS CS SS SS DS DS
REGISTRI DI SEGMENTO REGISTRI DI SEGMENTO
IP IP FLAGS FLAGS
Altri registri
Altri registri
CS CS IP IP
MEM MEM
IP IP
è Instruction Pointer in
accoppiamento con CS ha la
funzione di puntatore di programma è Instruction Pointer in
accoppiamento con CS ha la
funzione di puntatore di programma
0 7
16
FLAGS (8086) FLAGS (8086)
è bit di stato e di controllo è bit di stato e di controllo
4 Stato: CF, AF, OF, SF, ZF, PF 4 Stato: CF, AF, OF, SF, ZF, PF
4 Controllo: DF, IF, TF
4 Controllo: DF, IF, TF
Con l’80386 (1985):
Con l’80386 (1985):
è I registri di uso generale (GPR), IP e FLAGS diventano a 32 bit
(EAX, EBX, ECX, …., EIP, EFLAGS)è I registri di uso generale (GPR), IP e FLAGS diventano a 32 bit
(EAX, EBX, ECX, …., EIP, EFLAGS)è Tutti GPR sono usabili per è Tutti GPR sono usabili per
Evoluzione
Evoluzione
Modello a 32 bit Modello a 32 bit
Dal 386 in poi Dal 386 in poi
A 16 bit
Organizzazione della
memoria e
segmentazione Organizzazione
della
memoria
segmentazione e
Organizzazione della memoria Organizzazione della memoria
è Lo spazio di memoria è logicamente diviso in segmenti
è Lo spazio di memoria è logicamente diviso in segmenti
è Segmento: unità di memoria con estensione massima di 2
16=64 K è Segmento: unità di memoria con estensione massima di 2
16=64 K
è Un segmento può essere sistemato in qualunque posizione di memoria
è Un segmento può essere sistemato in qualunque posizione di memoria
è I segmenti possono essere adiacenti,
è I segmenti possono essere adiacenti,
Segmentazione Segmentazione
CS, DS, SS, ES contengono l’indirizzo di partenza
dei segmenti correnti
CS, DS, SS, ES contengono l’indirizzo di partenza
dei segmenti correnti
è CS -> segmento di codice è CS -> segmento di codice
è DS -> segmento dati
è DS -> segmento dati
Indirizzo logico: SR:OFFSET Indirizzo logico: SR:OFFSET
0 <= indirizzo fisico < 1 M 0 <= indirizzo fisico < 1 M
SR SR SR
0 0
OFFSET
OFFSET indirizzo
fisico
indirizzo fisico
base base
Memoria
Memoria
Calcolo dell’indirizzo
Calcolo dell’indirizzo
Esempio
La segmentazione La segmentazione
è I segmenti di codice, dati e stack rappresentano tre spazi logici
associabili in modo naturale alla struttura dei programmi
è I segmenti di codice, dati e stack rappresentano tre spazi logici
associabili in modo naturale alla struttura dei programmi
è Programma:
è Programma:
è Tende a oscurarne la leggibilità rispetto a uno spazio di indirizzi piatto
è Tende a oscurarne la leggibilità rispetto a uno spazio di indirizzi piatto
è Semplifica la rilocazione
(basta aggiustare i registri di è Semplifica la rilocazione
(basta aggiustare i registri di
La segmentazione
Fetch Fetch
FetchStack Stack
StackVariabili Variabili
VariabilinormaleRegReg normale
CS CS SS SS DS DS
---
---
---
CS,ES,SS CS,ES,SS
CS,ES,SSalternativoRegRegReg alternativo alternativo
---
------
OFFSET OFFSET OFFSET
IP IP
IPSP SP
SPEA EA
EAIndirizzi logici (composizione)
Indirizzi logici (composizione)
Str. Sorg
Str
Str
. Sorg.
SorgDS DS
CS,ES,SSCS,ES,SS CS,ES,SS
SISI SI
è I registri di segmento restano a 16 bit è I registri di segmento restano a 16 bit
è Col 386 i registri di segmento diventano 6 e i segmenti possono arrivare fino a 1 è Col 386 i registri di segmento diventano
6 e i segmenti possono arrivare fino a 1 è Con il 286 il contenuto dei registri di
segmento viene interpretato come
selettore di segmento (modo virtuale protetto)
è Con il 286 il contenuto dei registri di segmento viene interpretato come
selettore di segmento (modo virtuale protetto)
Evoluzione
Evoluzione
nn L’8086 è stato progettato a metà anni ‘70L’8086 è stato progettato a metà anni ‘70 nn All’epoca la densità di integrazione eraAll’epoca la densità di integrazione era
(relativamente) bassa: “
(relativamente) bassa: “solo” solo” 29.00029.000 transistori
transistori
nn Non esistevano integrati commerciali con piùNon esistevano integrati commerciali con più di 40 piedini
di 40 piedini
nn I progettisti hanno dovuto bilanciare leI progettisti hanno dovuto bilanciare le differenti esigenze
differenti esigenze
Osservazioni
Osservazioni
Conseguenze Conseguenze
nn Numero limitato di registri di CPUNumero limitato di registri di CPU nn Registri e percorsi interni a 16 bitRegistri e percorsi interni a 16 bit
nn Indirizzo (fisico) a 20 bit solo in uscita dalla CPUIndirizzo (fisico) a 20 bit solo in uscita dalla CPU nn Segmentazione della memoriaSegmentazione della memoria
nn Bus multiplexedBus multiplexed (indirizzi e dati) (indirizzi e dati)
nn Previsione di componenti di corredoPrevisione di componenti di corredo (coprocessore)
(coprocessore)
L’integrato
L’integrato:
Alimentazione
Clock e
RESET e READY RESET e READY
Quando RESET è asserito:
Quando RESET è asserito:
nn
CS viene posto a FFFF ( CS viene posto a FFFF ( hex hex ) )
nnIP viene posto a 0 IP viene posto a 0
nn la prima istruzione eseguita è quella allala prima istruzione eseguita è quella alla locazione FFFF0
locazione FFFF0
nn Ready
Ready : se non asserito determina : se non asserito determina
nn
Selezionato attraverso il piedino Selezionato attraverso il piedino MIN/MAX
MIN/MAX
nn
Il modo massimo prevede l’uso del Il modo massimo prevede l’uso del coprocessore esterno o di un
coprocessore esterno o di un
Modo Minimo/Massimo
Modo Minimo/Massimo
Bus 8086 Bus 8086
nn
Bus dati e indirizzi su linee condivise Bus dati e indirizzi su linee condivise AD AD
15-0 15-0(più A (più A
19-1619-16) )
nn
Occorrono: Occorrono:
nn
Latch Latch per il bus indirizzi per il bus indirizzi
nnTransceiver Transceiver per il bus dati per il bus dati
ALE ALE : : Address Latch Enable Address Latch Enable
L’integrato 8086 L’integrato 8086
Linee Linee Indirizzi Indirizzi
e e
Dati Dati
L’integrato 8086 L’integrato 8086
Modo Modo minimo minimo
Vcc
Ricostruzione bus Ricostruzione bus
(in modo Minimo)
(in modo Minimo)
Ciclo di lettura Ciclo di lettura
A partire dal 286 (1982) A partire dal 286 (1982) bus dati e indirizzi sono bus dati e indirizzi sono
separati
separati
L’integrato 8086 L’integrato 8086
Modo Modo massimo
massimo GND
Ricostruzione bus Ricostruzione bus
(in modo Massimo)
(in modo Massimo)
CPU CPU DBUS DBUS (16 bit) (16 bit)
Linee di controllo Linee di controllo ABUS
ABUS (20 bit) (20 bit)
Schema
Schema di riferimento di riferimento
Accesso alla memoria Accesso alla memoria
nn
l’8086 può leggere/scrivere 16 bit l’8086 può leggere/scrivere 16 bit (word) o 8 bit (byte)
(word) o 8 bit (byte)
nn
l’8088 legge/scrive sempre un byte l’8088 legge/scrive sempre un byte
nnOrganizzazione Organizzazione
Little endianLittle endian
MSB LSB
La memoria La memoria
3 3
4 4 0 0 2 2 1 1
5 5
4 4 3 3 2 2 1 1 0 0 Parola
Parola a a indirizzo indirizzo
pari pari
3 3
4 0 0 2 2 1 1
5
4 4 3 3 2 2 1 1 0 0 Parola
Parola a a indirizzo indirizzo
dispari dispari
La memoria
La memoria
Accesso alla memoria Accesso alla memoria
nn
lettura/scrittura a 16 bit (8086): lettura/scrittura a 16 bit (8086):
nn parola allineata ad indirizzo pariparola allineata ad indirizzo pari: 1 ciclo: 1 ciclo di lettura/scrittura
di lettura/scrittura
nn parola allineata agli indirizzi dispariparola allineata agli indirizzi dispari: 2: 2 cicli di lettura/scrittura
cicli di lettura/scrittura
Accesso alla memoria
Accesso alla memoria
Selezione Selezione
BHE A0 BHE A0
0 0
0 0 Parola Parola 1 0
1 0 Byte a indirizzo pari Byte a indirizzo pari 0 1
0 1 Byte a indirizzo dispari Byte a indirizzo dispari 1 1
1 1 N. A. N. A.
Evoluzione Evoluzione
nn
Quando l’architettura diventa a 32 bit Quando l’architettura diventa a 32 bit (80386) la lettura è sempre per parole (80386) la lettura è sempre per parole allineate a indirizzi multipli di 4
allineate a indirizzi multipli di 4
nn
Dal Dal Pentium Pentium il bus dati diventa a 64 il bus dati diventa a 64
bit: lette sempre due parole allineate
bit: lette sempre due parole allineate
Struttura interna
Struttura interna
Perché due unità ? Perché due unità ?
nn
BIU ed EU possono lavorare in BIU ed EU possono lavorare in parallelo
parallelo
nn
Quando EU è impegnata e non sta Quando EU è impegnata e non sta indirizzando la memoria, BIU può indirizzando la memoria, BIU può leggere dalla memoria la prossima leggere dalla memoria la prossima istruzione in sequenza
istruzione in sequenza
La coda La coda
nn
E’ una E’ una
memoria di passaggiomemoria di passaggio (buffer)(buffer) per le istruzioni
per le istruzioni
nn
E’ una forma elementare di pipeline E’ una forma elementare di
pipeline nnDimensione: Dimensione:
Gestione della coda (8086) Gestione della coda (8086)
nn
Per ottimizzare l’uso del bus esterno Per ottimizzare l’uso del bus esterno è bene che la lettura sia a 16 bit
è bene che la lettura sia a 16 bit
nn
Se un’istruzione di salto porta ad un Se un’istruzione di salto porta ad un indirizzo dispari, viene letto un solo indirizzo dispari, viene letto un solo byte, in modo che le successive
byte, in modo che le successive
letture siano a 2 byte alla volta
letture siano a 2 byte alla volta
Stato iniziale ( coda vuota )
Stato iniziale ( coda vuota )
Istr. 1 Istr. 1
Primo fetch
Primo fetch
Istr. 2 Istr. 2
Secondo fetch
Secondo fetch
Istr. 3 Istr. 3
Terzo fetch Terzo fetch
Istr. 2 Istr. 2
Istr. 1
Istr. 1
Prelievo Istr.1 Prelievo Istr.1
Istr. 3 Istr. 3
Istr. 2
Istr. 2
Istr. 3 Istr. 3
Prelievo Istr.2
Prelievo Istr.2
Istr. 3 Istr. 3
Quarto fetch Quarto
Quarto fetch fetch
Istr. 4
Istr. 4
Istr. 4 Istr. 4
Prelievo Istr. 3
Prelievo Istr. 3
Istr. 4 Istr. 4
Quinto fetch Quinto fetch
Istr. 5
Istr. 5
Istr. 4 Istr. 4
Istr. 5 Istr. 5
Sesto fetch Sesto fetch
Istr. 6
Istr. 6
Evoluzione Evoluzione
Nella versione attuale (P6) Nella versione attuale (P6)
nn La CPU ha una cache istruzioni internaLa CPU ha una cache istruzioni interna nn Dalla cache vengono prelevati 32 byteDalla cache vengono prelevati 32 byte
alla volta alla volta
Cache
CacheIstruzioni
IstruzioniDBUS (64 bit) DBUS (64 bit)
(linee di 32 byte)
(linee di 32 byte)
Marcamento
MarcamentoCache
CacheIstruzioni
IstruzioniDBUS (64 bit) DBUS (64 bit)
EIP
EIP
(linee di 32 byte)
(linee di 32 byte)
Marcamento
MarcamentoCache
CacheIstruzioni
IstruzioniDBUS (64 bit) DBUS (64 bit)
EIP
EIP
(linee di 32 byte)
(linee di 32 byte)32 byte 32 byte
Marcamento
MarcamentoCache
CacheIstruzioni
Istruzioni EIPEIP
Marcamento
MarcamentoDBUS (64 bit) DBUS (64 bit)
Cache
CacheIstruzioni
Istruzioni EIPEIP
Marcamento
MarcamentoDBUS (64 bit) DBUS (64 bit)
Cache
CacheIstruzioni
Istruzioni EIPEIP
DBUS (64 bit) DBUS (64 bit)
Cache
CacheIstruzioni
Istruzioni EIPEIP
Marcamento
MarcamentoDBUS (64 bit) DBUS (64 bit)
Repertorio Istruzioni Repertorio Istruzioni
nn
Molto ampio Molto ampio tipico di CPU
tipico di CPU microprogrammate microprogrammate
nn
Istruzioni di dimensione variabile, in Istruzioni di dimensione variabile, in base al codice di operazione e alla
base al codice di operazione e alla modalità di indirizzamento
modalità di indirizzamento
Trasferimento dell’informazione Trasferimento dell’informazione
MOV MOV destination,source
destination,sourcePUSH source PUSH
source
POPF POPF
OUT OUT
port, accumulator port, accumulatorAritmetiche e logiche Aritmetiche e logiche
ADDADD destination,source destination,source DECDEC destination destination
IDIVIDIV source source CBWCBW
SHRSHR destination,count destination,count
Trasferimento del controllo Trasferimento del controllo
JMPJMP target target CALL
CALL procedureprocedure JZJZ short-label short-label LOOP
LOOP short-labelshort-label RETRET
-128-128 +127+127
IP IP
Formato Formato
nn
Istruzioni di dimensione variabile, in Istruzioni di dimensione variabile, in base al codice di operazione e alla
base al codice di operazione e alla modalità di indirizzamento
modalità di indirizzamento
nn
Almeno 1 byte per il codice di Almeno 1 byte per il codice di istruzione
istruzione
nn
Da 0 a 5 byte aggiuntivi Da 0 a 5 byte aggiuntivi
Nei byte aggiuntivi Nei byte aggiuntivi
nn
Il tipo di indirizzamento Il tipo di indirizzamento
nn
Gli eventuali registri implicati Gli eventuali registri implicati
nnUno Uno scostamento scostamento
nn
Un dato immediato Un dato immediato
nn
Uno scostamento Uno scostamento e un dato e un dato
Istruzioni di 1 byte Istruzioni di 1 byte
CLI CLI
nn
Operandi Operandi impliciti impliciti OP OP
nn
Con registro Con registro OP OP R R PUSH AX
PUSH AX
Istruzioni di 2 byte Istruzioni di 2 byte
MOV AL,BL MOV AL,BL
nn
Registro-registro Registro-registro OP OP
1111R R
R/MR/Mnn
Registro-memoria Registro-memoria OP OP
mmR R
R/MR/MIstruzioni di 4 byte Istruzioni di 4 byte
nn
Reg Reg - - mem mem con con scostamento scostamento
ADD AL,VAR[BX]
ADD AL,VAR[BX]
Offset VAR
Offset VAR
OP OP
mmR R
R/MR/MFetch
Fetch istruzioni istruzioni
nn
La decodifica delle istruzioni è basata La decodifica delle istruzioni è basata su OP, m, R/M
su OP, m, R/M
nn
La loro combinazione determina il La loro combinazione determina il
numero dei byte da estrarre dalla
numero dei byte da estrarre dalla
Esempi di istruzioni Esempi di istruzioni
8A 8A C3 C3
B0 B0 51 51 50 50
nn
PUSH AX PUSH AX
nnMOV AL,BL MOV AL,BL
nn
MOV AL,BL?????? MOV AL,BL??????
Esempi di istruzioni Esempi di istruzioni
A0 A0 Offset VAR Offset VAR
Offset VAR Offset VAR 8A 8A 87 87
nn
MOV AL, VAR MOV AL, VAR
nn
MOV AL,VAR[BX] MOV AL,VAR[BX]
Esempi di istruzioni Esempi di istruzioni
nn
MOV VAR[BX],077FFH MOV VAR[BX],077FFH Offset VAR
Offset VAR
C7 C7 87 87 77FF 77FF
Indirizzamento Indirizzamento
Tra registri Tra registri
MOV
MOV AL, BL AL, BL ;AL := BL ;AL := BL MOV
MOV CX, DX CX, DX ;CX := DX ;CX := DX Immediato
Immediato
MOV MOV AL, 27 AL, 27 ;AL := 27 ;AL := 27
Riferimento alla memoria Riferimento alla memoria
nn
Il normale Il normale reg reg di segmento è DS di segmento è DS
MOVMOV AX, VAR ; AX<- M[DS:offset(VAR)]AX, VAR ; AX<- M[DS:offset(VAR)]
nn
Registro alternativo a DS Registro alternativo a DS
MOVMOV AX, ES:VARAX, ES:VAR ; ES in luogo di DS ; ES in luogo di DS
Indirizzamento in memoria Indirizzamento in memoria
nn
Diretto Diretto MOV
MOV VAR,AX VAR,AX
; M[Offset(VAR)]:= AX
; M[Offset(VAR)]:= AX nn
Indiretto attraverso registri Indiretto attraverso registri
MOV MOV [BX],AX [BX],AX
;M[BX] := AX;M[BX] := AX
nn
Relativo Relativo
MOV MOV AX,VAR[BX] AX,VAR[BX]
;AX := M[Offset(VAR) + BX]
;AX := M[Offset(VAR) + BX]
nn
Indiretto e Indiretto e indiciato indiciato MOV MOV AX,[BX] [SI] AX,[BX] [SI]
Indirizzamento in memoria
Indirizzamento in memoria
nn
Forma generale Forma generale
MOV MOV AX,V [BX] [SI] AX,V [BX] [SI]
;EA = Offset(V) + BX + SI
;EA = Offset(V) + BX + SI
Indirizzamento in memoria
Indirizzamento in memoria
Riferimento allo
Riferimento allo stack stack
nn
Le istruzioni PUSH e POP depositano Le istruzioni PUSH e POP depositano e prelevano un dato a 16 bit dalla
e prelevano un dato a 16 bit dalla testa dello
testa dello stack stack (e aggiornano SP) (e aggiornano SP) PUSH
PUSH CX CX
POP POP SI SI
Stack
Stack
Riferimento allo
Riferimento allo stack stack
nn
Entro lo stack Entro lo stack si indirizza con BP si indirizza con BP MOV
MOV [BP][DI+40], AL [BP][DI+40], AL
;EA= BP+DI+40
;EA= BP+DI+40
Calcolo ind di memoria
Evoluzione Evoluzione
è Col 386 tutti i GPR diventano utilizzabili come puntatori
è Col 386 tutti i GPR diventano utilizzabili come puntatori
è Viene introdotto il fattore di scala
è Viene introdotto il fattore di scala
è Lo scostamento è a 8, 16 o
è Lo scostamento è a 8, 16 o
CSCS ESES DSDS FSFS
SSSS GSGS
ECXECX ESIESI EAXEAX EBXEBX EDXEDX EBPEBP EDIEDI
+ +
ECXECX ESIESI EAXEAX EBXEBX EDXEDX EBPEBP EDIEDI
+ + * *
11 22 44 88
+ +
NO DNO D 8b D8b D 32b D 32b D
SEG+BASE+(INDEX*SCALE)+DISPL SEG+BASE+(INDEX*SCALE)+DISPL
Evoluzione
Evoluzione
Indirizzamento porte di I/O Indirizzamento porte di I/O
Diretto (256 porte IN e 256 OUT ) Diretto (256 porte IN e 256 OUT )
IN IN AL,PORTA AL,PORTA OUT
OUT PORTA,AX PORTA,AX
Attraverso DX (64 K porte) Attraverso DX (64 K porte)
IN IN AX,DX AX,DX
Indirizzamento istruzioni Indirizzamento istruzioni
nn
il contatore di programma è il contatore di programma è
sempresempre dato dalla coppia CS:IP
dato dalla coppia CS:IP (equivalente (equivalente all’usuale
all’usuale Program Counter Program Counter ) )
nnsalti/chiamate di salti/chiamate di soubroutine soubroutine : :
Intrasegmento
Intrasegmento
- modificano solo IP - modificano solo IP Intersegmento
Intersegmento
- modificano sia CS - modificano sia CS
che IP
Trasferimento del controllo Trasferimento del controllo
Intrasegmento
Intrasegmento : :
sostituisce IPsostituisce IP
nn
Diretto Diretto : IP:= IP + SCOST : IP:= IP + SCOST
nn SCOST: 16/8 bit codificati nell’istruzioneSCOST: 16/8 bit codificati nell’istruzione nn Nei salti condizionati SCOST è sempre di 8Nei salti condizionati SCOST è sempre di 8
bitbit
CALL NEAR_
CALL NEAR_ Proc Proc
Trasferimento del controllo Trasferimento del controllo
Intrasegmento
Intrasegmento : :
sostituisce IPsostituisce IP Indiretto
Indiretto : : IP viene sostituito con il IP viene sostituito con il contenuto di un registro o di una contenuto di un registro o di una parola di memoria
parola di memoria
JMP JMP CX CX
Trasferimento del controllo Trasferimento del controllo
Intersegmento
Intersegmento : :
sostituisce CS,IPsostituisce CS,IP
nn
Diretto Diretto : (CS,IP):= SCOST : (CS,IP):= SCOST
HH+ SCOST + SCOST
LLnn SCOST: 32 bit codificati nell’istruzioneSCOST: 32 bit codificati nell’istruzione
JMP JMP FAR_LABEL FAR_LABEL
CALL CALL FAR_PROC FAR_PROC
Trasferimento del controllo Trasferimento del controllo
Intersegmento
Intersegmento : :
sostituisce CS,IPsostituisce CS,IP
nn
Indiretto: Indiretto:
nn CS,IP vengono sostituiti con il contenutoCS,IP vengono sostituiti con il contenuto di due parole consecutive di memoria
di due parole consecutive di memoria
JMP DWORD PTR[BX]
JMP DWORD PTR[BX]
Salti condizionati Salti condizionati
JNE JNE NOT_ NOT_ Equal Equal JZ JZ IS_0 IS_0
Massimo
Massimo scostamento scostamento : :
nn
In avanti di 127 posizioni In avanti di 127 posizioni
nnIndietro di 128 Indietro di 128
Modello di Modello di
programmazione programmazione
attuale
attuale
Aritmetica Floating Aritmetica Floating
nn
L’8086 non aveva istruzioni in L’8086 non aveva istruzioni in virgola
virgola
nn
Il coprocessore 8087: Il coprocessore 8087:
nn Concepito per lavorare in parallelo e inConcepito per lavorare in parallelo e in collaborazione con la CPU
collaborazione con la CPU
nn Estende il repertorio istruzioniEstende il repertorio istruzioni
Il coprocessore x87 Il coprocessore x87
nn
Aritmetica floating velocizzata di un Aritmetica floating velocizzata di un fattore 2.
fattore 2.
n n Esempio: FADD Esempio: FADD
nn 1,6 ms1,6 ms solo 8086 solo 8086
nn 14 micro14 micro s con 8087 s con 8087
Modello CPU-Coprocessore Modello CPU-Coprocessore
CPU
CPU
NPXNPX
Bus esterno
Bus esterno
Numeric
NumericProcessor
ProcessorExtension
ExtensionModello esteso
Estensione repertorio
n Attraverso il codice (prefisso) di
escape ESC
Collegamenti
Interazione
Interazione
Interazioni
Interazione Sincronizzazione
Esecuzione istruzione
Esempio: FADD Num
n CPU esegue il fetch
¨ 8087 riconosce ESC, preleva codice e indirizzo istruzione
n CPU legge alla prima posizione del dato (dummy read)
¨ 8087 preleva indirizzo del dato
n 8087 legge il resto del dato contendendo
Controllo condivisione bus
Controllo
Bus locale
Protocollo Request/Grant
Integrazione Integrazione
nn
Con il 486 (1989) il coprocessore è Con il 486 (1989) il coprocessore è stato integrato nella CPU
stato integrato nella CPU
nn
Il 486 integrava 1,2 M transistori Il 486 integrava 1,2 M transistori
MMX: Multimedia
MMX: Multimedia Extension Extension
nnCol PentiumCol Pentium MMX (1997) è stato MMX (1997) è stato aggiunto un insieme di registri e di aggiunto un insieme di registri e di
istruzioni per la multimedialità istruzioni per la multimedialità
nnSIMD: Single SIMD: Single Instruction Instruction MultipleMultiple Data
Data modelmodel
MMX MMX
nn
8 nuovi registri da 64 bit 8 nuovi registri da 64 bit (MM0, MM1, ….. MM7)
(MM0, MM1, ….. MM7)
nn57 istruzioni SIMD57 istruzioni SIMD
Esempio:
Esempio: packed byte
packed
byte integersintegers
Streaming
Streaming SIMD SIMD Extensions Extensions
nnIntrodotte col Pentium Introdotte col Pentium III (1999)III (1999) nn8 nuovi registri da 128 bit8 nuovi registri da 128 bit
(XMM0, XMM1, ….. XMM7) (XMM0, XMM1, ….. XMM7)
nIstruzioni per packed and scalar single-precision floating-point
SSE SSE
00 3131
127127 6464 3232
Esempio:
128-Bit Packed Single-Precision Floating-Point
(4 valori Floating singola precisione)
Prestazioni in MIPS delle CPU Intel dall'8086 al Pentium
41 20
11,4 3,6 2,66 1,2 0,75 0,33
486DX2 50MHz (1989) 486DX 25MHz (1989) 386DX 33MHz (1985) 386DX 16MHz 286 12MHz (1982) 286 8 MHz 8086 10MHz (1979) 8086 5MHz
Prestazioni Spec95 delle CPU Intel a partire dal Pentium
6,08
7,12 5,6
5,17 2,74
2,31
5,42 5,21 4,34 4,32 2,39
2,02
Pentium PRO 150MHz, 256K L2 (Nov 1995)
Pentium MMX 233MHz (Giu 1997)
Pentium MMX 166MHz (Gen 1997)
Pentium 200MHz (Giu 1996)
Pentium 100MHz (Mar 1994)
Pentium 75MHz (Ott 1994)
SPECfpP95 SPECint95