Questi trasparenti sono una versione estesa di quelli prodotti per il consorzio NETTUNO 01/04/03 G. Bucci - Calcolatori Elettoronici 1
Giugno 1978: 8086 40 piedini 29.000 transistori f = 5 Mhz CPI = 15 01/04/03 G. Bucci - Calcolatori Elettoronici 2
8086 tempo medio per istruzione: 15 * 200 ns = 3 micro secondi equivalenti a 0,33 MIPS Spazio memoria: 1 Mbyte Parallelismo: 16 bit, interno (registri) ed esterno (bus dati) L 8088 differiva solo per il bus dati a 8 bit 01/04/03 G. Bucci - Calcolatori Elettoronici 3
Modello di Programmazione 8 registri di uso generale 4 registri di segmento 1 registro di stato (FLAGS) 1 instruction pointer (IP) 01/04/03 G. Bucci - Calcolatori Elettoronici 4
Modello di Programmazione 01/04/03 G. Bucci - Calcolatori Elettoronici 5
Registri dati (Quasi) intercambiabili Ma hanno anche ruoli specifici: AX: accumulatore BX: base CX: contatore DX: indirizzamento I/O 01/04/03 G. Bucci - Calcolatori Elettoronici 6
Registri puntatori SP: Stack Pointer BP: Base Pointer per puntare entro entro lo stack SI: Source Index DI: Destination Index 01/04/03 G. Bucci - Calcolatori Elettoronici 7
Altri registri REGISTRI DI SEGMENTO CS SS DS ES IP FLAGS 01/04/03 G. Bucci - Calcolatori Elettoronici 8
IP Instruction Pointer in accoppiamento con CS ha la funzione di puntatore di programma CS IP MEM 01/04/03 G. Bucci - Calcolatori Elettoronici 9
FLAGS (8086) 16 bit di stato e di controllo Stato: CF, AF, OF, SF, ZF, PF Controllo: DF, IF, TF 7 0 OF DF IF TF SF ZF AF PF CF 01/04/03 G. Bucci - Calcolatori Elettoronici 10
Evoluzione Con l 80386 (1985): I registri di uso generale (GPR), IP e FLAGS diventano a 32 bit (EAX, EBX, ECX,., EIP, EFLAGS) Tutti GPR sono usabili per indirizzare 01/04/03 G. Bucci - Calcolatori Elettoronici 11
Modello a 32 bit Dal 386 in poi A 16 bit 01/04/03 G. Bucci - Calcolatori Elettoronici 12
Organizzazione della memoria e segmentazione (8086) 01/04/03 G. Bucci - Calcolatori Elettoronici 13
Organizzazione della memoria Lo spazio di memoria è logicamente diviso in segmenti Segmento: unità di memoria con estensione massima di 2 16 =64 K Un segmento può essere sistemato in qualunque posizione di memoria I segmenti possono essere adiacenti, disgiunti, parzialmente o totalmente sovrapposti 01/04/03 G. Bucci - Calcolatori Elettoronici 14
Segmentazione CS, DS, SS, ES contengono l indirizzo di partenza dei segmenti correnti CS -> segmento di codice DS -> segmento dati SS -> segmento stack ES -> segmento extra 01/04/03 G. Bucci - Calcolatori Elettoronici 15
Indirizzo logico: SR:OFFSET 0 <= indirizzo fisico < 1 M SR 0 base Memoria OFFSET indirizzo fisico 1M 01/04/03 G. Bucci - Calcolatori Elettoronici 16
Calcolo dell indirizzo 01/04/03 G. Bucci - Calcolatori Elettoronici 17
Esempio 01/04/03 G. Bucci - Calcolatori Elettoronici 18
La segmentazione I segmenti di codice, dati e stack rappresentano tre spazi logici associabili in modo naturale alla struttura dei programmi Programma: Codice, Dati, Var. temporanee 01/04/03 G. Bucci - Calcolatori Elettoronici 19
La segmentazione Tende a oscurarne la leggibilità rispetto a uno spazio di indirizzi piatto Semplifica la rilocazione (basta aggiustare i registri di segmento) 01/04/03 G. Bucci - Calcolatori Elettoronici 20
Indirizzi logici (composizione) Reg normale Reg alternativo OFFSET Fetch CS --- IP Stack SS --- SP Variabili DS CS,ES,SS EA Str. Sorg DS CS,ES,SS SI Str.. Dest ES --- DI BP (base) SS CS,DS,SS EA 01/04/03 G. Bucci - Calcolatori Elettoronici 21
Evoluzione I registri di segmento restano a 16 bit Con il 286 il contenuto dei registri di segmento viene interpretato come selettore di segmento (modo virtuale protetto) Col 386 i registri di segmento diventano 6 e i segmenti possono arrivare fino a 1 Mbyte o 4 Gbyte (a seconda della granularità) 01/04/03 G. Bucci - Calcolatori Elettoronici 22
Osservazioni L 8086 è stato progettato a metà anni 70 All epoca la densità di integrazione era (relativamente) bassa: solo 29.000 transistori Non esistevano integrati commerciali con più di 40 piedini I progettisti hanno dovuto bilanciare le differenti esigenze Trade-off tra: obiettivi, costi (col vincolo della tecnologia) 01/04/03 G. Bucci - Calcolatori Elettoronici 23
Conseguenze Numero limitato di registri di CPU Registri e percorsi interni a 16 bit Indirizzo (fisico) a 20 bit solo in uscita dalla CPU Segmentazione della memoria Bus multiplexed (indirizzi e dati) Previsione di componenti di corredo (coprocessore) Tipica CPU microprogrammata: : repertorio di istruzioni complesso e disordinato 01/04/03 G. Bucci - Calcolatori Elettoronici 24
01/04/03 G. Bucci - Calcolatori Elettoronici 25
L integrato 01/04/03 G. Bucci - Calcolatori Elettoronici 26
L integrato: Alimentazione e Clock 01/04/03 G. Bucci - Calcolatori Elettoronici 27
RESET e READY Quando RESET è asserito: CS viene posto a FFFF (hex( hex) IP viene posto a 0 la prima istruzione eseguita è quella alla locazione FFFF0 Ready: : se non asserito determina cicli di wait 01/04/03 G. Bucci - Calcolatori Elettoronici 28
Modo Minimo/Massimo Selezionato attraverso il piedino MIN/MAX Il modo massimo prevede l uso del coprocessore esterno o di un eventuale processore di I/O 01/04/03 G. Bucci - Calcolatori Elettoronici 29
Bus 8086 Bus dati e indirizzi su linee condivise AD15-0 (più A19-16A 19-16) Occorrono: Latch per il bus indirizzi Transceiver per il bus dati ALE: Address Latch Enable 01/04/03 G. Bucci - Calcolatori Elettoronici 30
L integrato 8086 Linee Indirizzi e Dati 01/04/03 G. Bucci - Calcolatori Elettoronici 31
L integrato 8086 Modo minimo Vcc 01/04/03 G. Bucci - Calcolatori Elettoronici 32
Ricostruzione bus (in modo Minimo) 01/04/03 G. Bucci - Calcolatori Elettoronici 33
Ciclo di lettura A partire dal 286 (1982) bus dati e indirizzi sono separati 01/04/03 G. Bucci - Calcolatori Elettoronici 34
L integrato 8086 Modo massimo GND 01/04/03 G. Bucci - Calcolatori Elettoronici 35
Ricostruzione bus (in modo Massimo) 01/04/03 G. Bucci - Calcolatori Elettoronici 36
Schema di riferimento ABUS (20 bit) CPU DBUS (16 bit) Linee di controllo 01/04/03 G. Bucci - Calcolatori Elettoronici 37
01/04/03 G. Bucci - Calcolatori Elettoronici 38
Accesso alla memoria l 8086 può leggere/scrivere 16 bit (word) o 8 bit (byte) l 8088 legge/scrive sempre un byte Organizzazione Little endian Parola MSB I+1 LSB I 01/04/03 G. Bucci - Calcolatori Elettoronici 39
La memoria 4 3 2 1 0 1 3 5 0 2 4 Parola a indirizzo pari FFFFF FFFFE 01/04/03 G. Bucci - Calcolatori Elettoronici 40
La memoria 4 3 2 1 0 1 3 5 0 2 4 Parola a indirizzo dispari FFFFF FFFFE 01/04/03 G. Bucci - Calcolatori Elettoronici 41
Accesso alla memoria lettura/scrittura a 16 bit (8086): parola allineata ad indirizzo pari: : 1 ciclo di lettura/scrittura parola allineata agli indirizzi dispari: : 2 cicli di lettura/scrittura 01/04/03 G. Bucci - Calcolatori Elettoronici 42
Accesso alla memoria 01/04/03 G. Bucci - Calcolatori Elettoronici 43
Selezione BHE A0 0 0 Parola 1 0 Byte a indirizzo pari 0 1 Byte a indirizzo dispari 1 1 N. A. 01/04/03 G. Bucci - Calcolatori Elettoronici 44
Evoluzione Quando l architettura diventa a 32 bit (80386) la lettura è sempre per parole allineate a indirizzi multipli di 4 Dal Pentium il bus dati diventa a 64 bit: lette sempre due parole allineate 01/04/03 G. Bucci - Calcolatori Elettoronici 45
01/04/03 G. Bucci - Calcolatori Elettoronici 46
Struttura interna 01/04/03 G. Bucci - Calcolatori Elettoronici 47
Perché due unità? BIU ed EU possono lavorare in parallelo Quando EU è impegnata e non sta indirizzando la memoria, BIU può leggere dalla memoria la prossima istruzione in sequenza 01/04/03 G. Bucci - Calcolatori Elettoronici 48
La coda E una memoria di passaggio (buffer) per le istruzioni E una forma elementare di pipeline Dimensione: 6 6 byte nell 8086 4 4 byte nell 8088 01/04/03 G. Bucci - Calcolatori Elettoronici 49
Gestione della coda (8086) Per ottimizzare l uso del bus esterno è bene che la lettura sia a 16 bit Se un istruzione di salto porta ad un indirizzo dispari, viene letto un solo byte, in modo che le successive letture siano a 2 byte alla volta Nell immagine seguente si suppone che la lettura sia ad un indirizzo pari 01/04/03 G. Bucci - Calcolatori Elettoronici 50
Stato iniziale (coda vuota) 01/04/03 G. Bucci - Calcolatori Elettoronici 51
Primo fetch Istr. 1 01/04/03 G. Bucci - Calcolatori Elettoronici 52
Secondo fetch Istr. 2 Istr. 1 01/04/03 G. Bucci - Calcolatori Elettoronici 53
Terzo fetch Istr. 3 Istr. 2 Istr. 1 01/04/03 G. Bucci - Calcolatori Elettoronici 54
Prelievo Istr.1 Istr. 3 Istr. 2 01/04/03 G. Bucci - Calcolatori Elettoronici 55
Prelievo Istr.2 Istr. 3 01/04/03 G. Bucci - Calcolatori Elettoronici 56
Quarto fetch Istr. 4 Istr. 3 01/04/03 G. Bucci - Calcolatori Elettoronici 57
Prelievo Istr. 3 Istr. 4 01/04/03 G. Bucci - Calcolatori Elettoronici 58
Quinto fetch Istr. 5 Istr. 4 01/04/03 G. Bucci - Calcolatori Elettoronici 59
Sesto fetch Istr. 6 Istr. 5 Istr. 4 01/04/03 G. Bucci - Calcolatori Elettoronici 60
Evoluzione Nella versione attuale (P6) La CPU ha una cache istruzioni interna Dalla cache vengono prelevati 32 byte alla volta 01/04/03 G. Bucci - Calcolatori Elettoronici 61
DBUS (64 bit) Cache Istruzioni (linee di 32 byte) Marcamento Decodificatore 01/04/03 G. Bucci - Calcolatori Elettoronici 62
DBUS (64 bit) EIP Cache Istruzioni (linee di 32 byte) Marcamento Decodificatore 01/04/03 G. Bucci - Calcolatori Elettoronici 63
DBUS (64 bit) EIP Cache Istruzioni (linee di 32 byte) Marcamento 32 byte Decodificatore 01/04/03 G. Bucci - Calcolatori Elettoronici 64
DBUS (64 bit) EIP Cache Istruzioni Marcamento Decodifica 16 byte 01/04/03 G. Bucci - Calcolatori Elettoronici 65
DBUS (64 bit) EIP Cache Istruzioni Marcamento 01/04/03 G. Bucci - Calcolatori Elettoronici 66
DBUS (64 bit) EIP Cache Istruzioni Decodifica 01/04/03 G. Bucci - Calcolatori Elettoronici 67
DBUS (64 bit) EIP Cache Istruzioni Marcamento 01/04/03 G. Bucci - Calcolatori Elettoronici 68
01/04/03 G. Bucci - Calcolatori Elettoronici 69
Repertorio Istruzioni Molto ampio tipico di CPU microprogrammate Istruzioni di dimensione variabile, in base al codice di operazione e alla modalità di indirizzamento L istruzione MOV ha circa 30 variazioni 01/04/03 G. Bucci - Calcolatori Elettoronici 70
Trasferimento dell informazione MOV destination,source PUSH source POPF OUT port, accumulator.. 01/04/03 G. Bucci - Calcolatori Elettoronici 71
Aritmetiche e logiche ADD destination,source DEC destination IDIV source CBW SHR destination,count 01/04/03 G. Bucci - Calcolatori Elettoronici 72
Trasferimento del controllo JMP target CALL procedure JZ short-label LOOP short-label RET IP -128 +127 01/04/03 G. Bucci - Calcolatori Elettoronici 73
Formato Istruzioni di dimensione variabile, in base al codice di operazione e alla modalità di indirizzamento Almeno 1 byte per il codice di istruzione Da 0 a 5 byte aggiuntivi 01/04/03 G. Bucci - Calcolatori Elettoronici 74
Nei byte aggiuntivi Il tipo di indirizzamento Gli eventuali registri implicati Uno scostamento Un dato immediato Uno scostamento e un dato immediato 01/04/03 G. Bucci - Calcolatori Elettoronici 75
Istruzioni di 1 byte Operandi impliciti OP CLI Con registro PUSH AX OP R 01/04/03 G. Bucci - Calcolatori Elettoronici 76
Istruzioni di 2 byte Registro-registro MOV AL,BL OP R 11 R/M Registro-memoria OP m R R/M MOV AX,[BX] 01/04/03 G. Bucci - Calcolatori Elettoronici 77
Istruzioni di 4 byte Reg-mem con scostamento OP m R R/M Offset VAR ADD AL,VAR[BX] 01/04/03 G. Bucci - Calcolatori Elettoronici 78
Fetch istruzioni La decodifica delle istruzioni è basata su OP, m, R/M La loro combinazione determina il numero dei byte da estrarre dalla coda istruzioni. 01/04/03 G. Bucci - Calcolatori Elettoronici 79
Esempi di istruzioni PUSH AX 50 MOV AL,BL 8A C3 MOV AL,BL?????? B0 51 01/04/03 G. Bucci - Calcolatori Elettoronici 80
Esempi di istruzioni MOV AL, VAR A0 Offset VAR MOV AL,VAR[BX] 8A 87 Offset VAR MOV AL,VAR[BX][SI+3] 8A 80 Offset VAR +3 01/04/03 G. Bucci - Calcolatori Elettoronici 81
Esempi di istruzioni MOV VAR[BX],077FFH C7 87 Offset VAR 77FF 01/04/03 G. Bucci - Calcolatori Elettoronici 82
01/04/03 G. Bucci - Calcolatori Elettoronici 83
Indirizzamento Tra registri MOV AL, BL MOV CX, DX ;AL := BL ;CX := DX Immediato MOV AL, 27 ;AL := 27 MOV BX, 0A1C0H ;BX; := A1C0 ( BX := A1C0 (hex) 01/04/03 G. Bucci - Calcolatori Elettoronici 84
Riferimento alla memoria Il normale reg di segmento è DS MOV AX, VAR ; AX<- M[DS:offset(VAR)] Registro alternativo a DS MOV AX, ES:VAR ; ES in luogo di DS ; AX <- M[ES:offset(VAR)] 01/04/03 G. Bucci - Calcolatori Elettoronici 85
Indirizzamento in memoria Diretto MOV VAR,AX ; M[Offset(VAR)]:= AX Indiretto attraverso registri MOV [BX],AX ;M[BX] := AX 01/04/03 G. Bucci - Calcolatori Elettoronici 86
Indirizzamento in memoria Relativo MOV AX,VAR[BX] ;AX := M[Offset(VAR) + BX] Indiretto e indiciato MOV AX,[BX] [SI] ;AX := M[BX + SI] 01/04/03 G. Bucci - Calcolatori Elettoronici 87
Indirizzamento in memoria Forma generale MOV AX,V [BX] [SI] ;EA = Offset(V) + BX + SI ;AX := M[DS:EA] 01/04/03 G. Bucci - Calcolatori Elettoronici 88
Riferimento allo stack Le istruzioni PUSH e POP depositano e prelevano un dato a 16 bit dalla testa dello stack (e aggiornano SP) PUSH CX POP SI 01/04/03 G. Bucci - Calcolatori Elettoronici 89
Stack 01/04/03 G. Bucci - Calcolatori Elettoronici 90
Riferimento allo stack Entro lo stack si indirizza con BP MOV [BP][DI+40], AL ;EA= BP+DI+40 ; M[SS:EA]:= AL 01/04/03 G. Bucci - Calcolatori Elettoronici 91
Calcolo ind di memoria 01/04/03 G. Bucci - Calcolatori Elettoronici 92
Evoluzione Col 386 tutti i GPR diventano utilizzabili come puntatori Viene introdotto il fattore di scala Lo scostamento è a 8, 16 o 32 bit 01/04/03 G. Bucci - Calcolatori Elettoronici 93
Evoluzione SEG+BASE+(INDEX*SCALE)+DISPL CS DS SS ES FS GS EAX EBX ECX EAX EBX ECX EDX EBP ESI EDI + EDX + * EBP ESI EDI 1 2 4 8 + NO D 8b D 32b D 01/04/03 G. Bucci - Calcolatori Elettoronici 94
Indirizzamento porte di I/O Diretto (256 porte IN e 256 OUT ) IN OUT AL,PORTA PORTA,AX Attraverso DX (64 K porte) IN OUT AX,DX DX,AL 01/04/03 G. Bucci - Calcolatori Elettoronici 95
Indirizzamento istruzioni il contatore di programma è sempre dato dalla coppia CS:IP (equivalente all usuale Program Counter) salti/chiamate di soubroutine: Intrasegmento - modificano solo IP Intersegmento - modificano sia CS che IP 01/04/03 G. Bucci - Calcolatori Elettoronici 96
Trasferimento del controllo Intrasegmento: sostituisce IP Diretto: : IP:= IP + SCOST SCOST: 16/8 bit codificati nell istruzione Nei salti condizionati SCOST è sempre di 8 bit CALL NEAR_Proc JMP NEL_Segmento JNE NOT_Equal 01/04/03 G. Bucci - Calcolatori Elettoronici 97
Trasferimento del controllo Intrasegmento: sostituisce IP Indiretto: IP viene sostituito con il contenuto di un registro o di una parola di memoria JMP CX JMP [BX].TARGET 01/04/03 G. Bucci - Calcolatori Elettoronici 98
Trasferimento del controllo Intersegmento: sostituisce CS,IP Diretto: : (CS,IP):= SCOST H + SCOST L SCOST: 32 bit codificati nell istruzione JMP FAR_LABEL CALL FAR_PROC 01/04/03 G. Bucci - Calcolatori Elettoronici 99
Trasferimento del controllo Intersegmento: sostituisce CS,IP Indiretto: CS,IP vengono sostituiti con il contenuto di due parole consecutive di memoria JMP DWORD PTR[BX] CALL [BX].TASK[SI] 01/04/03 G. Bucci - Calcolatori Elettoronici 100
Salti condizionati JNE NOT_Equal JZ IS_0 Massimo scostamento: In avanti di 127 posizioni Indietro di 128 01/04/03 G. Bucci - Calcolatori Elettoronici 101
Modello di programmazione attuale 01/04/03 G. Bucci - Calcolatori Elettoronici 102
Aritmetica Floating L 8086 non aveva istruzioni in virgola Il coprocessore 8087: Concepito per lavorare in parallelo e in collaborazione con la CPU Estende il repertorio istruzioni Estende il modello di programmaz.. con 8 registri da 80 bit 01/04/03 G. Bucci - Calcolatori Elettoronici 103
Il coprocessore x87 Aritmetica floating velocizzata di un fattore 2. Esempio: FADD 1,6 ms solo 8086 14 micro s con 8087 01/04/03 G. Bucci - Calcolatori Elettoronici 104
Modello CPU-Coprocessore CPU NPX Numeric Processor Extension Bus esterno Il risultato è un processore con repertorio esteso 01/04/03 G. Bucci - Calcolatori Elettoronici 105
Modello esteso 01/04/03 G. Bucci - Calcolatori Elettoronici 106
Estensione repertorio Attraverso il codice (prefisso) di escape ESC 01/04/03 G. Bucci - Calcolatori Elettoronici 107
Collegamenti 01/04/03 G. Bucci - Calcolatori Elettoronici 108
Interazione 01/04/03 G. Bucci - Calcolatori Elettoronici 109
Interazione 01/04/03 G. Bucci - Calcolatori Elettoronici 110
Interazioni Interazione Sincronizzazione 01/04/03 G. Bucci - Calcolatori Elettoronici 111
Esecuzione istruzione Esempio: FADD Num CPU esegue il fetch 8087 riconosce ESC, preleva codice e indirizzo istruzione CPU legge alla prima posizione del dato (dummy read) 8087 preleva indirizzo del dato 8087 legge il resto del dato contendendo il bus alla CPU 8087 completa l istruzione 01/04/03 G. Bucci - Calcolatori Elettoronici 112
Controllo condivisione bus Controllo Bus locale 01/04/03 G. Bucci - Calcolatori Elettoronici 113
Protocollo Request/Grant 01/04/03 G. Bucci - Calcolatori Elettoronici 114
Integrazione Con il 486 (1989) il coprocessore è stato integrato nella CPU Il 486 integrava 1,2 M transistori 01/04/03 G. Bucci - Calcolatori Elettoronici 115
MMX: Multimedia Extension Col Pentium MMX (1997) è stato aggiunto un insieme di registri e di istruzioni per la multimedialità SIMD: Single Instruction Multiple Data model 01/04/03 G. Bucci - Calcolatori Elettoronici 116
MMX 8 nuovi registri da 64 bit (MM0, MM1,.. MM7) 57 istruzioni SIMD Esempio: packed byte integers 7 6 0 01/04/03 G. Bucci - Calcolatori Elettoronici 117
Streaming SIMD Extensions Introdotte col Pentium III (1999) 8 nuovi registri da 128 bit (XMM0, XMM1,.. XMM7) Istruzioni per packed and scalar single-precision floating-point 01/04/03 G. Bucci - Calcolatori Elettoronici 118
SSE Esempio: 128-Bit Packed Single-Precision Floating-Point (4 valori Floating singola precisione) 127 64 32 31 0 01/04/03 G. Bucci - Calcolatori Elettoronici 119
Prestazioni in MIPS delle CPU Intel dall'8086 al Pentium (1979) 8086 5MHz 0,33 8086 10MHz 0,75 (1982) 286 8 MHz 1,2 286 12MHz 2,66 (1985) 386DX 16MHz 3,6 (1989) 386DX 33MHz 11,4 (1989) 486DX 25MHz 20 486DX2 50MHz 41 486DX4 100MHz 70,7 (1993) PENTIUM 60MHz 100 PENTIUM 133MHz 218,9 0 50 100 150 200 250 01/04/03 G. Bucci - Calcolatori Elettoronici 120
Prestazioni Spec95 delle CPU Intel a partire dal Pentium Pentium 75MHz (Ott 1994) Pentium 100MHz (Mar 1994) 2,02 2,31 2,39 2,74 SPECfpP95 SPECint95 Pentium 200MHz (Giu 1996) 4,32 5,17 Pentium MMX 166MHz (Gen 1997) 4,34 5,6 Pentium MMX 233MHz (Giu 1997) 5,21 7,12 Pentium PRO 150MHz, 256K L2 (Nov 1995) 5,42 6,08 Pentium PRO 200MHz, 1MB L2 (Ago 1997) 6,8 8,66 Pentium II 233MHz (Mag 1997) 7,04 9,47 Pentium II 333MHz (Gen 1998) 9,14 12,8 01/04/03 G. Bucci - Calcolatori Elettoronici 121 0 2 4 6 8 10 12 14