Architettura di una CPU
Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni.
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.
Instruction cycle È suddiviso in due cicli: Fetch cycle: Execution cycle Fetch 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.
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).
Interrupt Evento che interrompe il normale funzionamento della CPU In risposta la CPU: 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.
Comportamento di una CPU fetch cycle execution cycle ci sono richieste di interrupt ? N S trasferisce il controllo all’interrupt handler
Architettura di una CPU SR ALU DR AC Memoria Control Unit AR PC IR
Architettura di una CPU (cont.) DR, Data Register: memorizza i dati provenienti: 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.
Architettura di una CPU (cont.) SR, Status Register: memorizza lo stato del processore; IR, Instruction Register: memorizza il codice operativo dell’istruzione da eseguire, op-code, 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.
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);
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.
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.
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).
Interfaccia con la memoria ABUS DBUS Memoria CPU R/W# READY
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
Control Bus R/W#, Read/Write (attivo basso): READY: 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.
Ciclo di Lettura T1 T2 T3 T4 Indirizzo Valido Dati Lettura OK CLOCK ABUS Dati DBUS Lettura R/W# OK READY
Ciclo di Scrittura T1 T2 T3 T4 Indirizzo Valido Dati Validi Scrittura CLOCK Indirizzo Valido ABUS Dati Validi DBUS R/W# Scrittura OK READY
Ciclo di Wait T1 T2 T3 Tw T4 Indirizzo Valido Dati Lettura OK CLOCK ABUS Dati DBUS Lettura R/W# OK READY
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.
Micro-operazioni fetch cycle: execution cycle: AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR AC <= AC + DR PC <= PC + 1
Micro-operazioni (cont.) fetch cycle: AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR AC <= AC + DR PC <= PC + 1 La CPU identifica l’istruzione da eseguire.
Micro-operazioni (cont.) fetch cycle: AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR AC <= AC + DR PC <= PC + 1 La CPU preleva gli operandi.
Micro-operazioni (cont.) fetch cycle: AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 execution cycle: decodifica IR AR <= PC DR <= M[AR] AR <= DR AC <= AC + DR PC <= PC + 1 La CPU esegue l’istruzione.
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.
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.
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.
Esempio ADD AC, 1024 JUMP 256 AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 JUMP 256 AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR PC <= DR
Istruzioni macchina (cont.) Ogni CPU ha un suo formato per il codice macchina: Esempio: codice operativo: ADD operando 1: A operando 2: B. op-code Operando 1 Operando 2
Modi di indirizzamento Specificano la posizione degli operandi su cui una istruzione deve essere eseguita Possono essere: Immediato Diretto Indiretto.
Immediato Il dato è contenuto nell’istruzione stessa; Per esempio: ADD AC, #99; L’istruzione somma il numero 99 al contenuto del registro AC.
Esempio AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR DR <= M[AR] ; legge l’immediato AC <= AC + DR PC <= PC + 1
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.
Esempio Memoria ADD AC, 05F88 AC <= AC + 25 25 05F88
Esempio (cont.) AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR DR <= M[AR] ; legge l’indirizzo AR <= DR ; del dato DR <= M[AR] ; legge il dato AC <= AC + DR PC <= PC + 1
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.
Esempio Memoria ADD AC, [05F88] AC <= AC + 74 F0200 05F88 74 F0200
Esempio (cont.) AR <= PC DR <= M[AR] IR <= DR PC <= PC+1 decodifica IR DR <= M[AR] ; 1 AR <= DR DR <= M[AR] ; 2 AR <= DR DR <= M[AR] ; 3 AC <= AC + DR PC <= PC + 1
Tipi di indirizzo Assoluto: Relativo: L’istruzione specifica l’indirizzo completo Viene prodotto un codice macchina lungo Relativo: L’istruzione specifica lo spiazzamento rispetto ad un indirizzo di partenza
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.
Esempio Indirizzamento indiretto relativo; Indirizzo di base contenuto in AR. Memoria MOV AC, [+25] AR 05F88 05F88 25 63 05FAD AC <= 63
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.
Esempio MOV AC, BP[BI] Memoria BP 05F88 05F88 AC <= 63 25 BI 00025 05FAD
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
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.
Controllo di flusso condizionato Vengono utilizzate per modificare il flusso di esecuzione di un programma in base ad una condizione; Esempio: CMP AC, #0x0A JNZ loop Esegue AC-0x0A. Se il risultato è zero, lo zero-flag in SR viene messo ad 1. Se lo zero-flag in SR è 0, viene eseguito il salto all’indirizzo loop.
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.
È necessario memorizzare l’indirizzo di ritorno! Esempio L’indirizzo della procedura viene messo nel PC. PC = 0xA0 PC = 0xE0 PC = 0xE1 .. PC = 0xEF PC = 0xA1 0xE0: sort: 0xEF: RET CALL 0xA0: CALL sort RET È necessario memorizzare l’indirizzo di ritorno! L’indirizzo della prossima istruzione da eseguire viene messo nel PC.
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.
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.
Esempio STACK PC <= PC + 1 PUSH PC PC <= 0xE0 SP = 0 0xE0: sort: 0xEF: RET CALL 0xA0: CALL sort SP = 1 0xA1 RET POP PC SP = 0
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 SP = 2 0xA1
Architettura completa di una CPU SR ALU DR AC Memoria Control Unit AR PC IR SP