Il Linguaggio Macchina
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
Elaboratore Ideale di Von Neumann
decoder
ACC
ALU
0:
1:
2:
:
PC
RIC
CPU
RAM
Registri

Registro istruzione corrente (RIC)


Contatore di Programma (PC)


indirizzo della prossima istruzione da eseguire
Accumulatore (ACC)


contiene l’istruzione correntemente eseguita
Contiene valori utilizzati durante operazioni
Decoder

Decodifica codice istruzione
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
Rappresentazione RAM

Utilizzeremo la notazione




RAM[0]
RAM[1]
...
Per rappresentare le celle della RAM
(RAM[i]=contenuto della cella con
indirizzo 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’istruzione
2 con parametro N=5
In binario: sequenza di bit composta da
CODICE OPERANDO (es. 0010 0101)
Esempio di set istruzioni

Istruzione 1 con parametro N


Istruzione 2 con parametro N


Se ACC=0 allora nuovo PC = N
Istruzione 4 con parametro N


Nuovo valore di RAM[N] = ACC
Istruzione 3 con parametro N


Nuovo valore del reg. ACC = ACC + RAM[N]
Nuovo valore di ACC = RAM[N]
Istruzione 5: termina l’esecuzione
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
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)
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’
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 = …
Esempio di programma

Considerate la seguente conf. iniziale della RAM:






RAM[0]=
RAM[1]=
RAM[2]=
RAM[3]=
RAM[4]=
RAM[5]=
4004
1005
2004
5
21
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?
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
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] =
RAM[1] =
RAM[2] =
RAM[3] =
RAM[4] =
RAM[5] =
RAM[6] =
4004
3004
1006
6001
5
1
-1
(ACC=5 nota: programma come dato!)
(se ACC=0 go to 4)
(ACC’=ACC-1)
(go to 1)
(halt)
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]=
RAM[1]=
RAM[2]=
RAM[3]=
RAM[4]=
RAM[5]=
LOAD 4
SUM 5
MOVE 4
HALT
21
9
LOAD rappresenta il codice 4 ecc.
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
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)
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
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
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)
Scarica

Linguaggio macchina