Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene...

21
Il Linguaggio Macchina

Transcript of Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene...

Page 1: Il Linguaggio Macchina. Come funziona lelaboratore? Un programma (sequenza di istruzioni) viene caricato in memoria centrale Si alloca lo spazio per i.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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)