Architettura di una CPU 1 Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni. 2 Organizzazione Un processore, CPU, esegue una sequenza di istruzioni (programma) prelevate da una memoria La memoria è esterna alla CPU La sequenza di operazioni per elaborare una singola istruzione prende il nome di instruction cycle. 3 Instruction cycle È suddiviso in due cicli: Fetch cycle: Fetch cycle Execution cycle La CPU legge dalla memoria l’istruzione che deve essere eseguita Execution cycle: Riconoscimento dell’istruzione da eseguire Lettura degli operandi dell’istruzione Esecuzione dell’operazione. 4 Unità di misura L’instruction cycle è composto da una sequenza di micro-operazioni eseguite dalla CPU La durata di una micro-operazione prende il nome di cycle time: tCPU Il valore 1/tCPU è la frequenza di clock della CPU, misurato in megahertz/Gigahertz (MHz/GHz) Es: frequenza di clock = 1GHz tCPU = 1 ns (nanosecondi). 5 Interrupt Evento che interrompe funzionamento della CPU In risposta la CPU: il normale Sospende l’esecuzione del programma corrente Esegue il programma di gestione dell’interrupt: interrupt handler al termine del quale Riprende l’esecuzione del programma interrotto La presenza di un interrupt viene identificata alla fine di ogni instruction cycle. 6 Comportamento di una CPU fetch cycle execution cycle N ci sono richieste di interrupt ? S trasferisce il controllo all’interrupt handler 7 Architettura di una CPU SR Memoria ALU AC DR AR CPU PC IR Control Unit 8 Architettura di una CPU (cont.) DR, Data Register: provenienti: memorizza i dati dalla memoria e diretti alla CPU; dalla CPU e diretti alla memoria; AR, Address Register: memorizza gli indirizzi per gli accessi in memoria; PC, Program Counter: memorizza l’indirizzo della prossima istruzione da eseguire AC, Accumulatore: memorizza i dati in ingresso ed in uscita dall’ALU. 9 Architettura di una CPU (cont.) SR, Status Register: memorizza lo stato del processore; IR, Instruction Register: memorizza il codice operativo dell’istruzione da eseguire, opcode, in base al quale, la control unit capisce quale operazione deve essere eseguita e ne comanda l’esecuzione; Control unit: controlla le operazioni della CPU; ALU, Arithmetic Logic Unit: esegue le operazioni aritmetiche e logiche. 10 Registro di stato Memorizza lo stato del processore; I suoi bit assumono valore 0 o 1 in base al risultato delle operazioni svolte dal processore; Esempio, Intel 8086: Processor Status Word (PSW): registro a 16 bit; 9 bit di stato: flag di stato (6 bit); flag di controllo (3 bit); 11 Intel 8086: flag di stato Indicano lo stato dell’8086 in seguito ad una istruzione: Carry flag: va a 1 se l’operazione ha prodotto un riporto od un prestito; Parity flag: va a 1 se il numero di bit a 1 nel byte meno significativo del risultato è un numero pari; Auxiliary flag: usato per operazioni aritmetiche su numeri espressi in BCD. 12 Intel 8086: flag di stato (cont.) Zero flag: va a 1 se il risultato dell’operazione è zero; Sign flag: coincide con il bit più significativo di un’operazione; Overflow flag: va a 1 se l’operazione corrente ha dato luogo ad overflow. 13 Intel 8086: flag di controllo Modificano il comportamento delle istruzioni che verranno eseguite; Direction flag: utilizzata dalle operazioni di manipolazione delle stringhe; Interrupt flag: quando è 1 vengono servite le eventuali richieste di interrupt; Trap flag: se è 1 viene eseguito un interrupt alla fine dell’esecuzione di ogni operazione (serve per realizzare i debugger). 14 Interfaccia con la memoria DBUS R/W# READY CPU Memoria ABUS 15 Address e Data Bus ABUS, Address Bus: insieme di linee sulle cui la CPU scrive l’indirizzo della cella di Memoria a cui vuole accedere (in lettura o in scrittura) DBUS, Data Bus: insieme di linee su cui la CPU o la Memoria scrivono il dato che deve essere trasferito: da CPU a Memoria: la CPU scrive il DBUS, la Memoria legge il DBUS da Memoria e CPU: la Memoria scrive il DBUS, la CPU legge il DBUS 16 Control Bus R/W#, Read/Write (attivo basso): R/W# = 1: la CPU legge un dato dalla Memoria, trasferimento da Memoria a CPU R/W# = 0: la CPU scrive un dato nella Memoria, trasferimento da CPU a Memoria READY: READY = 1: la Memoria ha completato l’operazione, la CPU può continuare il suo lavoro READY = 0: la Memoria non ha ancora completato l’operazione, la CPU deve attendere. 17 Ciclo di Lettura T1 T2 T3 T4 CLOCK ABUS DBUS R/W# READY Indirizzo Valido Dati Lettura OK 18 Ciclo di Scrittura T1 T2 T3 T4 CLOCK ABUS Indirizzo Valido DBUS Dati Validi R/W# READY Scrittura OK 19 Ciclo di Wait T1 T2 T3 Tw T4 CLOCK ABUS Indirizzo Valido Dati DBUS R/W# READY Lettura OK 20 Esempio di funzionamento Ogni istruzione è composta da 2 byte: 1 byte contenente l’op-code 1 byte contenente il dato su cui operare Istruzione: ADD AC, adx Somma il contenuto dell’accumulatore con il dato memorizzato in Memoria all’indirizzo adx. 21 Micro-operazioni fetch cycle: AR DR IR PC <= <= <= <= PC M[AR] DR PC+1 execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR DR <= M[AR] AC <= AC + DR PC <= PC + 1 22 Micro-operazioni (cont.) fetch cycle: AR DR IR PC <= <= <= <= execution cycle: PC decodifica IR M[AR] AR <= PC DR DR <= M[AR] PC+1 AR <= DR La CPU identifica DR <= M[AR] l’istruzione da eseguire. AC <= AC + DR PC <= PC + 1 23 Micro-operazioni (cont.) fetch cycle: AR DR IR PC <= <= <= <= PC M[AR] DR PC+1 La CPU preleva gli operandi. execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR DR <= M[AR] AC <= AC + DR PC <= PC + 1 24 Micro-operazioni (cont.) fetch cycle: AR DR IR PC <= <= <= <= PC M[AR] DR PC+1 execution cycle: La CPU esegue l’istruzione. decodifica IR AR <= PC DR <= M[AR] AR <= DR DR <= M[AR] AC <= AC + DR PC <= PC + 1 25 Linguaggio macchina Istruzioni che la CPU è in grado di eseguire; Due forme equivalenti: Codice macchina: 10100101 Codice mnemonico: MOV A, B L’insieme dei codici mnemonici di tutte le istruzioni prende il nome di linguaggio assembler; L’assemblatore è un programma che traduce il codice mnemonico nel corrispondente codice macchina. 26 Istruzioni macchina Ogni istruzione specifica: l’operazione da svolgere; gli operandi coinvolti; La posizione della prossima istruzione è (salvo nelle istruzioni di salto) implicita; Il programma è eseguito in sequenza L’indirizzo della prossima istruzione è pari all’indirizzo della prima istruzione successiva alla istruzione corrente. 27 Istruzioni macchina (cont.) Il Program Counter (PC) memorizza l’indirizzo della prossima istruzione da eseguire; Il PC può essere: incrementato automaticamente, durante le normali operazioni; inizializzato ad un particolare valore dalle istruzioni di salto. 28 Esempio ADD AC, 1024 AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= PC DR <= M[AR] AR <= DR DR <= M[AR] AC <= AC + DR PC <= PC + 1 JUMP 256 AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= PC DR <= M[AR] PC <= DR 29 Istruzioni macchina (cont.) Ogni CPU ha un suo formato per il codice macchina: op-code Operando 1 Operando 2 Esempio: codice operativo: ADD operando 1: A operando 2: B. 30 Modi di indirizzamento Specificano la posizione degli operandi su cui una istruzione deve essere eseguita Possono essere: Immediato Diretto Indiretto. 31 Immediato Il dato è contenuto nell’istruzione stessa; Per esempio: ADD AC, #99; L’istruzione somma il numero 99 al contenuto del registro AC. 32 Esempio AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= PC DR <= M[AR]; legge l’immediato AC <= AC + DR PC <= PC + 1 33 Diretto L’istruzione specifica l’indirizzo del dato su cui si deve eseguire l’operazione; Per esempio: ADD AC, X; Il simbolo X può essere: l’indirizzo della cella di Memoria che contiene il dato; il registro che contiene il dato. 34 Esempio ADD AC, 05F88 Memoria 25 05F88 AC <= AC + 25 35 Esempio (cont.) AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= PC DR <= M[AR] AR <= DR DR <= M[AR] AC <= AC + DR PC <= PC + 1 ; legge l’indirizzo ; del dato ; legge il dato 36 Indiretto L’istruzione contiene l’indirizzo della locazione di memoria in cui è contenuto l’indirizzo del dato su cui l’istruzione deve operare; Per esempio: ADD AC, [X] Il simbolo X può essere: l’indirizzo della cella di memoria che contiene l’indirizzo del dato; il registro che contiene l’indirizzo del dato. 37 Esempio ADD AC, [05F88] Memoria F0200 05F88 74 F0200 AC <= AC + 74 38 Esempio (cont.) AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= PC DR <= M[AR] ; 1 AR <= DR DR <= M[AR] ; 2 AR DR AC PC <= <= <= <= DR M[AR] ; 3 AC + DR PC + 1 39 Tipi di indirizzo Assoluto: L’istruzione specifica l’indirizzo completo Viene prodotto un codice macchina lungo Relativo: L’istruzione specifica lo spiazzamento rispetto ad un indirizzo di partenza 40 Tipi di indirizzo (cont.) Lo spiazzamento può essere: espresso su un byte: +127, -128 Non permette di accedere a qualunque dato in memoria Produce codice macchina compatto. 41 Esempio Indirizzamento indiretto relativo; Indirizzo di base contenuto in AR. MOV AC, [+25] Memoria AR 05F88 05F88 25 63 05FAD AC <= 63 42 Registro base e registro indice Si estende il concetto di indirizzo relativo utilizzando due registri: BP, base pointer: contiene l’indirizzo di partenza di un’area di memoria BI, base index: contiene la posizione rispetto al registro base in un area di memoria. 43 Esempio MOV AC, BP[BI] AC <= 63 Memoria BP 05F88 05F88 25 BI 00025 63 05FAD 44 Tipi di istruzioni Data transfer: trasferiscono dati: Dalla memoria alla CPU: MOV AC, [0x25] Dalla CPU alla memoria: MOV 0x33, AC Tra registri della CPU: MOV DR, AC Aritmetiche: ADD AC, 0x9B Logiche: eseguono operazioni logiche: XOR AC, AC CMP AC, 0x0 45 Tipi di istruzioni (cont.) Controllo di flusso: modificano la sequenza delle istruzioni: In modo assoluto: JMP 0xF0 In base ad una condizione: JNZ 0x1A Chiamata/ritorno da procedura: CALL sort/RET Input/Output: istruzioni per il trasferimento di dati: Dalla CPU ad un dispositivo di output: OUT 0xAA Da un dispositivo di input alla CPU: IN 0xAB. 46 Controllo di flusso condizionato Vengono utilizzate per modificare il flusso di esecuzione di un programma in base ad una condizione; Esempio: Esegue AC-0x0A. Se il CMP AC, #0x0A risultato è zero, lo zeroflag in SR viene messo JNZ loop ad 1. Se lo zero-flag in SR è 0, viene eseguito il salto all’indirizzo loop. 47 Chiamata/ritorno da procedura Procedura: gruppo di istruzioni che eseguono un compito specifico È memorizzata una sola volta Può essere eseguita un numero qualsiasi di volte Vantaggi: Risparmio di spazio in memoria; Modularità del programma; Svantaggio: tempo di elaborazione per eseguire le operazioni di chiamata e ritorno. 48 Esempio L’indirizzo della procedura viene messo nel PC. 0xE0: sort: 0xA0: CALL sort 0xEF: L’indirizzo della prossima istruzione da eseguire viene messo nel PC. RET PC PC PC .. PC PC = 0xA0 = 0xE0 = 0xE1 = 0xEF = 0xA1 CALL RET È necessario memorizzare l’indirizzo di ritorno! 49 Lo stack Lo stack è una zona di memoria dove i dati vengono scritti/letti secondo una strategia Last-In-First-Out (LIFO); Operazione di scrittura sullo stack: push; Operazione di lettura dallo stack: pop; La locazione di memoria contenente l’ultimo dato inserito (corrispondente al primo che verrà letto) è detto cima dello stack; La cima dello stack è memorizzata in uno speciale registro: Stack Pointer, SP. 50 Uso dello stack Dal meccanismo di chiamata a procedura per: Memorizzazione dell’indirizzo di ritorno Salvataggio dei registri Passaggio di parametri alla procedura Per il salvataggio di variabili temporanee. 51 Esempio STACK PC <= PC + 1 PUSH PC PC <= 0xE0 SP = 0 CALL 0xE0: sort: 0xA0: CALL sort SP = 1 0xA1 0xEF: RET RET POP PC SP = 0 52 Vantaggi dello stack Permette chiamate di procedure annidate. STACK SP = 0 0xA0: call sort CALL SP = 1 0xA1 0xB0: sort: 0xB1: call intcmp CALL 0xB2 0xA1 SP = 2 53 Architettura completa di una CPU SR Memoria ALU AC DR AR CPU PC IR Control Unit SP 54