1)L’interazione fra la CPU e le periferiche può avvenire in vari modi; si presenti il
problema, si descriva e si discuta la gestione tramite polling, interruzione e
accesso diretto alla memoria (DMA). Per ciascun modo si evidenzino vantaggi e
svantaggi e si proponga un esempio di applicazione.
CPU e dispositivi I/O devono mettere in sequenza le proprie attività perché non possono
colloquiare in parallelo con la memoria.
Esistono diversi modi per risolvere il problema di ottimizzazione dei tempi della CPU per
quanto riguarda il colloquio con le periferiche: polling, tecnica dell’interrupt, DMA e
gestione tramite canali I/O.
Il polling consiste nel far sì che la CPU interrompa il proprio lavoro periodicamente ad
• intervalli regolari per interrogare sequenzialmente le periferiche, provvedendo a gestire
eventuali situazioni in cui l’operazione di I/O sia conclusa e riprenda il programma
interrotto.
Vantaggi: poco costosa da realizzare
➔ Svantaggi: la CPU dovendo continuamente interrompere il proprio lavoro rallenta
➔
le altre operazioni in corso. Perdita di tempo. Operazione dispendiosa perché c’è il rischio di
fare interrogazioni non fruttuose
Con la tecnica dell’interrupt non pi la CPU ad interrompere s stessa in maniera
• “arbitraria”, ma la periferica che al momento opportuno (cioè̀ quando ha terminato
l’operazione di I/O) invia un segnale di interrupt alla CPU.
la CPU svincolata dalle continue interruzioni. Inoltre la CPU viene avvisata
➔Vantaggi:
dalla periferica solo quando questa ha terminato il proprio lavoro ed pronta a comunicare
dati e informazioni necessarie.
Svantaggi: quando la CPU comunica con una periferica deve adattarsi alla velocit di
➔
questa + Spreco di tempo perch devo effettuare due trasferimenti dati (I/
O→CPU→Memoria).
Con Il DMA CPU non coinvolta come sorgente o destinatario di dati scambiati nel
• colloquio con le periferiche. In questo caso la tecnica DMA permette il passaggio diretto
dei dati dalla periferica alla memoria centrale. Vantaggi: la CPU svincolata da
➔
processi di comunicazione. Utile se devo ricevere molti dati velocemente. Opera con
segnali di DMA request e DMA aknowledge. Svantaggi:La CPU smette di lavorare (non
➔
pu usare bus dati) ma ho un solo trasferimento anziché́ due, come nella soluzione prima.
ò è è è é
è ù é è è à
2)Si elenchino i tipi di istruzioni presenti tipicamente in una CPU descrivendo in
particolare le funzioni svolte dalle istruzioni di controllo macchina (CPU Control).
Una CPU per poter lavorare deve conoscere una serie di istruzioni elementari (essenziali)che una
volta decodificate, le permetteranno di ottenere il risultato richiesto. Le istruzioni sono scritte in
ASSEMBLY LANGUAGE, ovvero una rappresentazione simbolica che usa codici mnemonici per
indicare le varie operazioni da eseguire.
◼ TRASFERIMENTO DATI
Istruzioni che servono a trasferire dati dalla memoria ai registri, da registri a registri, da registri a
unit esterne, e viceversa.
LD A <indirizzo> carica l’indirizzo di memoria -> A
ST B<indirizzo> store (B)-> indirizzo di memoria
MOV A B serve per copiare da un registro ad un altro (A)->B
Differenza tra move e load?
MOV: sposto un registro a un altro quindi rimango dentro la cpu
LOAD :è un interazione sterna alla cpu (cpu->memoria)
INP <porta> B (porta)->B
OUT A<porta> (A) -> porta
Fanno la stessa operazione concettuale che load e store ma non interagiscono con a memoria ma con
dispositivi di ingresso e uscita. Queste operazioni coinvolgono la CPU e dispositivi input output
tramite, base indirizzi/ dati e controlli.
◼ ISTRUZIONI ARITMETICHE
Permettono di eseguire operazioni aritmetiche elementari su numeri interi. Chiedono alla CPU di
svolgere i compiti propri dell’ALU.
Esempi:
ADD<indirizzo> A (indirizzo)+A->A
Questo vuol dire che io voglio sommare quello che trovo in memoria ad un certo indirizzo + quello
dell’accumulatore = nuovo accumulatore inoltre oltre al risultato produrrà quei indicato FLAG che
mi dicono se i bit sono bastati in valore assoluto, commento a 2.
SUB A<indirizzo> (indirizzo)-(A)->A
Sottraggo dall’accumulatore quello che trovo in memoria
SBC B<INDIRIZZO> sottrae gli operandi e tiene conto degli eventuali prestiti riporti alle
operazioni precedenti.lei stessa produrrà un prestito nel caso in cui si debbano effettuare ulteriori
sottrazioni.
Questa volta il Carry si tende come prestito dell’operazione presente perché una sottrazione .
ADC <indirizzo> A ci permette di gestire un numero di dimensione maggiore rispetto
quello che l’ALU può gestire ma con dei passaggi ripetuti. Dove 1° sommo gli operandi
(ADD) 2°(ADC) sommo i numeri ma nel sommarli aggiungi il riporto della somma
precedente come addendo.
◼ ISTRUZIONI LOGICHE
Permettono di eseguire operazioni logiche su stringhe di bit. I vari operatori operano su coppie di
bit.
AND<INDIRIZZO> A (indirizzo)*A->A and tra accumulatore e registro
OR<INDIRIZZO> B (B)->A
XOR<INDIRIZZO>A (indirizzo) EXOR (A)->A (servono per la mascheratura e operazioni
booleane)
à ◼ ISTRUZIONI DI ROTATE E SHIFT
Sono istruzioni che operano sul contenuto di un registro. Esse servono a operare un singolo bit di
una fila di celle, senza cambiare il contenuto delle altre.
SRL A shif logico destra: traslare verso destra utile per dividere per 2 potenze di 2 in valore
assoluto .
SRA shift aritmetico a destra di ((A)): operazione per dividere per 2 potenze di 2 quando lavoriamo
in complimento a 2 perché traslo i bit ma riconfermo il bit signi cativo
RRA rotazione a destra di ((A))
Esempio: 0110 1011 voglio dividere con SRL la prima parte e la seconda parte con RR perché in
questo modo ci permette di recuperare il bit che avevamo tenuto nel Carry e adesso con l’RR lo
rimettiamo come bit signi cativo
*non posso fare l’inverso perché perderei il Carry dell’operazione precedente.
SLLB shift logico sinistra ((B)) moltiplicare per 2 potenze di 2 in valore assoluto
RLA rotazione a sinistra di ((A))
Esempio: 0110 1011 IL2° cosi rientra nel Carry
2°RL 1°SLL
◼ ISTRUZIONI DI CONTROLLO PROGRAMMA
Sono istruzioni che servono a modificare l’ordine di esecuzione sequenziale delle istruzioni di cui
composto un programma Esempio:
JP PO, DOPO questo signi ca : JUMP ovvero vai a guardare i ag di parità se la parità dispari vuol
dire che si è veri cata questa condizione e vogliamo effettuare il salto
JP NC, POI questo signi ca: jump in poi se il valore ottenuto nel Carry dice che precedentemente
non si è ottenuto riporto
SALTI SENZA RITORNO
JP<indirizzo> salto incondizionato
Salta a quella posizione quindi vai a cambiare il valore del program counter perché
quella non è l’istruzione da eseguire ma si trova nell’indirizzo speci cato all’interno
dell’istruzione quindi indirizzo->pc
JP<condizione><indirizzo> salto condizionato
In fase di execute verrà controllato il valore che c’è nel ag speci cato nell’istruzione e quel ag
corrisponde dalla condizione vera-> salto falsa-> non stato e vado avanti normalmente
Esempio in Ca2: ADD A, B
Dopo aver effettuato questa somma visto che non sono certo che l’accumulatore contenga il risultato
corretto dell’operazione perché i bit potrebbero non essere bastati
Quindi dopo faccio: JP ow,”poi” se il programma non salta a poi (over ow)Continua a fare le
operazioni perché il risultato che la somma ha prodotto è corretto ovvero sono bastati viceversa se ho
avuto over ow vuol dire che il risultato non è compatibile con dim. dell’accumulatore e quindi nella
porzione di programma si deciderà di usare più bit af nché il numero si rappresenti correttamente.
JR<DISPLACEMENT> salto relativo alla posizione attuale del pc
Nell’istruzione non troverò l’indirizzo a cui andare ma un numero mi ca2 che mi trasla un numero di
posizioni avanti o indietro
Il numero che compare nell’istruzione è lo spostamento che dobbiamo inviare al program counter
per raggiungere la posizione
La sua esecuzione quindi: (pc) +displacement ->pc
JR <COND><DISPLACEMENT > salto relativo condizionato
Dal registro dei ag quindi salto se e solo se i ag assume valore vero indicato nell’istruzione
Se istruzione veri cata:(pc) +displacement ->pc altrimenti non si fa niente
perché due istruzioni diverse: jump JP 1000 e jump relativo JR-10 ?
In base dati è più piccolo del base indirizzi con quindi con un numero più piccolo di bit posso
speci care dove andare JR quindi se mi basta ascrivere -50 è più veloce rispetto al caso in cui
voglio avere un intero indirizzo (JP)
fi fl fl fi fi fi fi fi fl fi fl fl fi fi fi fl è fl
SALTI CON RITORNO
Quando scriviamo un programma potrebbe esserci l’esigenza di abbandonare l’istruzione corrente. Ci sono
richiami a sottoprogrammi per cui salviamo il Contenuto del pc prima di caricare il nuovo valore per rendere
possibile il ritorno all’esecuzione successiva a quella che ha effettuato il salto.Il salvataggio consiste nella
memorizzazione del contenuto del pc (l’indirizzo) nello stack (una parte di memoria che segue la logica lifo)
mi permetterà di avere chiamate nidi cate ovvero potrò raggiungere un sottoprogramma che a sua volta ne
potrà chiamare un altro e cosi via.
Quindi pc lo riempiremo dallato verso il basso. Indirizzo della cella di memoria che per l’ultima è stata
riempita viene identi cata da un registro interno alla cpu chiamato stack pointer(puntatore alla pila). Quando
alla ne del sottoprogramma viene richiesto il ritorno allora recupero il pc salvato nello stack prelevarlo e
rimetterlo nel pc
CALL<INDIRIZZO> salto con ritorno incondizionato
Salto in cui dobbiamo preoccuparci di non perdere il valore che il pc aveva all’uso interno
call<cond><indirizzo> salto con ritorno condizionato
Questo comando si compone di codice operativo e indirizzo a cui saltare. Cosa dovrà prendere fase di
execute? L’indirizzo a cui andare a prender il posto del pc corrente?
(SP)-1 -> SP
(PC)-> MAR
(PC)->MBR
(MBR)->(MAR)
Con questi passi abbiamo preso da parte il valore che nel program counter è stato impostato alla conclusione
della fase di fetch avendo da parte l’indirizzo in cui voglio tornare posso prendere l’indirizzo e lo metto nel
pc : indirizzo ->pc
perchè lo stack pointer si incrementa?
Il puntatore alla pila (stack pointer) per convenzione punta sempre alla ultima cella occupata però abbiamo
l’esigenza di scrivere un nuovo valore e non possiamo scriverlo in una cella già occupata: la casella vuota
che troveremo è quella più basso in cui ci troviamo però innanzitutto devo veri care se la condizione si è
veri cata poiché era salto condizionato
In fondo al programma cosa ci sarà scritto?troveremo un comando ritorna al punto di partenza : ret
Per ritorno condizionato Oltre al codice operativo avremo bisogno di altro? No, perché la cpu sa che
l’indirizzo si trova nella posizione indicato nel punto della pila.
1) ret ritorno condizionato
Quindi se andiamo a fare ritorno dobbiamo :
1.(SP)-> MAR
2.((mar)) ->mbr
3.(mbr)-> pc
4.(sp)+1-> sp
Il puntatore alla pila (che sta puntando alla ultima casella) lo mando sul bus indirizzi quello che trovo: il
contenuto lo mando sui bus dati che quando raggiunge la cpu viene caricata nel pc cosi il mio programma
riparte da dove era rimasto poi il puntatore s +1 diventa un nuovo puntatore della pila e risalgo
2)ret<cond>ritorno condizionato se vene veri cata
◼ ISTRUZIONI DI CONTROLLO MACCHINA
Sono istruzioni che servono a modificare direttamente lo stato della CPU, senza operare sui dati n
sulle operazioni tra dati (trasferimenti, ecc.).
▪ ▪HALT
Arresta il funzionamento della CPU
▪ ▪NOP
Che sta per “No Operations”, mantiene inalterato lo stato della CPU, serve a creare dei ritardi per
permettere il completamento di altre operazioni.
▪ ▪DI
Che sta per “Disable Interrupt”, comando che disattiva gli interrupt, cos la CPU non ricever
segnali di interrupt.
fi fi fi fi fi ì fi à é
▪ ▪EI
Che sta per “Enable Interrupt”, comando che attiva gli interrupt, cos la CPU potr ricevere segnali
di interrupt.
▪ ▪RESET
Comando che azzera lo stato della CPU a livello software quindi va usata quando la CPU è ancora in
grado di elaborare l’istruzione, altrimenti si usa HD RESET che provoca una ripartenza hardware
circuitale a livello dei bus control grazie anche al watch dog che permette di interrompere tutto
quello che stava accadendo nell CPU.
3)Si descriva l’architettura di una generica CPU evidenziando in particolare le funzioni che
vengono svolte dal Program Counter e dallo Stack Pointer.
Si commenti il coinvolgimento delle risorse della CPU durante la fase di decodifica
dell’istruzione, ben commentando lo scopo di tale fase (cosa si richiede perché venga svolta,
cosa produce e per chi).
Una generica CPU (Central Processing Unit) contiene al suo interno le seguenti
• componenti: ALU (Unità logico-aritmetica), accumulatore, program counter, instruction
register, decodificatore, controllore, registri a scopi generali, stack pointer e bus indirizzi e
dati e controller esterni e interni
Il PROGRAM COUNTER contiene gli indirizzi per le istruzioni che servono per ogni
• istante del tempo
-Formato da circuito con autoincremento cioè si aggiorna con un nuovo indirizzo quando
l’istruzione precedente si è conclusa
Lo STACK POINTER detto anche “puntatore alla pila”, è associato allo stack.
• - é un dispositivo che punta sempre all’indirizzo in cima alla pila.
Il program counter segue l’andamento di un programma normalmente e ogni volta che si
passa ad un sottoprogramma , si salva nella prima cella dello stack l’indirizzo a cui
l’esecuzione del main program si è interrotta (cioè il contenuto del PC). Funziona nella
stessa logica per chiamate a programmi ricorsivo o nidificate infatti la pila segue la logica
LIFO (Last in first out) e quindi il primo indirizzo inserito nello stack sarà l’ultimo a uscire.
La fase di decodifica è la seconda fase del ciclo macchina (fetch, decode , execute).
• Una volta che l’instruction register ha ricevuto l’istruzione, questa viene decodificata dal
decoder che identifica il CODICE OPERATIVO (che definisce il tipo di istruzione) e il
CAMPO OPERANDO che verrà scomposto nei due operandi (fornisce indirizzi degli
operandi da dove andarli a prelevare e poi dove memorizzarli e la modalità di
indirizzamento)
Utile per il controllore che dovrà attivare i circuiti idonei a svolgere l’operazione richiesta
nella fase di execute. ì à
4)Si descriva l’architettura di una generica CPU evidenziando in particolare la
modalità di interazione fra gli elementi della CPU e lo Stack. Si motivi infine la
necessità di prevedere un collegamento fra i registri per scopi generali sia con il
bus dei dati che con quello degli indirizzi, indicando la/e direzione/i in cui
possono avvenire i trasferimenti delle informazioni, ben motivando la risposta.
Una generica CPU (Central Processing Unit) contiene al suo interno le seguenti
• componenti: ALU (Unità logico-aritmetica), accumulatore, program counter, instruction
register, decodificatore, controllore, registri a scopi generali, stack pointer e bus indirizzi,
bus dati interni ed esterni e bus controlli.
Lo stack è una sezione di memoria contenuta nella CPU composta da una serie di cellette
• in colonna.
Lo Stack segue l’andamento di un programma ogni volta che esso passa a un
sottoprogramma o da quest’ultimo si passa al programma precedentemente in corso.
Esso salva nella sua prima cella l’indirizzo a cui l’esecuzione del MAIN PROGRAM si
interrotta (ossia il contenuto del Program Counter).
Nella stessa logica nel caso di molteplici sottoprogrammi nidificati vengono via via segnati
gli indirizzi a cui l’esecuzione dei vari programmi si interrotta.
In questo modo la pila si sposta in avanti o indietro (se vengono aggiunti o tolti dati).
La pila Segue la logica LIFO (Last In First Out) pertanto la cima della pila contiene sempre
l’ultimo indirizzo utile che sar presente nello stack pointer.
Pertanto lo stack interagisce con bus dati interno nei due sensi di marcia invece ha un
• collegamento solo uscente con i bus indirizzi interno.
I registri a scopi generali hanno collegamneti sia uscenti che entranti con i bus dati interno
• perché sia possibile far entrare e uscire dati siccome l’utilità dei registri a scopi generali è
proprio conservare dati. Inoltre ha un collegamento soltanto uscente con il nìbus indirizzi
interno.
5)Si descriva l’architettura di una generica CPU evidenziando in particolare le funzioni che
vengono svolte da ALU, accumulatore e registro dei Flag. Si motivi infine la necessità di
prevedere un collegamento fra il registro PC sia con il bus dei dati che con quello degli
indirizzi, indicando la/e direzione/i in cui possono avvenire i trasferimenti delle informazioni,
risposta.
ben motivando la
Una generica CPU (Central Processing Unit) contiene al suo interno le seguenti
• componenti: ALU (Unità logico-aritmetica), accumulatore, program counter, instruction
register, decodificatore, controllore, registri a scopi generali, stack pointer e bus indirizzi,
bus dati interni ed esterni e bus controlli.
ALU (Arithmetic -logic unit) esegue le operazioni logiche e matematiche elementari.
•
Per operare necessità di conoscerel’operazione ch
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.