Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Registri dell'ALU
Esistono 8 registri nell'ALU, ognuno con un nome specifico in base all'informazione che contengono:
- MAR (Memory Address Register) - contiene gli indirizzi delle parole che si vogliono scrivere
- MDR (Memory Data Register) - contiene i dati che vanno inviati alla memoria
- PC (Program Counter) - contiene l'indirizzo della prossima istruzione del programma da eseguire
- IR (Instruction Register) - contiene l'istruzione da eseguire
- PC e IR fanno parte dell'unità di controllo perché nelle operazioni compiute dall'unità di controllo l'informazione memorizzata in questi due registri gioca un ruolo predominante in quanto determina le operazioni che l'unità di controllo deve svolgere per comandare gli altri dispositivi
- PSW (Process Status Word) - "la parola dello stato del processore"
comanda tutte le altre unità. L’unità di controllo è una retesequenziale, per cui le sue uscite dipendono oltre che dagli ingressi in quell’istante anche dallo stato dell’unità di controllo, che è un qualcosa ricavato dagli ingressi precedenti all’unità di controllo. L'unità di controllo comanda gli altri dispositivi, ai quali è collegata (un po’ tutti), attraverso il bus di controllo. Ha il dovere di dire qual è il dispositivo coinvolto nella comunicazione, il verso della comunicazione, farla avviare e regolamentarla.
Esistono calcolatori a 16, 32 o 64 bit, con cui si intende:
- L’unità dati minima, da quanti bit è formata questa parola di memoria
- L’ampiezza dell’indirizzo, da quanti bit sono formati gli indirizzi del calcolatore
- La dimensione dei registri della CPU, da quanti bit sono formati i registri
Come sono formati i registri della CPU?
MAR →
avrà tanti bit quanto è l'ampiezza indirizzo (es. in un calcolatore a 32 bit avrà 32 bit)
PC → avrà tanti bit quanto è l'ampiezza indirizzo
MDR → avrà tanti bit quanti sono i bit della parola
IR → ha bit pari all'istruzione più lunga (una parola o il multiplo di una parola)
RA, RB, RC → dimensionati sulla base del dato più grosso con cui vengono effettuate le operazioni aritmetico-logiche
PSW → costituito da tanti bit quante sono le informazioni che esso memorizza relative allo stato in cui si trova la CPU. Dimensionato anche lui sul multiplo di un byte.
27 Ingegneria Informatica Elementi di informatica e programmazione - Saetti Alessandro 2022/2023
Ciclo Macchina
Le operazioni che il calcolatore svolge per eseguire i nostri programmi sono svolte in maniera iterativa all'interno del ciclo macchina, abbiamo tre operazioni:
- Acquisisce (FETCH) un'istruzione del programma che deve essere
eseguita- Prendi l'istruzione corrente dalla memoria e mettila in IR
- Incrementa il PC affinché contenga l'indirizzo della prossima istruzione
2. Decodifica (DECODE) le istruzioni
3. Manda comandi (EXECUTE) alla ALU (per la selezione dell'operazione), ai registri della CPU (per la lettura/scrittura), al bus per accedere alla memoria, e altri ancora...
- Se l'istruzione usa una parola in memoria, determina dove si trova e carica la memoria nei registri della CPU... torna al punto 1 e inizia a eseguire l'istruzione successiva.
Il Fetch consiste nel reperimento dell'istruzione di memoria. L'istruzione da reperire è quella il cui indirizzo è indicato nel registro PC, quindi la prima cosa da fare è caricare nel registro MAR ciò che è nel registro PC (MAR ← PC). Poi viene inviato il segnale di lettura tramite il bus controlli. Contestualmente al suo indirizzo (supponendo che le istruzioni vengano codificate in una
singola parola di memoria, quindi lalunghezza dell'istruzione più lunga corrisponda a una parola di memoria, che corrisponde a 16 bit) si passa alla successiva istruzione, che corrisponde ad incrementare PC di due unità (PC ← PC + 2). Dopodiché pone sul bus dati la parola che va a finire in MDR (→ MDR). Infine si sposta il dato da MDR nell'IR (IR← MDR).
I programmi sono memorizzati in memoria in parole consecutive, in mancanza di indicazioni le istruzioni sono eseguite nell'ordine in cui sono scritte, passando alla prossima istruzione incrementando il PC di due unità. In caso di istruzioni di salto la fase di codifica ed esecuzione dovrà lavorare sul PC, in quanto non si deve passare all'istruzione successiva ma passare ad un'istruzione specifica.
Il Linguaggio Macchina
Il linguaggio macchina è il linguaggio che il calcolatore è in grado di eseguire, è costituito da tre tipologie di istruzioni:
Elaborazione input/output e salti (condizionati o incondizionati Il linguaggio▭, ⤴).▱ ♢macchina è formato sostanzialmente da delle stringhe bit (0 e 1) e ogni linguaggio macchina è differente aseconda della CPU. Le istruzioni sono organizzate in campi:
Istruzioni aritmetiche (R1 = R2 + R3)op r1 r2 r3 4 + 4 + 4 + 4 bit● Codice operativo: il primo campo di queste stringhe di bit è il codice operativo che indica all'unità di controllo il tipo di istruzione, come interpretare i successivi campi, come eseguire l'istruzione contenuta, quali unità sono coinvolte nell'operazione; può avere 4 bit.
Operandi sorgente e destinazione → indica i dati o indirizzi dove recuperare/depositare i dati (nei registri o in memoria)Esistono tre tipologie di operandi:
- Immediato: contiene il valore del dato su cui operare;
- Registro: contiene un riferimento ad un registro della CPU; si basa su un registro in cui è posto il dato
su cui operare● Memoria: contiene l'indirizzo della parole di memoria dove c'è il dato su cui operare 28Ingegneria Informatica Elementi di informatica e programmazione - Saetti Alessandro 2022/2023Esempio istruzione di elaborazione. Somma tra R2 e R4 e pone il risultato in R0 (R0 ← R2 + R4). (si considera una parola di memoria in 16 bit)
- Fetch: consiste nel portare nel IR la parola di memoria indicata dal [PC] (si usa [PC] per indicare la parola di memoria il cui indirizzo è memorizzato in PC), carico il contenuto di una parola di memoria, il cui indirizzo è presente in PC, in IR. Questo giro fa uso dei registri MDR e MAR. Durante questa fase si incrementa anche il PC di qualche unità in modo da far riferimento all'istruzione successiva.
- IR ← [PC], PC ← PC + 2
- Decode: lavora direttamente sul registro IR, dove sarà stata caricata l'istruzione. I 16 bit sono contraddistinti da 4 campi:
- 0000 (il primo campo indica
Codice operativo: in questo caso un’operazione di somma), 0000 (potrebbe indicare il registro R0), 0010 (potrebbe indicare il registro R2 → 0010=2), 0100 (potrebbe indicare il registro R4 → 0100=4).
3. Execute:
- Porre il segnale somma sulla linea operazione, che collega l’unità di controllo alla ALU
- Sposta dato da R2 a RA
- Sposta dato da R4 a RB
- Unità di controllo chiede ad ALU di eseguire l’operazione RC ← RA + RB
- Sposta dato da da RC a R0
In questo caso l'operazione è stata fatta in 7 passaggi
Come si fa a riferirsi alle parole di memoria? Supponendo di avere una istruzione del linguaggio macchina con un singolo operando avendo a disposizione 16 bit. 4 bit li usiamo per il codice operativo, l’operando 12 sarà costituito da 12 bit, con cui posso distinguere tra 2 (4096) parole di memoria. Nel caso di calcolatori che indirizzano i singoli byte avremo 4096 differenti byte, però le memorie nei calcolatori sono
costituite da molti più byte, dimensioni che sono di 4 gigabyte (2 byte), il che comporta che dentro ai 12 bit posso scrivere solo un pezzo dell'indirizzo di memoria. In questo caso posso prendere pagine di dimensione 2^20 quindi la memoria da 4 gigabyte sarà costituita da 2 pagine (2 / 2^20). In questo operando posso andare a scrivere dove si trova il mio dato all'interno di una specifica pagina. Possiamo distinguere un indirizzamento diretto: - a pagina zero - a pagina corrente (pagina indicata dal PC, che contiene un indirizzo di istruzione all'interno della memoria che specifica anche una pagina della memoria) Talvolta torna utile l'indirizzamento in memoria indiretto che può essere: - rispetto ai registri, esiste un riferimento ad un registro che contiene l'indirizzo della parola di memoria che contiene il dato su cui operare - rispetto alla memoria, si fa riferimento con l'operando ad una parola di memoria checontiene l'indirizzo della parola di memoria dove è presente il dato, parola di memoria che potrà essere presente o in pagina zero o in pagina corrente
Esiste anche un indirizzamento relativo per cui nell'operando ci trovo uno scostamento rispetto a un certo indirizzo, scostamento che può essere rispetto al PC o all'IR. Abbiamo inoltre un indirizzamento con auto-incremento/decremento che è lo stesso tipo di indirizzamento relativo rispetto all'IR ma si aggiunge che ogni volta che utilizziamo l'operando andiamo ad incrementare/decrementare il dato presente nell'IR. Questa è molto utile operando su una sequenza di variabili (es. vettori).
Esempio istruzione di input/output. Caricare nel registro R4 la parola di memoria il cui indirizzo sta in R2 (R4 ← [R2]).
- Fetch:
- IR ← [PC], PC ← PC + 2
- Decodifica: Primo