Un quadro della situazione Lezione 15 Il Set di Istruzioni (2) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno Input/Output Sistema di Interconnessione Registri Central Processing Unit Principale Interconnessione interna alla CPU Unità di Controllo Unità Aritmetico Logica Cosa abbiamo fatto circuiti combinatori e sequenziali Dove stiamo andando.. il set di istruzioni Perché: per poter comprendere il funzionamento e poter progettare la Unità di Controllo 2 Dove siamo nel corso Le operazioni e gli operandi Il Set di Istruzioni Codifica della informazione Logica Digitale Unità Aritmetico Logica (ALU) Il set delle istruzioni Processore: unità di elaborazione Processore: unità di controllo Processore: pipeline Valutazione delle prestazioni 3 Processore MIPS (tipica architettura) Tuttora utilizzato (nei videogiochi) Operazioni di tipo diverso: operazioni aritmetiche operazioni di trasferimento (memoria registri) operazioni di scelta e controllo del flusso operazioni di supporto alle procedure Operandi: accesso ai registri della macchina accesso alla memoria uso di costanti 4
Il ruolo del compilatore Le operazioni e gli operandi Assegnare variabili a registri f = ( g + h ) - ( i + j ) add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 f $s0 g $s1 h $s2 i $s3 j $s4 # g+h # i+j # f = (g+h)-(j+j) Operazioni di tipo diverso: operazioni aritmetiche operazioni di trasferimento (memoria registri) operazioni di scelta e controllo del flusso operazioni di supporto alle procedure Operandi: accesso ai registri della macchina accesso alla memoria uso di costanti 5 6 Istruzioni di trasferimento dati: la load-word Il ruolo del registro indice $8 CPU 4 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 lw $8, () Indirizzamento nel registro $8 va caricato l elemento con indirizzo uguale a + il valore in Uso di un registro indice 7 $8 1237 4125 04 8 CPU 1001 1237 1002 1003 1004 1005 1006 1007 1008 1009 4125 1010 1011 1012 1013 1014 1015 lw $8, () Utile per scorrere array al variare di Attenzione! Il registro indice deve sempre variare di 4 in 4 8
Istruzione di trasferimento dati: la store-word I campi del formato R $8 CPU 4 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 sw $8, () Indirizzamento l elemento nel registro $8 va memorizzato nel.. l elemento con indirizzo uguale a + il valore in Uso di un registro indice 9 0 17 18 8 0 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit 000000 1 10010 0 00000 op add $8, $17, $18 rs rt rd shamt Campo op: operazione effettuata Campo rs: registro con il primo operando Campo rt: registro con il secondo operando Campo rd: registro destinazione Campo shamt: scorrimento 32 00 op 10 I campi del formato I I principi di progetto visti finora lw $8, () 35 19 8 6 bit 5 bit 5 bit 16 bit 11 10011 0 000000111110 op rs rt indirizzo Campo op: operazione effettuata Campo rs: registro con indice Campo rt: registro destinazione Campo indirizzo: indirizzo partenza 11 1. Semplicità e regolarità sono strettamente correlate numero operandi fissato a 3 per le operazioni aritmetiche 2. Minori sono le dimensioni, maggiore è la velocità numero dei registri limitato a 32 dimensione del chip come fattore che influenza il clock 3. Un buon progetto richiede compromessi istruzioni con la stessa lunghezza (semplicità) ma con (pochi) formati diversi 12
Registri e Registri e 13 14 Il concetto di programma memorizzato La memorizzazione di programmi Due principi chiave della costruzione: le istruzioni sono rappresentate da numeri i programmi sono in memoria e possono essere letti o scritti, proprio come numeri La memoria può contenere codice sorgente di un programma di elaborazione di testi codice macchina di un programma di elaborazione di testi il testo su cui il programma di elaborazione testi lavora il compilatore che ha generato il codice macchina etc. etc. Processore Programma di gestione bilancio (codice macchina) Programma di elaborazione testi (codice macchina) Compilatore C (codice macchina) Dati del libro paga Testo Codice sorgente C dell elaboratore testi 15 16
Per la esecuzione della istruzione.. Esecuzione divisa in 5 passi Registri e fetch della istruzione Prelievo della istruzione indirizzata dal Program Counter dalla decode e register fetch Decodifica della istruzione e prelievo dei valori dei registri interessati execute uso della ALU per effettuare la operazione memory (register) access scrittura in memoria o scrittura risultato in un registro write-back lettura dalla memoria per scrivere in un registro 17 18 Una visione astratta 5-write-back PC Indirizzo delle istruzioni 1-fetch Istruzione Dato N. registro Registri N. registro N. registro 2-decode e register fetch ALU 3-execute Indirizzo Dato dati 4-memory/ memory/reg.. access Registri e 19 20
Rappresentazione dei registri Una convenzione per assegnare ai registri un numero Gli indirizzi sono di 32 bit I registri $s0, $s1,, $s7 Quindi esistono 2 32 byte! corrispondono ai registri $16, $17,.., $23 I registri $t0, $t1,, $t7 corrispondono ai registri $8, $9,..,$15 Il registro $zero è il registro $0 viene mantenuto sempre con valore 0 Quante parole (word) esistono? Poiché ogni parola consiste di 4= 2 2 byte, allora Ci sono 2 32 / 2 2 = 2 30 parole in totale Come sono gli indirizzi binari delle parole? Sono multipli di 4, quindi Gli ultimi due bit più significativi sono a 0 21 2 = 8 è divisibile per 4 1 2 = 12 è divisibile per 4 10100 2 = 20 è divisibile per 4 22 Indirizzamento : commenti Prevede l uso di un indirizzo base specificato nella istruzione tramite una costante od una label Registri e.. e di uno spiazzamento contenuto nel registro indice Quindi nella istruzione: indirizzo base registro indice lw $8, () 12 23 L indirizzo della locazione di memoria caricata è quindi + cioè 1012 24
Un uso alternativo dell indirizzamento Si può invertire l uso dell indirizzo base e del registro indice Specificando nel valore specificato nella istruzione lo spiazzamento (il vecchio indirizzo base ) E memorizzando nel registro indice l indirizzo di base indice indirizzo di base lw $8, 12() L indirizzo della locazione di memoria caricata è quindi (comunque!) 12 + cioè 1012 25 Un confronto Quando si deve usare l uno e quando l altro? Domanda: Sono totalmente equivalenti? lw $8, () lw $8, 12() 12 carica in $8 la locazione 1012 carica in $8 la locazione 1012 Risposta: No Domanda: Perché? Un suggerimento pensiamo al formato I delle due istruzioni 26 Il formato di lw $8, () Il formato di lw $8, 12() contiene il valore 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 La istruzione lw $8, () viene rappresentata in una parola: 35 19 8 6 bit 5 bit 5 bit 16 bit 11 10011 0 000000111110 op rs rt indirizzo contiene il valore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0 La istruzione lw $8, 12() viene rappresentata in una parola: 35 19 8 12 6 bit 5 bit 5 bit 16 bit 11 10011 0 0000000000001100 op rs rt indirizzo 27 28
La risposta Esempio 1 La scelta di porre l indirizzo base dell array nel registro permette di poter usare 32 bit come locazione di inizio quindi potendo accedere a tutta la memoria Invece ponendo lo spiazzamento nel registro si è obbligati a porre l indirizzo base nei 16 bit del campo indirizzo della istruzione una limitazione, ne riparleremo Comunque, la scelta di porre lo spiazzamento nel registro permette di poter scorrere un array incrementando l indice 29 Scrivere il codice MIPS relativo alla istruzione C Supponendo che: A[12] = h + A[8] la variabile h sia associata al registro $18 ($s2) l indirizzo di base del vettore A sia nel registro ($s3) lw $8, 32() # carica A[8] in $8 add $8, $18, $8 # somma h a $8 sw $8, 48() # scarica $8 in A[12] 30 Esempio 2 Esercizi Scrivere il codice MIPS relativo alla istruzione C g = h + A[i] Supponendo che: le variabili g, h ed i siano, rispettivamente, nei registri $17 ($s1), $18 ($s2), $20 ($s4) l indirizzo di base del vettore A sia nel registro ($s3) add $9, $20, $20 # calcolo 2i = i + i add $9, $9, $9 # calcolo 4i = 2i +2i add $9,, $9 # calcolo l indirizzo di A[i] lw $8, 0($9) # carica A[i] in $8 add $17, $18, $8 # g = h + A[i] 31 Scrivere le istruzioni MIPS necessarie per copiare un valore da un registro ad un altro Scrivere le istruzioni MIPS necessarie per azzerare un registro 32