1 / 21

Il Linguaggio Macchina

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

ervin
Download Presentation

Il Linguaggio Macchina

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Il Linguaggio Macchina

  2. 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

  3. Elaboratore Ideale di Von Neumann 0: decoder 1: 2: ACC : ALU PC RIC RAM CPU

  4. 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

  5. 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

  6. Rappresentazione RAM • Utilizzeremo la notazione • RAM[0] • RAM[1] • ... • Per rappresentare le celle della RAM(RAM[i]=contenuto della cella con indirizzo i)

  7. 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)

  8. 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

  9. 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

  10. 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)

  11. 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’

  12. 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 = …

  13. 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?

  14. 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

  15. 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

  16. 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.

  17. 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

  18. 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 come0000001000000100 • Cioe’ 2*28+4 = 516 (28 rappresenta il numero di bit che aggiungiamo a destra del codice)

  19. 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

  20. 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

  21. 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)

More Related