il linguaggio macchina. come funziona lelaboratore? un programma (sequenza di istruzioni) viene...
TRANSCRIPT
![Page 1: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/1.jpg)
Il Linguaggio Macchina
![Page 2: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/2.jpg)
Come funziona l’elaboratore? Un programma (sequenza di istruzioni)
viene caricato in memoria centrale Si alloca lo spazio per i dati necessari al
programma La CPU estrae le istruzioni e dati dalla
memoria centrale, le decodifica e le esegue utilizzando registri interni (accesso veloce)
L’esecuzione può comportare il trasferimento di dati in input e output tra memoria centrale e periferiche attraverso il bus di sistema
![Page 3: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/3.jpg)
Elaboratore Ideale di Von Neumann
2:1:0:
:
RAM
decoder
RIC
PC
ACC
ALU
CPU
![Page 4: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/4.jpg)
Registri Registro istruzione corrente (RIC)
contiene l’istruzione correntemente eseguita Contatore di Programma (PC)
indirizzo della prossima istruzione da eseguire Accumulatore (ACC)
Contiene valori utilizzati durante operazioni Decoder
Decodifica codice istruzione
![Page 5: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/5.jpg)
Istruzioni della Macchina Le istruzioni della macchina sono
codificate in forma numerica ed inserite insieme agli altri dati nella memoria centrale
Istruzione = operazione di base sui registri e sulla RAM
Codifica delle istruzioni = Elenco ordinato Identificatore di un istruzione ~ Numero
d’ordine
![Page 6: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/6.jpg)
Rappresentazione RAM
Utilizzeremo la notazione RAM[0] RAM[1] ...
Per rappresentare le celle della RAM(RAM[i]=contenuto della cella con indirizzo i)
![Page 7: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/7.jpg)
Operatori e parametri Alcune istruzioni richiedono un parametro che
viene passato al momento della esecuzione Per rappresentare codice + operandi possiamo
utilizzare una codifica del tipo: In decimale:
CODICE*N+OPERANDO dove N dipende dalla grandezza delle celle di memoria
ad es. 2*1000+5=205 identifica l’istruzione2 con parametro N=5
In binario: sequenza di bit composta da CODICE OPERANDO (es. 0010 0101)
![Page 8: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/8.jpg)
Esempio di set istruzioni Istruzione 1 con parametro N
Nuovo valore del reg. ACC = ACC + RAM[N] Istruzione 2 con parametro N
Nuovo valore di RAM[N] = ACC Istruzione 3 con parametro N
Se ACC=0 allora nuovo PC = N Istruzione 4 con parametro N
Nuovo valore di ACC = RAM[N] Istruzione 5: termina l’esecuzione
![Page 9: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/9.jpg)
Programma in Linguaggio Macchina
Sequenza di istruzioni codificate Un programma viene interpretato infatti
sequenzialmenteattraverso il registro PC che identifica la prossima istruzione da eseguire
L’istruzione 3 permette di saltare in un qualsiasi punto del programma
Per capire meglio occore introdurre il ciclo di interpretazione dei programmi
![Page 10: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/10.jpg)
Stato iniziale della macchina Supponiamo di aver caricato le
istruzioni nella RAM a partire dalla cella con indirizzo 0
Inoltre supponiamo di avere a disposizione una tabella che ci permette di recuperare l’istruzione e i relativi parameteri a partire dal suo encoding (Codice*N+Parametro)
![Page 11: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/11.jpg)
Esecuzione tramite ciclo di fetch
Inizializzazione: memorizza 0 nel registro PC Ciclo di Fetch:
1. Recupera il valore nella cella con indirizzo PC nella RAM e lo memorizza nel registro RIC (registro istruzione corrente)
2. Somma 1 al valore contenuto in PC e lo memorizza in PC
3. Decodifica il valore contenuto in RIC (estrae il codice operazione e il parametro)
4. Esegui l’istruzione 5. Torna al punto 1 a meno che l’istruzione non sia
quella di `fine programma’
![Page 12: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/12.jpg)
Osservazioni Il ciclo di fetch permette di eseguire
programmi in modo sequenziale: Prima istruzione RIC = RAM[0] Incremento PC Istruzione seguent RIC = RAM[1], ecc.
Posso ottenere dei cicli ottengono cambiando il valore del registro PC tramite l’istruzione 3 …PC = …
![Page 13: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/13.jpg)
Esempio di programma Considerate la seguente conf. iniziale della RAM:
RAM[0]= 4004 RAM[1]= 1005 RAM[2]= 2004 RAM[3]= 5 RAM[4]= 21 RAM[5]= 9
dove Istr. 1: ACC ’ = ACC + RAM[N] Istr. 2: RAM[N] ’ = ACC Istr. 4: ACC ’ = RAM[N] Istr. 5: termina esecuzione (N=parametro)
Cosa fa il programma?
![Page 14: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/14.jpg)
Soluzione Il programma precedente esegue i seguenti
passi: Copia il valore della cella 4 (=21) nel reg. ACC Somma il val. della cella 5 (=9) al valore in ACC e lo
memorizza di nuovo in ACC (=30) Copia il valore del reg. ACC nella cella 4 (=30)
Alla fine abbiamo che: ACC e RAM[4] contengono 30 RAM[5] contiene ancora 9
![Page 15: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/15.jpg)
Operazioni cicliche Per simulare un ciclo dobbiamo usare
Istr. 3: se ACC=0 allora PC ’=N Istr. 6: PC ’ = N
Esempio ciclo che va da 5 a 0: RAM[0] = 4004 (ACC=5 nota: programma
come dato!) RAM[1] = 3004 (se ACC=0 go to 4) RAM[2] = 1006 (ACC’=ACC-1) RAM[3] = 6001 (go to 1) RAM[4] = 5 (halt) RAM[5] = 1 RAM[6] = -1
![Page 16: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/16.jpg)
Nomi mnemonici Per semplificare la lettura delle istruzioni
associamo dei nomi mnemonici ai codici delle istruzioni
Il nostro primo esempio si potrebbe scrivere come
RAM[0]= LOAD 4 RAM[1]= SUM 5 RAM[2]= MOVE 4 RAM[3]= HALT RAM[4]= 21 RAM[5]= 9
LOAD rappresenta il codice 4 ecc.
![Page 17: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/17.jpg)
Istruzioni come dati Supponiamo che una cella della RAM
contenga l’istruzione MOVE 4 MOVE 4 rappresenta in realtà un numero Nella nostra codifica decimale
Se codice di MOVE è 2 2*1000 + 4 = 2004
Tale codifica semplifica i nostri calcoli ma non rispecchia i valori realmente memorizzati nella RAM dove si ragiona in binario
![Page 18: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/18.jpg)
Istruzioni come dati Le istruzioni in memoria sono in realtà
codificate in binario Ad esempio supponiamo di utilizzare
un byte per il codice e uno per l’argomento MOVE 4 viene rappresentato come
00000010 00000100 Cioe’ 2*28+4 = 516 (28 rappresenta il
numero di bit che aggiungiamo a destra del codice)
![Page 19: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/19.jpg)
Istruzioni come dati
Indipendentemente dalla codifica è importante notare che le istruzioni possono essere trattate
come dati MOVE 4 diventa 2004
e i dati come istruzioni Il numero 2004 diventa MOVE 4
![Page 20: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/20.jpg)
Programmi automodificanti La CPU applica il ciclo di fetch e
decodifica in modo indiscriminato istruzioni o dati
Si possono definire programmi automodificanti che utilizzano dati come istruzioni
Nella macchina di Von Neumann alcuni problemi si possono risolvere solo con programmi automodificanti
![Page 21: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i](https://reader035.vdocuments.mx/reader035/viewer/2022062512/5542eb58497959361e8c328d/html5/thumbnails/21.jpg)
Esempio
Un tipico problema in cui occorre modificare le istruzioni durante l’esecuzione Allocare K celle di RAM consecutive
con valori letti in ingresso dove K è a sua volta un numero in
ingresso (input)