Massimo VIOLANTE Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni 2 M. Violante 1.1
Organizzazione di un processore Un processore, CPU, esegue una sequenza di istruzioni (programma) prelevate da una memoria La memoria è esterna alla CPU La sequenza di operazioni per eleborare una singola istruzione prende il nome di instruction cycle. 3 Instruction cycle È suddiviso in due cicli: fetch cycle: la CPU legge dalla memoria l istruzione che deve essere eseguita execution cycle: consiste in: riconoscimento dell istruzione da eseguire lettura degli operandi dell istruzione esecuzione dell operazione. 4 M. Violante 1.2
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: t CPU Il valore 1/t CPU è la frequenza di clock della CPU, misurato in megahertz (MHz) Es: frequenza di clock = 500 MHz t CPU = 2 ns (nanosecondi). 5 Interrupt È un evento che inerrompe ll normale funzionamento della CPU In risposta ad un interrupt, la CPU sospende l esecuzione del programma corrente ed esegue il programma di gestione dell interrupt: interrupt handler Al termine dell interrupt handler, la CPU riprende l esecuzione del programma interrotto La presenza di un interrupt viene identificata alla fine di ogni instruction cycle. 6 M. Violante 1.3
Comportamento di una CPU fetch cycle execution cycle N ci sono richieste di interrupt? S trasferisce il controllo all interrupt handler 7 ALU SR CPU Memoria DR AR PC AC IR Control Unit 8 M. Violante 1.4
(cont.) Due tipi di connessioni: data bus: connessioni su cui vengono trasferiti dati control bus: connessioni sui cui vengono trasferiti i comandi. 9 (cont.) DR, Data Register: memorizza i dati provenienti: dalla memoria diretti alla CPU; dalla CPU 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, Accumulator: memorizza in dati in ingresso ed in uscita dall ALU; 10 M. Violante 1.5
(cont.) SR, Status Register: memorizza lo stato del processore; IR, Instruction Register: memorizza il codice operativo dell istruzione da eseguire, op-code. Sulla base dell op-code, l unità di controllo 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. 11 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; flag di controllo. 12 M. Violante 1.6
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. 13 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 operaziono corrente ha dato luogo ad overflow. 14 M. Violante 1.7
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). 15 Interfaccia con la memoria ABUS Memoria DBUS R/W# READY CPU 16 M. Violante 1.8
Interfaccia con la memoria (cont.) 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 17 Interfaccia con la memoria (cont.) 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. 18 M. Violante 1.9
Ciclo di Lettura CLOCK ABUS DBUS R/W# READY T1 T2 T3 T4 Indirizzo Valido Dati Lettura OK 19 Ciclo di Scrittura CLOCK ABUS DBUS R/W# READY T1 T2 T3 T4 Indirizzo Valido Dati Validi Scrittura OK 20 M. Violante 1.10
Ciclo di Wait CLOCK ABUS DBUS R/W# READY T1 T2 Tw T3 Indirizzo Valido Dati Lettura OK T4 21 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. 22 M. Violante 1.11
Micro-operazioni fetch cycle: IR <= DR PC <= PC+1 execution cycle: decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 23 Micro-operazioni (cont.) fetch cycle: IR <= DR PC <= PC+1 La CPU identifica l istruzione da eseguire. execution cycle: decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 24 M. Violante 1.12
Micro-operazioni (cont.) fetch cycle: IR <= DR PC <= PC+1 La CPU preleva gli operandi. execution cycle: decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 25 Micro-operazioni (cont.) fetch cycle: IR <= DR PC <= PC+1 La CPU esegue l istruzione. execution cycle: decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 26 M. Violante 1.13
Linguaggio macchina Istruzioni che la CPU è in grado di eseguire; Può essere visto sotto 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. 27 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, quindi l indirizzo della prossima istruzione corrisponde all indirizzo della prima istruzione successiva alla istruzione corrente; 28 M. Violante 1.14
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. 29 Esempio ADD AC, [1024] IR <= DR PC <= PC+1 decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 JUMP 256 IR <= DR PC <= PC+1 decodifica IR PC <= DR 30 M. Violante 1.15
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. 31 Operandi Le prestazioni e le potenzialità di una CPU dipendono dal numero di operando per istruzione; Valutiamo diverse alternative considerando l operazione: X= A*B + C*C 32 M. Violante 1.16
Architettura a 1 operando LOAD A; AC <= M[A]; MUL B; AC <= AC*M[B]; STORE T; M[T] <= AC; LOAD C; AC <= M[C]; MUL C; AC <= AC*M[C]; ADD T; AC <= AX+M[T]; STORE X; M[X] <= AC; 33 Architettura a 2 operandi MOV T, A; M[T] <= M[A]; MUL T, B; M[T] <= M[T]*M[B]; MOV X, C; M[X] <= M[C]; MUL X, C; M[X] <= M[X]*M[C]; ADD X, T; M[X] <= M[X]+M[T]; 34 M. Violante 1.17
Architettura a 3 operandi MUL T, A, B; M[T] <= M[A]*M[B]; MUL X, C, C; M[X] <= M[C]*M[C]; ADD X, X, T; M[X] <= M[X]+M[T]; 35 Confronto CPU1: ogni operando in una locazione diversa fetch: n+1 letture in memoria ( 1 per op-code, n per gli operandi); Numero di accessi in memoria: 1 operando: 14 x fetch, 7 x esecuzione = 21 2 operandi: 15 x fetch, 13 x esecuzione = 28 3 operandi: 12 x fetch, 9 x esecuzione = 21 36 M. Violante 1.18
Confronto (cont.) CPU2: op-code e operandi sono letti in un unico accesso in memoria Numero di accessi in memoria: 1 operando: 7 x fetch, 7 x esecuzione = 14 2 operandi: 5 x fetch, 13 x esecuzione = 18 3 operandi: 4 x fetch, 9 x esecuzione = 13 37 Modi di indirizzamento Specificano la posizione degli operandi su cui una istruzione deve essere eseguita; Possono essere: immediato; diretto; indiretto. 38 M. Violante 1.19
Immediato Il dato è contenuto nell istruzione stessa; Per esempio: ADD AC, #99; L istruzione somma il numero 99 al contenuto del registro AC. 39 Esempio IR <= DR PC <= PC+1 decodifica IR AC <= AC + DR PC <= PC + 1 ; legge l immediato 40 M. Violante 1.20
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. 41 Esempio ADD AC, 05F88 Memoria 25 05F88 AC <= AC + 25 42 M. Violante 1.21
Esempio (cont.) IR <= DR PC <= PC+1 decodifica IR AR <= DR AC <= AC + DR PC <= PC + 1 ; legge l indirizzo ; del dato ; legge il dato 43 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. 44 M. Violante 1.22
Esempio ADD AC, [05F88] Memoria F0200 05F88 AC <= AC + 74 74 F0200 45 Esempio (cont.) IR <= DR PC <= PC+1 decodifica IR ; 1 AR <= DR ; 2 AR <= DR ; 3 AC <= AC + DR PC <= PC + 1 46 M. Violante 1.23
Tipi di indirizzo Gli indirizzi possono essere espressi in modo: assoluto: l istruzione specifica l indirizzo completo; viene prodotto un codice macchina lungo; relativo: l istruzione specificata lo spiazzamento rispetto ad un indirizzo di partenza; 47 Tipi di indirizzo (cont.) Lo spiazzamento può essere: espresso su un byte: +127, -128; espresso un una word: +32K, -32K; Non permette di accedere a qualunque dato in memoria; Produce codice macchina compatto. 48 M. Violante 1.24
Esempio Indirizzamento indiretto relativo; Indirizzo di base contenuto in AR. Memoria MOV AC, [+25] AR 05F88 05F88 25 63 05FA1 AC <= 63 49 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. 50 M. Violante 1.25
Esempio MOV AC, BP[BI] Memoria AC <= 63 BP 05F88 05F88 BI 00025 25 63 05FA1 51 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 52 M. Violante 1.26
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. 53 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. 54 M. Violante 1.27
Chiamata/ritorno da procedura Procedura: gruppo di istruzioni che eseguono un compito specifico; È memorizzata una solo 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. 55 0xA0: CALL sort L indirizzo della procedura viene messo nel PC. Esempio 0xE0: sort: 0xEF: RET PC = 0xA0 PC = 0xE0 PC = 0xE1.. PC = 0xEF PC = 0xA1 CALL RET L indirizzo della prossima istruzione da eseguire viene messo nel PC. È necessario memorizzare l indirizzo di ritorno! 56 M. Violante 1.28
Lo stack Lo stack è una zona di memoria dove i datti 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. 57 Lo stack (cont.) Viene utilizzato: 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. 58 M. Violante 1.29
Esempio PC <= PC + 1 PUSH PC PC <= 0xE0 STACK SP = 0 0xE0: sort: CALL 0xA0: CALL sort 0xEF: POP PC RET 0xA1 RET SP = 1 SP = 0 59 Vantaggi dello stack Permette chiamate di procedure annidate. STACK 0xA0: call sort SP = 0 CALL 0xB0: sort: 0xB1: call intcmp 0xA1 CALL 0xB2 0xA1 SP = 1 SP = 2 60 M. Violante 1.30
Architettura completa di una CPU ALU SR CPU Memoria DR AR PC AC IR Control Unit SP 61 M. Violante 1.31