Fondamenti di Informatica. Architettura del Calcolatore

Documenti analoghi
Fondamenti di Informatica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Architettura del Calcolatore. Danilo Ardagna Politecnico di Milano

L architettura del calcolatore

Architettura di un calcolatore

Architettura di un Sistema Informatico

Architettura di un elaboratore. Il modello di von Neumann

Architettura del. Calcolatori (1) Calcolatori (2) L architettura di Von Neumann. CPU RAM Memoria I/O. secondaria. bus

Architettura. Argomenti. Modello di Von Neumann. Corso di Laurea in Ingegneria Biomedica aa 2003/2004. Ing. Antonio Coronato. Modello di Von Neumann

Architettura del calcolatore

Note sull architettura del calcolatore

Architettura dei calcolatori

Il modello di Von Neumann

La macchina di Von Neumann

Architettura del Calcolatore

Macchina di Von Neumann

Abilità Informatiche e Telematiche

Abilità Informatiche e Telematiche

Architettura del calcolatore (Seconda parte)

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).!

LABORATORIO DI INFORMATICA

Programma del corso. Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori

memoria PSW R1 R2 CPU Struttura logica dell elaboratore unità di controllo ALU unità di ingresso unità organo coordinatore clock di uscita

Memoria Centrale. Memoria Centrale. Memoria Centrale. Interazione CPU-memoria centrale 16/04/2008. Indirizzamento

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica.

ARCHITETTURA DI UN ELABORATORE

Esame di INFORMATICA ARCHITETTURA DI VON NEUMANN. Lezione 4 ARCHITETTURA DI VON NEUMANN

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Informatica L-A 1

INFORMATICA. L informatica comprende:

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Architettura dei computer

Architettura hardware

Il processore - CPU (CENTRAL PROCESSING UNIT)

Esame di INFORMATICA Lezione 4

Il computer P R O F. L O R E N Z O P A R I S I

ARCHITETTURA DI UN ELABORATORE. Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).

Unità di apprendimento 1. Il computer

Concetti introduttivi

L architettura del calcolatore (Seconda parte)

Fondamenti di Informatica A. A / 1 9

Cenni sull architettura del calcolatore

2. Architettura di un calcolatore

o studiare l architettura del calcolatore significa:

Introduzione al funzionamento di un calcolatore elettronico

Le istruzioni del linguaggio gg macchina corrispondono ad operazioni elementari di elaborazione operazioni aritmetiche

Architettura dei computer

Informatica. Mario Pavone - Dept. Mathematics & Computer Science - University of Catania. Trasferimento. Ambiente esterno.

SISTEMI INFORMATIVI AZIENDALI

ARCHITETTURA DI UN ELABORATORE

Macchina di Von Neumann

Architettura dei Calcolatori Elettronici

MEMORIA CENTRALE MEMORIA CENTRALE INTERAZIONE CPU-MEMORIA CENTRALE

Dal sistema operativo all' hardware

Struttura di un sistema di elaborazione. SDE: basi. Descrizione dei componenti (2) Descrizione delle componenti

Componenti e connessioni. Capitolo 3

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

Architettura di Von Neumann

La macchina di Von Neumann. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA CORSO DI "PROGRAMMAZIONE I"

HARDWARE. Hardware. Vista di insieme

Architettura del calcolatore (Prima parte)

Elementi di informatica

ARCHITETTURA DI UN ELABORATORE

Architettura del calcolatore. Prima parte

Struttura dell elaboratore elettronico

Architettura di Von Neumann

Il computer P R O F. L O R E N Z O P A R I S I

Architettura di un elaboratore

Architettura di un calcolatore. Informatica per l Ingegneria

Concetti Introduttivi

G L O S S A R I O. Fondamenti di Informatica I - Università degli Studi di Trento Dott. Roberti Pierluigi

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Elementi di base del calcolatore

Personal Computer: introduzione

Il computer P R O F. L O R E N Z O P A R I S I

Lezione 15. L elaboratore Elettronico

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

ARCHITETTURA DI UN ELABORATORE

Architettura hardware

Architettura dei Sistemi Informatici

Concetti Introduttivi

Com è fatto un computer (seconda puntata) Appunti per le classi 1 A cura del prof. Ing. Mario Catalano

RIASSUNTO La codifica delle informazioni

Programma del corso. Architettura del calcolatore. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Elementi di Programmazione

Architettura di un calcolatore: introduzione. Calcolatore: sottosistemi

Il linguaggio macchina

Elementi di informatica

Architettura dei calcolatori

Criteri di caratterizzazione di una memoria

Memoria Secondaria o di Massa

Elementi di Informatica Chiara Epifanio

Pipeline. Esempio pipeline lineare a 5 stadi. Tempificazione S1 S2 S3 S4 S5. Istruzioni. Istruzione 4. Istruzione 3. Istruzione 2. tempo.

Informatica giuridica

Componenti principali

Architettura di un calcolatore

architettura degli elaboratori Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione

Calcolatore: sottosistemi

Architettura di un calcolatore e ciclo macchina. Appunti per la classe 3 Dinf

Transcript:

Fondamenti di Informatica Architettura del Calcolatore 1

La macchina di von Neumann bus di sistema canale di comunicazione CPU Mem. RAM Mem. Massa Perif. esecutore programmi e dati I/O dei dati (e dei programmi) 2

Elementi funzionali Bus di sistema collega gli altri elementi e consente lo scambio di dati Unità di elaborazione, o CPU elabora dati, coordina trasferimento dei dati esegue i programmi, cioè interpreta ed esegue le loro istruzioni Memoria Centrale memorizza dati e programmi capacità limitata (esempio: 4 GByte) volatile (si cancella se si spegne il calcolatore) accesso all informazione molto rapido 3

Memoria secondaria o memoria di massa memorizza grandi quantità di dati e programmi Su PC: hard disk (es. 750 GB), CD-ROM (700 MB), DVD (4,7 GB), pendrive usb (es. 8 GB), scheda microsd (32 GB) persistente (si deve cancellare esplicitamente) accesso molto meno rapido della RAM Unità periferiche (I/O) comunicazione con l ambiente esterno terminali, con tastiera, mouse, video, stampanti Input: tastiere, microfoni, mouse, touchpad, videocamere, Output: schermi, altoparlanti, stampanti, l ambiente esterno non è sempre un utente umano (impianti industriali, robot, strumenti di controllo) Sensori e attuatori 4

Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 5

Le memorie di massa Informazione memorizzata su supporto magnetico (o ottico o altro...) di costo contenuto Memoria permanente: le informazioni sono raggruppate in file gestiti dal sistema operativo. Dischi rigidi: tempi di accesso dell ordine delle decine di millisecondi; floppy disk: dell ordine delle centinaia di millisecondi Nastri e Cartucce: per memorizzare informazioni storiche (back-up) CD-ROM e DVD-ROM: sola lettura (700 MB e 4,7 GB) CD-RW e DVD-RW: anche riscrivibili 6

Struttura dei dischi rigidi (Hard Disk) testine superfici tracce cilindri settori 7

Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 8

La memoria centrale Contiene le istruzioni e i dati su cui la CPU può operare Contiene, cioè, sia i dati sia i programmi Tutta l informazione, per poter essere elaborata, deve passare dalla memoria centrale e successivamente essere caricata in qualche registro della CPU È memoria a breve-medio periodo è volatile (si perde allo spegnendo la macchina) Ha dimensioni "ridotte" ordine dei GByte (ma fino a non molto tempo fa, MByte) Tempi di accesso più rapidi ordine delle decine di nanosecondi circa 1 milione di volte più veloce delle memorie di massa 9

La memoria centrale È strutturata come un insieme ordinato di parole (celle) 1 parola = n elementi binari (tipicamente 8, 16, 32, 64 bit) La posizione di ogni parola è identificata da un indirizzo Capacità di indirizzamento (numero di celle "accessibili") È definita dalle dimensioni del bus indirizzi e del registro indirizzi (AR), spiegati dopo Una zona di memoria non indirizzabile è inaccessibile di fatto è inutile Il numero di celle di una memoria, quindi, tende a coincidere con il massimo numero di celle indirizzabili Altrimenti il bus e il registro degli indirizzi sono inutilmente sovradimensionati Una capacità di indirizzamento sovradimensionata può (ad esempio) essere predisposta in previsione di una futura espansione della memoria 10

Indirizzamento della memoria centrale Esiste un registro (registro indirizzi - AR) della CPU per indirizzare la memoria È un registro di k bit: può indirizzare 2 k celle Con 10 bit si indirizzano 1.024 celle 1 kilo-parole Con 20 bit, 1.048.576 parole 1 mega parole 30(giga), 40(tera), 50(a), 60(exa) Celle - hanno un indirizzo - contengono parole 0 i-1 i i+1 01110100110 Registro Indirizzi (AR) i i+2 2 k -1 11

RAM e ROM RAM: Random Access Memory Le celle sono indirizzabili in un ordine qualunque (accesso random = diretto, non "casuale") Il tempo di accesso non dipende dalla cella ROM: Read-Only memory Per programmi protetti e definiti dal costruttore Il BIOS (Basic I/O System) che carica in memoria il sistema operativo quando la macchina viene accesa Ne esistono di diversi tipi Erasable, Programmable, (EPROM) Una via intermedia tra Hardware e Software (Firmware) 12

Tecnologie per la memoria centrale La memoria RAM È realizzata mediante circuiti a transistori È modificabile (leggibile e scrivibile) ma deve essere continuamente alimentata per mantenere le informazioni (volatile) All accensione il suo contenuto è una sequenza casuale di 0 e 1 La memoria ROM È solo leggibile: le informazioni sono di solito scritte in modo permanente dal costruttore È caricata al momento della produzione del calcolatore Vi si accede ogni qualvolta questo viene acceso Contiene il bootstrap, un programma contenente le prime istruzioni che la CPU deve eseguire 13

Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 14

La CPU Contiene gli elementi circuitali che regolano il funzionamento del calcolatore: L unità di controllo è responsabile della decodifica e dell esecuzione delle istruzioni. "Dirige" l'azione delle altre parti L orologio di sistema (clock) permette di sincronizzare le operazioni, temporizzando il funzionamento del calcolatore L unità aritmetico-logica (ALU) realizza le operazioni aritmetiche e logiche eventualmente richieste per l esecuzione dell istruzione. È priva di facoltà di scelta I registri sono piccole memorie velocemente accessibili, utilizzate per memorizzare risultati parziali o informazioni necessarie al controllo. L insieme dei valori contenuti nell'insieme di tutti i registri in un dato istante dell elaborazione è detto contesto della CPU 15

La CPU Altri registri speciali R0 R1 registri generici Rn 16

Il ciclo preleva-esegui Le istruzioni da eseguire sono nella memoria RAM La CPU ciclicamente (e indefinitamente): Preleva la prossima istruzione dalla RAM Decodifica ed esegui tale istruzione Tipologie di istruzioni di elaborazione dei dati di trasferimento dei dati di controllo del flusso di esecuzione del programma di arresto (per terminare un programma) Funzionamento scandito dall orologio di sistema ( clock ) 17

Il ciclo preleva-esegui più in dettaglio 1. Preleva la prossima istruzione dalla RAM 2. Decodifica ed esegui l istruzione prelevata 1. Contenuto di PC AR 2. Lettura da memoria centrale DR 3. Trasferimento da DR CIR 4. Incremento di PC 5. Interpretazione ed esecuzione di CIR 18

Formato istruzioni in linguaggio macchina Costituite (ovviamente) da sequenze di 0 e 1 campo codice operativo (obbligatorio) specifica l operazione da eseguire campo operandi (facoltativo) indica i dati da utilizzare (gli operandi solitamente possono essere uno o due) Può contenere direttamente il valore, o l indirizzo della cella che contiene il valore (riferimento a una variabile) FORMATO ISTRUZIONE: Cod. operativo Operandi 19

Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 20

Il bus di sistema Insieme di connettori (conduttori elettrici) che trasferiscono dati (bit!) collegando fra loro CPU, RAM e interfacce di i/o I trasferimenti sono gestiti dalla CPU (modalità master/slave) e si chiamano cicli del bus La capacità del bus e la frequenza del clock determinano la velocità di trasferimento Bus Dati trasferisce dati da master a slave e viceversa Bus Indirizzi trasferisce indirizzi, per esempio l indirizzo di un dato dal registro indirizzi alla memoria, per accedere al dato stesso Bus di Controllo Da master a slave: comandi da eseguire (es: lettura da disco) Da slave a master: informazioni sul successo dell operazione 21

Cicli di bus: esempi Operazione di lettura da memoria centrale (LOAD): la CPU carica l indirizzo della parola di memoria nel registro indirizzi e lo trasmette alla memoria via bus indirizzi la CPU invia il comando di Read Memory sul bus di controllo la memoria trasmette sul bus dati il contenuto della parola verso il registro dati la memoria segnala al processore sul bus di controllo che l operazione è stata completata con successo: il dato si trova nel registro dati Così si copia il contenuto di una cella della RAM nel registro dati della CPU Ogni prelievo di istruzione (preleva-esegui) comporta un ciclo di load Anche l esecuzione di una istruzione può comportare un ciclo di load 22

Cicli di bus: esempi Operazione di scrittura in memoria centrale (STORE): la CPU carica indirizzo della parola di memoria dove si vuole scrivere nel registro indirizzi e lo trasmette alla memoria via bus indirizzi la CPU carica nel registro dati la parola da scrivere in memoria la CPU invia il comando di Write Memory sul bus di controllo la CPU trasmette sul bus dati il contenuto del registro dati verso l indirizzo di memoria segnalato la memoria segnala al processore sul bus di controllo che l operazione è stata completata con successo: il dato si trova nella parola di memoria destinazione Così si copia il contenuto del registro dati della CPU in una cella dalla RAM Tipicamente l esecuzione di un istruzione può comportare un ciclo di store 23

Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 24

Interfacce di I/O (verso le periferiche) Consentono il collegamento tra elaboratore e periferiche Possono essere dispositivi elettromeccanici Contengono registri per inviare comandi alla periferica registro comandi periferica (PCR) collegato al bus di controllo scambiare dati registro dati della periferica (PDR) collegato al bus dati controllare il funzionamento della periferica registro stato periferica (PSR): pronto, occupato, errore,... 25

Il sistema operativo Programma di grandi dimensioni e notevole complessità, che permette all utente di interagire con il calcolatore Sviluppo di un sistema operativo: centinaia di anni-uomo Poca teoria, e solo in alcune aree, perché storicamente: prima lo sviluppo tecnologico, poi la teorizzazione aspetti non di calcolo ma di ottimizzazione, gestione di interazione, gestione di malfunzionamenti etc. il progetto di un sistema operativo è un problema intrinsecamente complesso e interdisciplinare Complessità estrema: studio per livelli di macchine astratte per ragionare a diversi livelli di astrazione Funzioni: Supporto per la programmazione Meccanismi di Ingresso / Uscita (I/O) Gestione archivi (file) 26

Esempio minimale: la macchina mini-hw Mini-CPU PC CIR A B ALU UC RAM DR AR BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DUE SOLE UNITÀ PERIFERICHE (i/o di soli numeri interi) INPUT OUTPUT 27

RAM da 8 KByte = h x 2 k bit indirizzi delle celle 0 Registro Indirizzi (AR) 001000110010 k = 12 bit cella selezionata 562 4.095 h =16 bit 1001011001010010 4.096 parole Registro Dati (DR) 1001011001010010 h = 16 bit 16 x 2 12 bit = 2 16 bit = 65536 bit = 2 3 x 2 10 x 2 3 bit = 8 K Byte 28

La mini-cpu PC CIR A B ALU Unità di Controllo DR AR 29

Formato delle istruzioni della mini-cpu Il codice operativo (obbligatorio) è di 4 bit Il campo operandi è di 12 bit Contiene un solo operando (un solo valore) È facoltativo: non tutte le istruzioni lo richiedono Può contenere direttamente un valore da elaborare (una costante) o l indirizzo di una cella della RAM che contiene il valore da elaborare (un riferimento a una variabile) FORMATO ISTRUZIONE: Operando Cod. operativo 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 1 30

Fasi del ciclo di CPU (preleva-esegui) Prelievo (o Fetch): PC contiene l indirizzo della prossima istruzione acquisizione prossima istruzione da memoria (con un ciclo di bus) (che viene scritta nel CIR, Registro Istr. Corrente) incremento del registro PC Decodifica: interpretazione del codice operativo (Unità di Controllo) Esecuzione: attivazione dell'esecuzione pertinente all istruzione: a) Operazioni di accesso alla RAM (load o store dei valori in A e B) b) Operazioni della ALU sugli operandi contenuti in A e B c) Operazioni di salto (modifica del flusso di esecuzione modificando PC) d) Input o Output di dati da/verso i terminali e) Operazioni di modifica del contenuto dei registri (costanti in A o B) f) 31

a b c d e f cod. bin. cod. simb. Semantica dell istruzione 0000 LOADA copia in A il valore contenuto nella RAM all indirizzo <op> 0001 LOADB copia in B il valore contenuto nella RAM all indirizzo <op> 0010 STOREA copia nella cella RAM di indir. <op> il valore che è in A 0011 STOREB pone nella cella RAM di indir. <op> il valore che è in B 0110 ADD la ALU calcola il valore di A + B e lo pone in A (non ha operando) 0111 DIF la ALU calcola il valore di A B e lo pone in A (non ha operando) 1010 JMP modifica PC (la prox istruz. da eseguire è quella all ind. <op>) 1011 JMPZ se A=0, modifica PC (la prox istr. da es. è quella di ind. <op>) 0100 READ (I/O) legge un valore e lo pone in RAM all ind. <op> 0101 WRITE (I/O) stampa il valore che è in RAM all indirizzo <op> 1000 LDCA pone in A la costante <op> (il valore numerico <op>) 1001 LDCB pone in B la costante <op> (il valore numerico <op>) 1100 HALT fine del programma (non ha operando) 1111 NOP istruzione nulla: nessun effetto [ha senso che esista] 32

Piccolo esempio di programma assembly indirizzo cod. simb. <op> 0 READ 8 1 READ 9 2 LOADA 8 3 LOADB 9 4 ADD - 5 STOREA 10 6 WRITE 10 7 HALT - 8 (un numero intero) 9 (un numero intero) 10 (un numero intero) Che cosa fa? Si noti che il primo valore letto si perde nel processore (sovrascritto per effetto della ADD) ma resta in memoria centrale (cella 8) 33

Un programma «più complesso» Esempio: calcolare l espressione (x + y) - (z + w) 1. Leggi da terminale e poni in RAM (rispettivamente nelle celle 16, 17, 18 e 19) i valori di x, y, z, e w 1. Per quattro volte: leggi un valore da terminale di input e copialo dal registro dati della periferica alle celle 16..19 2. esegui l addizione di z e w: 1. copia da cella 18 a registro A 2. copia da cella 19 a registro B 3. somma i due registri (operazione eseguita dalla ALU, che pone il risultato nel registro A) 3. Copia il risultato (che ora è nel registro A) in RAM (per metterlo al sicuro) nella cella di indirizzo 20 34

4. esegui l addizione di x e y: 1. copia da cella 16 a registro A; 2. copia da cella 17 a registro B; 3. somma i registri (operazione eseguita dalla ALU, che pone il risultato nel registro A); 5. esegui la sottrazione di (x + y) e (z + w): 1. copia da cella 20 a registro B (per recuperare il sottraendo, precedentemente calcolato al punto 2. ); 2. sottrai il contenuto dei due registri (operazione eseguita dalla ALU, che pone il risultato nel reg. A); 6. scrivi il risultato in output sul terminale: 1. copia da registro A a cella 20; 2. copia da cella 20 a registro dati della periferica (WRITE) 7. arresta l esecuzione del programma 35

Il programma in assembly 0-3: acquisizione dei dati 4-6: Somma Z+W 7: salvataggio in RAM del risultato intermedio 8-10: Somma X+Y 11: recupero del risultato intermedio 12-13: calcolo del risultato finale 14: output del risultato finale 16-20: spazio per contenere i dati 0 READ 16 1 READ 17 2 READ 18 3 READ 19 4 LOADA 18 5 LOADB 19 6 ADD 7 STOREA 20 8 LOADA 16 9 LOADB 17 10 ADD 11 LOADB 20 12 DIF 13 STOREA 20 14 WRITE 20 15 HALT 16...int... 17...int... 18...int... 19...int... 20...int... 36

Il programma in assembly 16-20: spazio per contenere i dati le cinque variabili simboliche X, Y, Z, W, RIS menzionate nel programma. Ognuna identifica una cella di memoria I nomi simbolici sono più comodi degli indirizzi, ma bisogna supporre che qualcuno (il compilatore!) gestisca la corrispondenza con un numero opportuno di celle allocate per rappresentare i dati 0 READ X 1 READ Y 2 READ Z 3 READ W 4 LOADA Z 5 LOADB W 6 ADD 7 STOREA RIS 8 LOADA X 9 LOADB Y 10 ADD 11 LOADB RIS 12 DIF 13 STOREA RIS 14 WRITE RIS 15 HALT X...int... Y...int... Z...int... W...int... RIS...int... 37

Il programma in linguaggio macchina indirizzi delle celle codici operativi operando significativo (indirizzo della cella RIS) operando non significativo 0. 0100000000010000 1. 0100000000010001 2. 0100000000010010 3. 0100000000010011 4. 0000000000010010 5. 0001000000010011 6. 0110000000000000 7. 0010000000010100 8. 0000000000010000 9. 0001000000010001 10. 0110000000000000 11. 0001000000010100 12. 0111000000000000 13. 0010000000010100 14. 0101000000010100 15. 1100000000000000 16.... 17.... 18.... 19.... 20....Valore di RIS... istruzioni dati 38

Come si regola il flusso di esecuzione? Il programma inizia sempre dalla prima istruzione, e prosegue fino a quando non incontra HALT Che cosa impedisce che i dati siano caricati al posto delle istruzioni? Che cosa succede se si tenta di "eseguire un dato"? È possibile che il programma si auto-modifichi, alterando le sue stesse istruzioni? Come? In un calcolatore reale, permettereste che questo accada? Come si può impedirlo? I calcolatori reali hanno meccanismi di protezione della memoria e utilizzano speciali convenzioni per memorizzare separatamente i dati e il codice 39

Il programma in C int main() { int x, y, z, w, ris; scanf("%d%d%d%d", &x, &y, &z, &w); ris = (x+y)-(z+w); printf("\n\n Il risultato e : %d", ris); return 0; } Notiamo che: il compilatore deve decidere quanto spazio allocare per le variabili (e dove allocarle prima o dopo le istruzioni?) La corrispondenza posizionale tra i %d e le variabili si traduce in un preciso ordine delle istruzioni READ in assembly 40

0 READ 18 x 1 READ 19 y 2 LDCA 0 3 STOREA 20 sp 4 LOADA 19 y 5 STOREA 21 ns 6 LOADA 20 sp 7 LOADB 18 x 8 ADD 9 STOREA 20 sp 10 LOADA 21 ns 11 LDCB 1 12 DIF 13 STOREA 21 ns 14 JMPZ 16 15 JMP 6 16 WRITE 20 sp 17 HALT 18...intero...(x)... 19...intero...(y)... 20...intero...(sp)... 21...intero...(ns)... Un altro esempio 0 READ 16 x 1 READ 17 y 2 LDCA 0 3 STOREA 18 sp 4 LOADA 18 sp 5 LOADB 16 x 6 ADD 7 STOREA 18 sp 8 LOADA 17 y 9 LDCB 1 10 DIF 11 STOREA 17 y 12 JMPZ 14 13 JMP 4 14 WRITE 18 sp 15 HALT 16...intero...( x )... 17...intero...( y )... 18...intero...(sp)... 0 READ x 1 READ y 2 LDCA 0 3 STOREA sp loop: LOADA sp 5 LOADB x 6 ADD 7 STOREA sp 8 LOADA y 9 LDCB 1 10 DIF 11 STOREA y 12 JMPZ end 13 JMP loop end: WRITE sp 15 HALT x...intero... y...intero... sp...intero... 41 [A] [B] [B] (vers. simbolica)

Prodotto di due interi positivi! 1 Leggi X 2 Leggi Y 3 SP = 0 4 NS = Y 5 SP = SP + X 6 NS = NS - 1 7 NS è uguale a 0? Se no: torna al passo 5 8 Scrivi SP [A] 1 Leggi X 2 Leggi Y 3 SP = 0 4 SP = SP + X 5 Y = Y - 1 6 Y è uguale a 0? Se no: torna al passo 4 7 Scrivi SP [B] 42