Architettura degli Elaboratori e delle Reti Lezione 33 L architettura Intel Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 33 1/30 Le prime architetture Intel 1978 8086 Estensione del micro-processore 8080 utilizzato per applicazioni industriali. Stessa ISA, ma architettura a 16 bit (registri a 16 bit) Parte dei registri è dedicata a compiti specifici 1980 8087 Coprocessore matematico per 8086. Dedicato a velocizzare le operazioni in virgola mobile. Estensione degli operandi a 10 byte (80bit): Extended Double Precision E il compilatore a poter dichiarare variabili su 10byte Modifica nel modo di gestire gli operandi, prelevabili dallo stack o dai registri Push <operando_1> in stack (esteso a 10byte) Push <operando_2> in stack (esteso a 10byte) Operazione Pop <risultato> Limite nello spazio di indirizzamento: 1 Mbyte (2 20 ) Gestione di memoria ed I/O tramite 3 segnali di controllo: RD, WR, IO/MEM Es. Read Memory: IO/MEM = 0 ; RD = 1 ; WR = 0 L 33 2/30 1
Le architetture Intel avanzate 1982 80286: L architettura diventa a 24 bit. Viene utilizzata una modalità di utilizzo protetta che consente di mappare le pagine di memoria in indirizzi privati. Aggiunta di istruzioni specifiche. 1985 80386: Architettura full 32 bit (dati, indirizzamento e registri a 32 bit) Nuove istruzioni, molto vicino ad un calcolatore con general-purpose registers. Pre-fetching. Paginazione della RAM. 1989-1992 80486 = 80386+80387: Istruzioni per la gestione delle architetture multi-processore. Memoria cache. Architettura pipe-line (singola). Microprogrammazione per l Unità di controllo (FSM). 1992-1995 Pentium, PentiumPro: Pipe-line multiple (architettura superscalare). Doppia CPU. Tecnologia MMX (Multi-media extension, SIMD). Cache primaria e secondaria (separata, con bus dedicato) 1997 Pentium II: Memorie cache a doppio accesso. Cache dei registri di segmento. PentiumPro + MMX. 1999 Pentium III: Internet Streaming Single Instruction Multiple Data extensions (ISSE) Estensione dell architettura MMX ad istruzioni floating-point. L2 cache integrata nella CPU 2001 Pentium 4: Estensione del parallelismo e della superscalarità L 33 3/30 Architettura x86 Architettura CISC Lunghezza istruzioni: 1 17 bytes Operazioni direttamente in memoria Architettura condizionata dalla storia necessità di compatibilità verso il basso Real mode/protected mode/virtual 8086 Mode Registri: not general-purpose register ogni registro è progettato per un uso specifico dal 80386 in poi (IA-32) si definiscono 8 GP registers, ma non veri GPR come in MIPS L 33 4/30 2
Modi di funzionamento IA-32 Modalità reale (Real mode) Modalità compatibile DOS Max memoria indirizzabile: 1 MByte 2 20 modo attivo all accensione (power-on) Modalità protetta (Protected mode) modalità nativa di IA-32 Memoria indirizzabile: 4 GByte 2 32 Memoria protetta: evita corruzione memoria da parte di altri programmi Memoria virtuale: permette ad un programma di disporre di più memoria di quella fisica disponibile Modalità 8086 virtuale (Virtual-8086 mode) Real mode simulato all interno del Protected Mode Esecuzione di programmi DOS in multitasking con altri programmi che girano in Protected Mode. L 33 5/30 Indirizzamento in modalità protetta Interleaving dei segmenti: Spazio di indirizzamento di 1 Mbyte suddiviso in 16 segmenti di 64 kbyte Modalità reale (16 + 4 address bit) Indirizzo = 16 * Segmento + Offset In tal modo posso indirizzare 64KB x 16 = 1 MByte di MP Modalità Virtual 8086: Indirizzo e offset sono separati. Modalità protetta (32 address bit) Spazio di indirizzamento: 32 bit SALTO: indirizzo = composizione registri CS e IP CS = 0x80B8, IP = 0x019D indirizzo istruz. successiva: 0x 80B8 019D L 33 6/30 3
L Intel 80486 Integrazione in un solo chip di CPU, Coprocessore e Cache controller. L 33 7/30 L Intel 80486 Struttura interna Interfacciamento con il resto della macchina tramite la porta verso il bus (bus port). Sul bus vengono inviati i dati, gli indirizzi ed i segnali di controllo. Caratteristiche: Pipeline a 5 stadi Bus interno a 64 bit Cache di 8 kbyte (modalità: write-through) Control unit micro-programmata L 33 8/30 4
INTEL Pentium L 33 9/30 Pentium struttura interna Architettura 32/64 bit Bus dati: 64 bit Bus indirizzi / registri: 32 bit 2 pre-fetch queues: pipelines u, v pipeline u si interfaccia con la pipeline floating point. APIC: Advanced Programmable Interrupt Controller Cache collegate al bus del processore Unità di controllo microprogrammata L 33 10/30 5
Sviluppi futuri: IA-64 Architettura a 64 bit Progetto MERCED Primo esemplare: Intel ITANIUM Massiccio aumento delle risorse 128 registri GP, 128 registri FP 16 GP-EU + 16 FP-EU (EU: Execution Unit) Esecuzione parallela di istruzioni, con parallelismo esplicito si specifica a livello del codice Assembly se le istruzioni possono essere eseguite contemporaneamente o sequenzialmente Compatibilità con IA-32 Macchina molto complessa progetto non ancora terminato Progetto ITANIUM venduto alla Digital In corso di sviluppo: ITANIUM 2 L 33 11/30 I registri dell architettura IA-32 A partire dal 80386: IA-32 Caratteristiche: 8 registri general-purpose a 32 bit istruzioni per accedere ai primi 8 / 16 bit compatibilità con 8086 non sono poi così general purpose I registri di segmento sono rimasti a 16 bit usati come registri base L 33 12/30 6
Registri IA-32 General Purpose Registers General Data Registers EAX: accumulatore (ottimizzato per op. aritmetico-logiche) EBX: base register (registro base nel segmento dati) ECX: counter (ottimizzato per i loops) EDX: data register (GP) General Address Registers EIP: instruction pointer EBP: stack base pointer (base address dello stack) ESP: stack pointer ESI: source index (ottimizzato per op. su stringhe) EDI: destination index (ottimizzato per op. su stringhe) Floating-point Stack registers : 80 bit, accessibili come LIFO (stack) SIMD Registers MMX, SSE, 3DNow! L 33 13/30 IA-32: registri di Segmento Nome CS DS (EBX) SS (EBP) ES, FS, GS Descrizione Code Segment Data Segment Stack Segment Extra Segments Utilizzo Contiene l indirizzo base dei (dati) ed istruzioni ad accesso immediato. Le istruzioni del segmento sono indirizzate tramite il registro EIP (Extended Instruction Pointer). Per modificare CS occorre una chiamata a procedura far o una far jump oppure un interrupt (int). In modo protetto viene verificato se il nuovo segmento può essere utilizzato dal task. Contiene l indirizzo base del segmento dati del programma. Molte istruzioni quali la mov utilizzano questo segmento. E il segmento in cui sono contenuti i dati di un task. Quasi del tutto simile allo stack del MIPS. Cresce verso il basso. Contiene i dati locali delle procedure e gli argomenti di chiamata. Contiene anche gli operandi per le operazioni aritmetiche di tipo accumulatore. Principalmente utilizzati per operazioni su stringhe. Possono essere utilizzati in sostituzione di DS per accedere a dati al di fuori di DS. Il DOS ed il BIOS utilizzano spesso ES come buffer per le loro chiamate. Si sovrappongono ai registri a 32 bit (e.g. SS [BP, SS] = EBP) L 33 14/30 7
IA-32: registri General Data Nome simbolico 32 bit 16 bit EAX AX 8 bit Nome descrittivo Funzioni AH, AL Accumulator Moltiplicazione/Divisione, I/O, shift veloce out 70h, al ;Il contenuto di al viene trasferito alla porta 70h. EBX BX BH, BL Base Register Puntatore all indirizzo base segmento dati mov ecx, [ebx] ;trasferisci in ecx il contenuto all indirizzo 0($ebx) MIPS: lw $ecx, 0($ebx) ECX CX CH, CL Count Register Indice di conteggio (cicli, rotazioni, shift) move ecx, 10h ; load ecx con 10h (=16), valore di inizio conteggio (associato a loop ) start: out 70h, al ; Il contenuto di al viene trasferito alla porta 70h. loop start ;ritorna ad inizio ciclo, il quale verrà ripetuto 16 volte (fino a che ecx = 0) EDX DX DH, DL Data Register Moltiplicazione/Divisione, I/O mul edx ; moltiplica edx con eax (implicito), il risultato è contenuto nella coppia edx:eax (hi:lo). L 33 15/30 IA-32: registri di stack Nome... simbolico 32 bit 16 bit 8 bit ESP SP, EBP BP,SS, Nome descrittivo Stack Pointer Base Pointer Funzioni Stack Pointer Indirizzo base del segmento di Stack (32 bit) Esempio di utilizzo dello stack per passare dati a funzione (Assembly IA 32): push add1 push add2 push add3 ; create the first summand ; (automaticamente ESP viene decrementato) ; create the second summand ; create the third summand addition: proc near push ebp move ebp, esp move eax, [ebp+16] add eax, [ebp+12] add eax, [ebp+8] pop ebp ret ; call near (inside 64k segment, cf. branch) ; salva l indirizzo base per il ritorno ; copia lo StackP nel BaseP (frame di procedura) ; carica sum1 in EAX ; somma in eax sum1 + sum2 ; somma in eax aum1 + sum2 + sum3 ; recupera l indirizzo base precedente ; ritorno al programma chiamante (cf. jr $ra) L 33 16/30 8
IA-32: registri di gestione stringhe Nome simbolico 32 bit 16 bit 8 bit ESI SI x, x EDI DI x,x Nome descrittivo Source Index Destination Index Funzioni Indice per la stringa sorgente o indice di caratteri/array Indice per la stringa destinazione o indice di caratteri/array Esempio: output della stringa: abcdefghijabcdefghij su monitor alfanumerico: string db 20 dup ( abcdefghijabcdefghij ) ; definizione della stringa mov eax, @data mov ds, eax mov eax, b800h cld mov ecx, 5 mov esi, string mov edi, 00h movsw ; carica indirizzo (di inizio) dei dati in EAX ; impostare DS a questo segmento dati ; carica indirizzo del segmento RAM video in EAX ; sequenza ascendente ; trasferisce 5 parole di 4 byte ciascuna ; carica indirizzo stringa in ESI (stringa sorgente) ; carica indirizzo del primo carattere ; in alto a sinistra in EDI (stringa destinazione) ; trasferisce 5 parole (20 caratteri) L 33 17/30 IA-32 operazioni logico-aritmetiche Tipo operando 1 Memoria Memoria Tipo operando 2 Immediato Memoria Memoria Tipo risultato Memoria Memoria Architettura ad accumulatore: uno dei registri (memoria) deve fungere sia da operando che da registro destinazione. MIPS permette di avere operandi e risultato in registri differenti Uno od entrambi gli operandi può provenire direttamente dalla memoria Nel MIPS: solo dai registri Gli operandi immediati possono arrivare a 32 bit, gli altri ad 80 bit L 33 18/30 9
Modalità di indirizzamento dati Modo Diretto (registro) Reg. Addressing Register Indirect Base + offset (8 32bit) Base + scale*offset Base + scale*offset + displacement Descrizione Indirizz. tramite registro (l operando è in un registro) Base register Base + offset addressing (INTEL displacement) Ind = base + offset*scale Scaling Factor displacement Restrizioni No ESP e EBP No ESP e EBP No ESP e EBP No ESP e EBP No ESP e EBP Codice MIPS add $s0,$s1,$0 lw $s0, 0($s1) lw $s0, 100($s1) Codice IA-32 move eax, ebx move eax, [ebx] move eax, array[100] move eax, [esi*4] move eax, [esi*4 + 2] L 33 19/30 Modalità di indirizzamento istruzioni immediate Modo Descrizione Codice MIPS Codice INTEL Indirizzam. immediato L operando è in una parte dell istruzione li $s0, 0x6a02H move eax,0x6a02h PC_relative addressing Indirizzamento relativo al Program Counter bne $s0,$s1,label jnz 0x01A5 Psudodirect addressing MIPS: indirizzo ottenuto cambiando i 26 bit dell istruzione con i 28 LSB di PC (i 2 LSB sono 00) INTEL: modifica del registro Code Segment j label move cs, 0x87eeae move eip 0x000000 L 33 20/30 10
EFLAG I risultati notevoli vengono salvati in questo registro Le istruzioni di branch si riferiscono sempre a EFLAG Carry, zero, overflow, segno, parità, MIPS: lw $s0, 0($s1) beq $s0, $zero, lbl IA-32: move eax, [ebx] jz lbl L 33 21/30 Operazioni di I/O IA-32 prevede istruzioni dedicate per I/O: Dati presenti nel registro accumulatore (EAX). Distinzione tra accesso a memoria ed input/output mediante il segnale di controllo: M/IO Lettura/scrittura avviene verso il Device Controller, mediante i segnali di controllo: RD, WR Gli stessi usati per l accesso a memoria Spazio di indirizzamento su 16 bit 64k porte da 1 byte (32k porte da 2 byte; 16k porte da 4 byte) Spazio di indirizzamento duplicato: 16 bit (+4 bit di offset) per la RAM e 16 bit per le periferiche nell 8086. Le periferiche sono viste mediante le porte di I/O 8086: I/O : 2 16 porte di I/O 8086: MEM : 2 16(+4) = 2 20 celle di memoria (words) L 33 22/30 11
IA-32 Instruction Set Istruzioni general purpose Istruzioni per lo spostamento dei dati push, pop, utilizzo dello stack e della memoria dati Istruzioni aritmetiche logiche, confronto e operazioni Istruzioni di controllo del flusso basati sui flag, allineamento al byte Istruzioni della gestione delle stringhe Istruzioni di I/O Istruzioni floating point x87 funzioni trigonometriche, potenze di 2 (2 x, log 2 x) Istruzioni SIMD MMX, SSE (SSE2, SSE3), 3DNow! (IA-32 by AMD) Istruzioni di sistema Cambio di modo, Halt, Reset, L 33 23/30 IA-32 Instruction Set L 33 24/30 12
IA-32 Instruction Set: esempi JE: jump equal near (±128 byte) JMP: jump (near uso CS; far uso EIP) CALL: jump; SP=SP 4 (MIPS: jal) MOVW: (MIPS: lw) PUSH,POP: aggiornamento implicito SP TEST: Carica nei flag i risultati di $EDX AND 42 MOVSL: Sposta 4 byte e incrementa EDI ed ESI (stringhe/aree dati) L 33 25/30 Codifica delle istruzioni Molti formati ampiezza: 1 15 byte Codice operativo su 1 o 2 byte CLC (Clear Carry: 1 byte, non ha operandi) mov EAX, ind1:[ind2 + ind3*4 +2] richiede 17 byte w specifica se lavora sul byte o sulla parola a 32 bit (word) d specifica la direzione del trasferimento Post_byte (r/m) specifica la modalità di indirizzamento L 33 26/30 13
Codifica istruzioni campi reg e w Campo reg: la sua interpretazione dipende da w: w=0 registri a 8 bit w=1 registri a 16 o 32 bit dipende dall architettura campo reg 0 w=0 8 bit AL w=1 16 bit 32 bit AX EAX determina la lunghezza dell istruzione ADD AL, #1 16 bit ADD EAX, #1 40 bit 1 2 3 4 CL DL BL AH CX DX BX SP ECX EDX EBX ESP 4 ADD 4 ADD 3 1 8 000 0 0000 0001 3 1 32 000 1 00 01 5 6 7 CH DH BH BP SI DI EBP ESI EDI L 33 27/30 Codifica istruzioni campi r/m e mod r/m: (3 bit) seleziona il registro usato come registro base mod: (2 bit) seleziona la modalità di indirizzamento (offset, offset+displ.,...) r/m = 0 Indirizzo = Base (IA-32) o Reg + Segment Reg (16 bit) r/m = 1 Indirizzo = Base + displacement 8 bit r/m = 2 Indirizzo = Base + displacement 16/32 bit r/m = 3 Indirizzo = Base selezionato dal campo reg Eccezioni r/m = 4; mod=0,1,2 Seleziona la modalità scaled index r/m = 5; mod=1,2 Seleziona EBP + spiazzamento (32 bit) r/m = 6; mod=1,2 Seleziona BP + spiazzamento (16 bit) L 33 28/30 14
Codifica istruzioni: osservazioni Architettura CISC Lunghezza variabile sia delle istruzioni che dell OpCode La lunghezza dell istruzione dipende dal contenuto di alcuni campi dell istruzione stessa mod, r/m, reg, w Devo iniziare la decodifica dell istruzione per sapere quant è lunga prima di terminare la fase di fetch Architettura complessa prezzo da pagare per mantenere la compatibilità verso il basso (8, 16, 32 bit) L 33 29/30 IA-32: Ciclo di esecuzione di un istruzione Fase di fetch: lettura dell istruzione mediante la coppia: CS: IP dal segmento codice + instruction counter Quindi: IP IP + #byte_istruzione Pre-fetch Queue (Coda di pre-fetch). Streaming dal segmento codice di RAM in un buffer fino al riempimento. L UC legge il primo byte dell istruzione dalla coda di pre-fetch e trasferisce un certo numero di byte nell IR. Decodifica, Esecuzione. Esecuzione è pipe-line e multi-ciclo Fino a 300 cicli di clock per i task più complessi quali il task switch tramite gate che viene operata in modalità protetta. L 33 30/30 15