FONDAMENTI DI INFORMATICA - Intranet...

92
Fondamenti di Informatica Corso di Laurea Prof. L Mezzalira 3 - Architettura e linguaggio del calcolatore - 1 FONDAMENTI DI INFORMATICA Prof. Lorenzo Mezzalira Appunti del corso 3 Architettura e linguaggio del calcolatore Indice 1. Funzioni logiche e circuiti logici 2. Circuiti di memoria 3. Unità funzionali del calcolatore 4. Memoria di lavoro 5. Interfacce di ingresso / uscita 6. Bus di sistema 7. Memoria di massa 8. Struttura della CPU 9. Linguaggio macchina e Assembler

Transcript of FONDAMENTI DI INFORMATICA - Intranet...

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 1

FONDAMENTI DI INFORMATICA Prof. Lorenzo Mezzalira

Appunti del corso

3

Architettura e linguaggio del calcolatore

Indice

1. Funzioni logiche e circuiti logici 2. Circuiti di memoria 3. Unità funzionali del calcolatore 4. Memoria di lavoro 5. Interfacce di ingresso / uscita 6. Bus di sistema 7. Memoria di massa 8. Struttura della CPU 9. Linguaggio macchina e Assembler

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 2

Funzioni logiche e circuiti logici Algebra di Boole

L’algebra di Boole definisce

costanti e variabili logiche con i due valori Vero e Falso (True False),

gli operatori logici And, Or e Not,

e fornisce le regole per comporre, con l’eventuale

uso di parentesi, le espressioni logiche il cui valore è Vero o Falso.

Le funzioni logiche sono importanti perchè

consentono di esprimere delle condizioni, dipendenti da valori logici, sul cui esito basare la

decisione di compiere o meno determinate operazioni.

Un aspetto importante è la possibilità di mappare

facilmente le funzioni logiche su circuiti

elettronici digitali (detti circuiti logici o reti logiche) in modo da rendere concreto e automatico il comportamento descritto dalle funzioni logiche. Le funzioni logiche quindi assumono un’importanza fondamentale

sia negli aspetti SW (programmazione)

sia negli aspetti HW (architettura) dei calcolatori.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 3

Funzioni logiche e circuiti logici Variabili logiche

I bit possono rappresentare i valori logici

vero (true) e falso (false)

con i livelli di segnale elettrico

H (high = 5V) e L (low = 0V)

Operatori logici

AND - prodotto logico *

OR - somma logica +

NOT - negazione !

Porte logiche (Gate) Sono dispositivi in grado di eseguire un’operazione logica tra le variabili in ingresso (segnali in) e produrre in uscita (segnale out) il risultato. Sono realizzate generalmente mediante circuiti elettronici.

Tabelle della verità Il risultato delle operazioni logiche, e quindi il comportamento delle porte logiche è in genere definito

descrivendolo mediante tabelle di verità cioè

tabelle che elencano tutte le combinazioni dei valori di ingresso (operandi) e per ognuna il corrispondente valore del risultato.

Si può dimostrare che con questi tre operatori sono esprimibili tutte le possibili funzioni logiche.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 4

Teorema di De Morgan Importante teorema dell’algebra booleana

A * B = !(!A + !B) E la forma duale

A + B = !(!A * !B)

Le equivalenze dettate dal teorema di De Morgan sono utili per effettuare eventuali semplificazioni nelle espressioni logiche, soprattutto quando si voglia passare da logica positiva a logica negativa.

Logica positiva – segnali “attivi alti” valore True associato al segnale H (es. +5 V)

Logica negativa – segnali “attivi bassi” valore True associato al segnale L (es. 0 V) Generalmente si adotta la logica positiva per i bit che rappresentano valori numerici, mentre per i bit che rappresentano valori o comandi logici si sceglie tra logica positiva o negativa in base ad altre considerazioni di progetto.

Si rifletta sulla rilevante differenza tra un comando attivo (ON) e a riposo (OFF) nelle condizioni:

default

senza alimentazione

in caso di guasto

sicurezza

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 5

PORTE LOGICHE Le porte logiche rappresentano circuiti che forniscono in uscita il risultato di operazioni logiche elementari sui valori delle variabili in ingresso.

Porta AND - Prodotto logico

Porta OR - Somma logica

Porta NOT - Complemento

Simbolo

A

B

U

Tabella della verità

A B U

0 0 0

0 1 0

1 0 0

1 1 1

Tabella della verità

A B U

0 0 0

0 1 1

1 0 1

1 1 1

Simbolo

A

B

U

Tabella della verità

A U

0 1 1 0

Simbolo

A U

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 6

FUNZIONI LOGICHE

Sono descrivibili con espressioni logiche Esempio S = A * !B + !A * B R = A * B

S vero se uno e uno solo di A e B è vero

R vero se entrambi A e B sono veri Le funzioni logiche sono realizzabili circuitalmente (HW) mediante opportune connessioni (reti) di porte logiche

Primo esempio di rete logica (Semisommatore) A

BS

R Si noti che la rete logica sopra rappresentata realizza la somma di

due numeri binari ciascuno da un bit, dove A e B sono le cifre da

sommare, S è la somma e R è il riporto.

Tabelle della verità congiunte

A B S R

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

A e B sono gli ingressi

S e R sono le uscite

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 7

Secondo esempio di rete logica combinatoria Tabella della verità (Sommatore completo)

A B RI S RO

0 0 0 0 0

0 0 1 1 0 A e B

0 1 0 1 0 sono le cifre degli addendi

0 1 1 0 1 RI.

1 0 0 1 0 è il riporto da cifra meno significativa

1 0 1 0 1 RO.

1 1 0 0 1 è il riporto verso cifra più significativa

1 1 1 1 1

S = A*!B*!RI + !A*B*!RI + !A*!B*RI + A*B*RI RO = A*B + A*RI + B*RI La rete realizza la somma

S delle due cifre binarie

(bit) A e B di peso 2i e il

riporto RO di peso 2i+1

in un numero di n bit, tenendo conto del riporto

RI generato dalla somma dei due bit di peso 2

i-1

Con n reti di questo tipo e collegando in cascata i

riporti uscenti RO con

quelli entranti RI, si possono dunque sommare due numeri di n bit.

A B

S

RI

RO

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 8

Esempio di circuito sommatore a 4 bit Composto da 4 sommatori completi in cascata Opera correttamente con codifica pesata o in cpl2

ADDENDO 1 ADDENDO 1 ADDENDO 2

FA3 FA2 FA1 FA0

Ai Bi

Fai

ROi RIi

Si

RISULTATO (Somma)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 9

CIRCUITI DI MEMORIA Il circuito elementare di memoria binaria è costituito

dal flip-flop (bistabile) che memorizza un bit.

I flip-flop (FF) mantengono il loro stato 0 o 1 fino a quando ne viene comandata la commutazione. Esistono vari tipi di FF con diverse modalità di comando della commutazione o della memorizzazione di un nuovo valore binario.

FF-SR - Set - Reset

S

R

QUA

B

FF-DT - Data - Trigger

D

T

QUA

B

a riposo A e B sono di valore 0 a riposo il valore presentato

dall’uscita U rimane memorizzato indefinitamente

un valore 1 di A porta a U = 1

un valore 1 di B porta a U = 0 Poi A e B devono tornare a riposo

a riposo B ha il valore 0

e qualunque sia il valore di A il

valore di U non cambia

quando B passa da 0 a 1 il

valore di A presente in quel momento viene memorizzato e

presentato su U Poi B deve tornare a riposo

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 10

REGISTRI Sono memorie che contengono una parola di N bit (in genere 8, 16, 32), ottenute affiancando N flip-flop di tipo FF-DT Esempio di registro di 8 bit. carica D7 D1 D2 D3 D4 D5 D6

Q7

D0

Q0 Q1 Q2 Q3 Q4 Q5 Q6

T T T T T T T T

Il segnale carica è collegato a tutti gli ingressi di

comando T degli 8 FF-DT. Si noti che il segnale “carica” è un esempio di bit utilizzato per

rappresentare un’informazione di tipo comando e non un’informazione

di tipo dato. D7 . . D0 sono gli 8 bit del dato da memorizzare

collegati ai rispettivi ingressi D.

Quando carica passa da 0 a 1 i valori degli 8 bit vengono memorizzati nel registro.

Q7 . . Q0 sono le uscite dei FF-DT e presentano i valori degli 8 bit del dato memorizzato.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 11

Esecuzione dei programmi Esemplificazione: esecuzione “manuale” di un programma

A: valore dopo la dichiarazione B: valore dopo l’inizializzazione C: valore dopo la 1ma iterazione del ciclo D: valore dopo la 2nda iterazione del ciclo E: valore dopo l’ultima iterazione del ciclo F: valore al termine del programma

Istruzioni: “in memoria” scritte e leggibili

Variabili: “in memoria” scrivibili e leggibili

Nella tabella è riportata la traccia di esecuzione con i valori assunti dalle variabili nei punti significativi A, B, .. F (si supponga che i dati in ingresso siano 7 e 3) Punti della traccia di esecuzione

istruzioni da eseguire

.....

int w, y, z;

int sp, ns;

// - A -

leggi w; leggi y;

sp=0;

ns=y;

// - B -

while (ns >0)

sp=sp+w;

ns=ns-1;

// C, D, E z=sp;

// - F -

scrivi z;

A B C D E F w ?? 7 7 7 7 7 y ?? 3 3 3 3 3 sp ?? 0 7 14 21 21 ns ?? 3 2 1 0 0 z ?? ?? ?? ?? ?? 21

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 12

Esecutore calcolatore:

requisiti funzionali

Che cosa deve “saper fare” un calcolatore

per eseguire i programmi?

mantenere e rendere accessibili istruzioni e dati

memoria di lavoro

Prelevare da memoria di lavoro, capire ed eseguire le istruzioni

unità centrale di elaborazione (CPU - Central Processing Unit)

interagire (scambiare informazioni) con il “mondo esterno”

interfacce di I/O

Architettura di Eckert - Mauchly - Von Neumann

Può essere considerato un modello tipico dell’architettura interna di un calcolatore. L’architettura che consideriamo è costituita da 3 blocchi funzionali

collegati tra loro tramite un BUS (insieme di collegamenti elettrici) che consente il trasferimento di informazioni tra i blocchi funzionali stessi.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 13

Schema dell’architettura

tipica di Calcolatore

UNITA’ DISCO

TASTIERA

VIDEO

MOUSE

STAMPANTE

UNITA’ PERIFERICHE

INTERFACCE

UNITA’

CENTRALE DI

ELABORAZIONE

CPU

MEMORIA DI LAVORO

RAM ROM

BUS INDIRIZZI

BUS DATI

BUS CONTROLLO BUS

OUTPUT OUTPUT

IN/OUT INPUT INPUT

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 14

FUNZIONALITÀ GENERALE DEL CALCOLATORE

Esecuzione dei programmi

per poter eseguire un programma è necessario che questo sia

caricato (in formato eseguibile) nella memoria di lavoro.

la CPU legge da memoria di lavoro, interpreta ed esegue le

istruzioni del programma operando sulle variabili (dati), anch’esse allocate nella memoria di lavoro. La CPU può essere considerata l’unità attiva del calcolatore.

la CPU per leggere ed eseguire le istruzioni gestisce,

controlla e temporizza il funzionamento delle altre unità (memoria di lavoro e interfacce) tramite i segnali del bus.

le istruzioni devono essere espresse in codice macchina, cioè nel formato direttamente interpretabile dalla CPU. Ogni istruzione in codice macchina è quindi rappresentata da una sequenza di 0 e 1 che la identifica in modo univoco.

le variabili devono essere accessibili alla CPU:

il riferimento ad una variabile è rappresentato da un indirizzo della memoria di lavoro.

Il valore della variabile è contenuto nella parola di memoria

associata all’indirizzo ed è rappresentato tramite una codifica

binaria opportuna, dipendente dal tipo di variabile.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 15

Bus di sistema - 1

Il BUS è il sistema di comunicazione che consente il

trasferimento delle informazioni dalla memoria di lavoro e dalle interfacce di I/O alla CPU e viceversa.

E’ costituito da un numero adeguato di conduttori che “trasportano” ognuno il segnale elettrico relativo ad un bit. I bit possono essere

di selezione (indirizzi)

di informazione (istruzioni e dati) o

di controllo (comandi). Ogni trasferimento costituisce una transazione,

normalmente basata su un singolo ciclo di bus.

Per ogni transazione sul bus esiste una e una sola

unità funzionale che gioca il ruolo di master (cioè controllore, solitamente la CPU), mentre le altre

unità sono nel ruolo di slave (elementi asserviti; tipicamente la memoria di lavoro e le interfacce verso le periferiche e il mondo esterno).

I conduttori del bus collegano in parallelo i vari elementi che possono “generare” il segnale corrispondente e/o “ricevere” tale segnale.

Per i segnali generabili da diversi dispositivi occorre un’appropriata gestione del pilotaggio che eviti i possibili conflitti elettrici, che si verificherebbero qualora diversi dispositivi tentassero contemporaneamente di imporre livelli alti e bassi su uno stesso segnale.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 16

Importanza della struttura a bus Una struttura a bus è molto regolare e quindi si presta a sfruttare le interessanti caratteristiche della

modularità, se si realizzano le varie unità funzionali come moduli fisici inseribili nei connettori del bus:

Riconfigurabilità

Estendibilità

Facilità di manutenzione

Lungo ciclo di vita degli elementi costituenti l’architettura

Per godere di questi vantaggi un bus deve essere

standardizzato, cioè corredato di specifiche chiare e complete sulle caratteristiche fisiche, sul comportamento temporale e sul significato dei vari segnali. Queste specifiche devono essere seguite dai costruttori dei moduli.

Sono stati proposti diversi bus di sistema per calcolatori, con diversi gradi di complessità e corrispondenti diversi livelli di prestazioni e diverse finalità.

Poiché la modularità completa ottimizza la riconfigurabilità

a scapito dell’economicità, spesso si adottano soluzioni di compromesso nella struttura fisica dei calcolatori, con l’adozione di piastre madre (motherboard) contenenti la porzione fissa dell’architettura del calcolatore e dotate di bus di espansione per i moduli fisici aggiuntivi, per i quali è importante la possibilità di riconfigurazione ed estensione.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 17

Principali tipi di cicli di bus

I trasferimenti di informazioni sul bus hanno come protagoniste l’unità funzionale che in quel momento gioca il ruolo di master e un’unità slave

Il master è in genere la CPU, ma occasionalmente può essere anche un controllore di DMA (Direct Memory Access).

L’unità slave può essere una memoria o un’interfaccia di I/O o un’unità di servizio, ad es. un timer.

La direzione del trasferimento tra master e slave determina la classificazione nelle due categorie di operazioni.

Ciclo di lettura: l’elemento slave è la sorgente dell’informazione e il master ne è la destinazione.

Ciclo di scrittura: il master è la sorgente dell’informazione destinata all’elemento slave.

Una seconda classificazione distingue i cicli di bus

riferiti alla memoria o ad un’interfaccia.

Quindi i cicli di trasferimento sono classificabili nei seguenti tipi:

Lettura da memoria (memory read)

Scrittura in memoria (memory write)

Lettura da I/O (I/O read o IN)

Scrittura in I/O (I/O write o OUT)

Sono inoltre previsti particolari cicli di gestione dei

meccanismi di Interruzione e di DMA, sinteticamente presentati nel seguito.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 18

Fasi di un ciclo di bus

Un ciclo di trasferimento si può generalmente scomporre nelle seguenti fasi.

Selezione del partner

Eventuale attesa (con unità lente)

Trasferimento dei dati

Conclusione (ritorno allo stato di riposo dei segnali)

Selezione In questa fase il master seleziona l’elemento

slave coinvolto dal trasferimento, precisando il

tipo di elemento (memoria o I/O) e la direzione (lettura o scrittura).

Eventuale attesa Questa fase viene eseguita solo se l’elemento

slave coinvolto è relativamente lento e quindi

richiede per il corretto trasferimento che venga concesso (con l’inserimento di stati di wait) un tempo di accesso maggiore di quello dei normali cicli del bus.

Trasferimento dei dati In questa fase l’informazione viene emessa

dalla sorgente e l’unità destinazione del trasferimento “cattura” (cioè memorizza localmente in un registro) tale informazione.

Conclusione In questa fase tutti i segnali sono ordinatamente

riportati nello stato di riposo.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 19

Tipi di circuiti di pilotaggio Poichè la maggior parte dei segnali di un bus devono poter essere comandati (pilotati) da diversi dispositivi, occorre prevedere diversi tipi di circuiti di pilotaggio dei segnali in uscita, adatti per i vari casi e

che consentono di evitare conflitti elettrici. Invece i morsetti di ingresso dei segnali presentano normalmente un basso assorbimento (cioè alta impedenza) e quindi il collegamento di più ingressi (fino ad un numero massimo specificato) ad uno stesso segnale del bus non pone problemi. +Vcc è la tensione di alimentazione dei circuiti integrati che generano i segnali logici (digitali). GND = Ground = massa è il potenziale a zero Volt dell’alimentazione, che fa da riferimento di zero per i segnali elettrici. Cortocircuito dell’alimentazione è il fenomeno che si verifica quando venga a formarsi un percorso a bassa impedenza tra +Vcc e GND. In caso di cortocircuito si ha un conflitto elettrico che da luogo a correnti elevate (più del valore nominale) rendendo non significativo il livello di tensione del segnale e danneggiando, anche definitivamente, i circuiti che generano il segnale.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 20

+Vcc

U

GND

Conduttore Del BUS

Tipi di circuiti di pilotaggio

Totem-pole Sono circuiti modellabili con un contatto a scambio, in grado di “forzare” (pilotare con bassa impedenza) o un livello alto o un livello basso.

Questi circuiti vanno usati solo per i segnali che sono sempre comandati da uno stesso unico circuito. Infatti se uno stesso segnale venisse comandato da più

circuiti di tipo totem-pole si verificherebbero conflitti elettrici nel caso di discordanza dei valori logici generati dai vari circuiti.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 21

+Vcc

U’

GND

Conduttore Del BUS

R

U

OE

Tipi di circuiti di pilotaggio

Tri-state

Sono circuiti modellabili con un contatto in grado di “forzare” (pilotare con bassa impedenza) o un livello alto o un livello basso, in serie con un contatto che quando è aperto consente di “lasciare libero” (alta impedenza – high-Z) il segnale.

Questi circuiti vanno usati per i segnali che possono essere comandati da

diversi circuiti durante intervalli di tempo diversi, cioè in mutua esclusione.

Talvolta per questi segnali è previsto un resistore collegato all’alimentazione (+Vcc), detto resistenza di pull-up +-------, che porta al livello alto il segnale nel caso che tutti i circuiti che lo pilotano siano nello stato di alta impedenza.

I circuiti con uscita tri-state prevedono anche un ingresso di

controllo, detto Output Enable (OE), che al livello di riposo forza lo stato di alta impedenza, mentre al livello attivo impone in uscita il livello logico (alto o basso) del circuito. In molti circuiti integrati disponibili in commercio il comando di OE è attivo basso. I circuiti di tipo tri-state, con i relativi comandi OE, si trovano tipicamente nei circuiti di memoria e delle porte di I/O, per pilotare i morsetti che producono i dati da immettere nel bus dati.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 22

+Vcc

GND

ConduttoreDel

BUS

U

R

Tipi di circuiti di pilotaggio

Open-collector Sono circuiti modellabili con un contatto chiuso a massa oppure aperto, in grado di “forzare” (pilotare con bassa impedenza) solo un livello basso oppure di “lasciare libero” (alta impedenza – high-Z) il segnale. Per questi segnali è previsto in generale un resistore collegato all’alimentazione (+Vcc), detto resistenza di pull-up, che porta al livello alto il segnale quando l’uscita è nello stato di alta impedenza.

Il livello basso è quindi “dominante” su quello alto, nel senso che quando si hanno due circuiti che pilotano una stessa linea del bus con pilotaggio open-collector, se uno propone un livello alto e l’altro impone un livello basso prevale quest’ultimo e sulla linea del bus si avrà un segnale logico a livello basso, senza conflitti elettrici.

Questi circuiti vanno usati per i segnali che possono essere

comandati da diversi circuiti,

anche contemporaneamente.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 23

Open-collector

Tra i circuiti open-collector collegati ad uno

stesso conduttore si realizza una funzione

logica “cablata”:

Wired-AND rispetto al livello dominato, che è

quello alto, in logica positiva. Per avere segnale alto occorre che tutti i circuiti propongano un livello alto.

Wired-OR rispetto al livello dominante, che è

quello basso, in logica negativa. Per avere un segnale basso basta che almeno uno dei circuiti proponga un livello basso.

Spesso si opera in logica negativa per effettuare la funzione OR tra più richieste concomitanti, come ad es. per i segnali di richiesta di interruzione alla CPU provenienti da diversi richiedenti, anche contemporaneamente.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 24

Le parti di un bus di sistema

L’insieme dei conduttori dei bus di sistema può essere scomposto in diversi sottoinsiemi ognuno dedicato a specifiche funzionalità.

Bus Dati I segnali sono destinati a rappresentare la codifica binaria delle informazioni (istruzioni o dati) da trasferire da una unità all’altra, e sono comandati dal dispositivo sorgente. Il contenuto può essere fornito dalla memoria o da una porta di ingresso (ciclo di lettura), oppure dalla CPU (ciclo di scrittura).

I conduttori sono 8, 16, 32 a seconda della “lunghezza di parola” del sistema.

Al termine del trasferimento, in caso di lettura, il contenuto del bus dati è memorizzato in un registro d’appoggio della CPU (registro dati). In caso di scrittura, la CPU utilizza il registro dati per presentare la configurazione sul bus, che verrà inserita nella parola di memoria o nella porta di uscita indirizzata.

Bus Indirizzi I segnali sono usati dal dispositivo master per rappresentare con codifica binaria pesata l’indirizzo che identifica il modulo slave e il suo registro interno (o la cella di memoria) interessato dal trasferimento. Si hanno bus con 10, 16, 20, 24, 32 bit di indirizzo, a seconda dell’estensione dell’area di indirizzamento prevista. Con k bit (conduttori) di indirizzo, le parole di memoria indirizzabili sono 2

k

L’indirizzo è in genere fornito dalla CPU che utilizza un suo registro interno d’appoggio (registro indirizzi) per presentare la configurazione sul bus.. In genere k = 12 . . 32.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 25

Bus di Controllo I segnali hanno lo scopo di qualificare il tipo di trasferimento (lettura o scrittura, memoria o I/O) e di

temporizzare la validità di indirizzi e dati e sono per lo più gestiti dal dispositivo master, ad eccezione dei segnali di richiesta (wait, interrupt, DMA) che sono gestiti dalle unità slave richiedenti. La CPU gestisce i segnali del bus di controllo mediante la sua unità di controllo.

I segnali del bus di controllo possono essere anche molto diversi tra i vari tipi di bus adottati per i diversi calcolatori, anche se le operazioni di trasferimento sono concettualmente le stesse.

Bus Servizi Sono segnali ausiliari come, ad esempio, di Reset e Clock di sistema.

Bus Alimentazioni Non si tratta di segnali ma di conduttori per la massa e le varie tensioni di alimentazione usate dai moduli del sistema. Spesso +5V, +12V, -5V e GND

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 26

Un esempio di bus – Il bus MMS-8 Progettato a metà anni ’70 per i microprocessori a 8 bit con i seguenti obiettivi:

semplice ed economico, ma adatto per i tipici processori a 8 bit

chiaro significato dei segnali per una standardizzazione

adatto anche per scopi didattici concettuali e/o applicativi sperimentali

Bus Dati

DB7 .. DB0 – Tri-state – 8 bit

Bus Indirizzi

AB15 .. AB0 – Tri-state – 16 bit = Spazio di indirizzamento 64k

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 27

Bus di controllo – MMS8

ADMEM – Tri-state – Attivo basso indica indirizzo valido per accessi a memoria.

ADPER – Tri-state – Attivo basso indica indirizzo valido per accessi a periferica.

WRITE – Tri-state – Basso indica scrittura, alto lettura

DATEN – Tri-state – Attivo basso indica l’intervallo di tempo destinato al trasferimento dei dati

NOTYET – Open-collector – Attivo basso comandato dai moduli slave che richiedono un prolungamento del ciclo di bus, con inserzione di stati di wait

INTREQ – Open-collector – Attivo basso comandato dai moduli che vogliono inoltrare richiesta di interruzione

INTACK – Totem-pole – Attivo basso comandato dalla CPU quando accetta una interruzione

HOLDREQ – Open-collector – Attivo basso comandato dai moduli DMA Controller, che vogliono inoltrare richiesta di gestire trasferimenti con DMA

HOLDACK – Totem-pole – Attivo basso comandato dalla CPU quando ha “rilasciato” (cioè posto in condizione tri-state) il controllo del bus accettando una richiesta da un controllore di DMA

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 28

Bus servizi - MMS8

RESET CLOCK

Bus alimentazioni – MMS8

+5V +12V -5V GND – Riferimento comune di massa a 0V

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 29

Forme d’onda di segnali di bus

Con il termine “forma d’onda” di segnali digitali si intende la descrizione grafica schematizzata dell’andamento temporale di tali segnali.

La descrizione è su un piano cartesiano con l’asse delle ascisse che rappresenta il tempo.

La scala dei tempi è spesso molto dilatata (i centimetri corrispondono a poche decine di nanosecondi) e le

commutazioni dei segnali sono rappresentate con segmenti non perfettamente verticali, ma con una leggera inclinazione, per evidenziare che le commutazioni non sono istantanee ma che richiedono un certo tempo (in genere pochi ns).

Per i segnali aggregati a rappresentare un’unica informazione (come quelli degli indirizzi o quelli dei dati) si indicano contemporaneamente i livelli alto e basso, per rappresentare il fatto che alcuni di essi assumono un livello e altri l’altro livello. I momenti di commutazione sono rappresentati con uno o più incroci ad X.

Nelle forme d’onda dei segnali digitali sono rappresentate

in modo significativo le correlazioni temporali tra le commutazioni e gli intervalli di stabilità dei vari segnali. Sono invece rappresentati in modo schematico e semplificato i livelli dei segnali.

Per i segnali analogici, invece, anche il livello del segnale è rappresentato con accuratezza nell’andamento temporale del suo valore.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 30

Esempi di forme d’onda di cicli di bus MMS-8

Scrittura in Memoria – Sorgente CPU

Dati validi

Indirizzo valido per accesso a memoria

Eventuale richiesta di wait

Dati da master

Indirizzo impostato dal master

T

AB0..AB15

ADMEM

ADPER

WRITE

DB0..DB7

DATEN

NOTYET

Operazione di scrittura

Accesso a memoria

R. dati

Unità

di

controllo R. indirizzi

Deco

difica

tore

PAROLA 0

PAROLA 1

PAROLA 2

PAROLA 3

WM RM

CPU

MEMORIA

BUS INDIRIZZI

BUS DATI

BUS CONTROLLO WM è il segnale Write Memory = scrittura memoria RM è il segnale Read Memory = lettura memoria

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 31

Lettura da periferica – Destinazione CPU

Dati validi

Indirizzo valido per accesso a periferica

Eventuale richiesta di wait

Indirizzo impostato dal master

T

AB0..AB15 ADMEM ADPER WRITE DB0..DB7 DATEN NOTYET

Dati da periferica

Operazione di lettura

Caricamento da bus dati a registro dati della CPU

Accesso a unità periferica

R. dati

Unità

di

controllo R. indirizzi

Deco

difica

torePORTA IN

(RDP)

PORTA OUT

(RDP)

WO

RI

CPU

PERIFERICA

DI USCITAPERIFERICA

DI INGRESSO

BUS INDIRIZZI

BUS DATI

BUS CONTROLLO

WO è il segnale Write Output = scrittura su porta RI è il segnale Read Input = lettura da porta

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 32

Esempio di banco di memoria di 4 Kbyte interfacciato sul bus

DATEN

WRITE

AB15 AB14 AB13 AB12

ADMEM

A11

- - - A0

Chip di Memoria da 4K Byte

AB11

AB0

CS

OE

WR

Timer

NOTYET

D7 - - - - - D0

DB7

DB0

OE OE

Comparatore

=

VCC

Selezione indirizzo di un modulo 1 = APERTO

A15 . . A0 bit di indirizzamento CS – Chip Select attivo basso abilita la memoria A livello alto la memoria rimane inattiva WR – Write attivo basso comanda la scrittura (memorizzazione) A livello alto viene comandata la lettura OE – Output Enable attivo basso attiva le uscite dei bit A livello alto le uscite sono ad alta impedenza D7 . . D0 bit dei dati

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 33

Memoria di lavoro - 1 è un insieme ordinato di parole (celle) che possono contenere

(memorizzare) informazioni, e cioè le istruzioni e i dati

La memoria di lavoro può essere pensata come una tabella

monodimensionale , nella quale gli elementi sono le parole di memoria

una parola di memoria è costituita da h elementi di memoria

binari (ad es. h = 8, 16, 32, 64 bit). E’ come un registro. Esempio di parola da 16 bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 1

la posizione di ogni parola nella memoria è identificata in

modo univoco da un numero intero positivo, detto indirizzo della parola di memoria, codificato in binario senza segno

per accedere ad una generica parola di memoria è necessario fornire all’unità di memoria l’indirizzo di tale parola (che la identifica in modo univoco) e attivare il comando di lettura o quello di scrittura. lettura – estrae una copia del contenuto della cella che rimane immutato

scrittura – inserisce nella cella un valore che sostituisce il precedente

se k è il numero di bit disponibili per specificare l’indirizzo,

allora 2k è l’area di memoria fisica indirizzabile.

Ad esempio, con 23 bit di indirizzo lo spazio di indirizzamento è di 8Mega parole.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 34

Memoria di lavoro - 2

la memoria di lavoro è detta ad accesso casuale, perché il meccanismo di indirizzamento di cui è dotata consente di accedere direttamente e con gli stessi tempi ad una qualsiasi parola, senza obbligare a procedere per indirizzi sequenziali.

la memoria di lavoro è, in generale, composta da due tipi di

memorie: la memoria RAM (Random Access Memory) la

memoria ROM (Read Only Memory).

le parole di memoria RAM sono modificabili, cioè leggibili e scrivibili. La memoria ROM è solo leggibile: le informazioni vengono scritte in modo “permanente” di solito dal costruttore, prima dell’installazione nel calcolatore.

Caratteristiche tecnologiche delle memorie di lavoro:

sono realizzate con circuiti integrati a semiconduttori (transistori)

la memoria RAM con le attuali tecnologie elettroniche è

volatile e quindi mantiene le informazioni solo quando è alimentata.

all’accensione il contenuto delle parole di memoria RAM è non

significativo, cioè non ha alcuna correlazione col contenuto al momento dello spegnimento

nella memoria ROM le informazioni sono permanentemente scritte e non modificabili (quindi non volatili)

i tempi di accesso alla singola parola di memoria sono dell’ordine delle decine o centinaia di nanosecondi

la memoria di lavoro è una memoria ad accesso veloce rispetto alla memoria di massa (che ha tempi di accesso dell’ordine delle decine di millisecondi e quindi circa 1 milione di volte più lenta) ma ha un numero di parole inferiore.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 35

Schema funzionale della

memoria di lavoro (RAM)

1 0 0 1 1 0 0 1

0 0 1 0 0 1 1 0

0 0 0 0 1 1 0 1

0 0 1 0 1 1 0 1

0 0 0 0 1 0 0 0

1 0 1 1 1 1 1 1

D e c o d i f i c a

Registro lettura / scrittura READ = 1

0 0 1 0 1 1 0 1

WRITE = 0

BUS Controllo

BUS Dati

BUS indirizzi

0

0

0

0

1

0

Indirizzo = 0010 0100 0001

0

1

2

3

577

4095

INPUT = 0 OUT = 0

Nell’esempio sopra riportatosi ha:

BUS Indirizzi di 12 bit (da 0 a 4095)

BUS Dati e parole di memoria di 8 bit

Nello schema è evidenziato il caso di lettura da memoria all’indirizzo 577 che in binario su 12 bit è 0010 0100 0001 (HEX 0241h) il cui contenuto letto è 0010 1101 (HEX 02Dh)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 36

Una possibile partizione

della memoria di lavoro

RAMArea per dati di sistema

RAM

Area codice

RAM

Area dati

ROMArea codice e tabelle

Sistema Operativo

RAMArea codice e dati

di Sistema

Area di

lavoro per i

programmi

applicativi

Area di

lavoro del

Sistema

Operativo

0000

INDIRIZZI

Area indirizzabile

Area indirizzabile

libera per

eventuali espansioni

di memoria

2K - 1

R

O

M

R

A

M

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 37

Problematiche di interfacciamento Il concetto di interfacciamento entra in gioco in tutti i casi in cui debbano interagire tra loro delle entità diverse. Le interazioni si manifestano con scambi di informazioni (dati e comandi).

I confini che individuano le entità interagenti possono essere assunti con larga arbitrarietà ed in

particolare dipendono dal livello di astrazione e

aggregazione con cui si considera il sistema. Infatti ciò che ad un alto livello di astrazione può essere considerato un sistema unico, a livelli di astrazione più bassi potrà essere scomposto in vari sottosistemi interagenti tra loro. Tra le entità interagenti esistono in generale delle

disomogeneità, il cui superamento, con opportune

“catene causa-effetto” di fenomeni, costituisce il

problema centrale dell'interfacciamento. I problemi di interfacciamento sono ovviamente tanto più articolati quanto più marcate sono le disomogeneità da superare. Concentriamo la nostra attenzione sull'interazione

tra calcolatori e mondo esterno vista ad un livello di astrazione relativamente elevato.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 38

Interfacciamento Ovviamente è essenziale, per l'utilità di un calcolatore, la possibilità che esso possa ricevere dal mondo esterno informazioni ed emettere verso di esso risultati e comandi in modo corretto e tempestivo.

Informazione

A

FENOMENO

CALCOLATORE

Catena di interfaccia

di acquisizioneImmagine

A’

Causa prima Effetto finale Input Acquisizione di informazioni

A = aspetto rilevante del fenomeno = informazione da acquisire

A’ = immagine di A

Output Emissione di comandi

B’ = immagine di B

B = aspetto del fenomeno = informazione emessa

Nel gergo informatico il calcolatore è considerato il punto di riferimento rispetto alla direzione dei flussi di informazioni; si parla quindi di ingressi ed uscite (I/O = Input / Output) rispetto al calcolatore, salvo che si stia considerando esplicitamente ed isolatamente un altro sottosistema.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 39

Interfacciamento Tutto ciò che non è direttamente governabile dall'unità centrale del calcolatore tramite i segnali del bus di sistema, viene in genere chiamato

"mondo esterno". Con questa definizione appartengono al mondo

esterno anche tutte le unità periferiche e le stesse

memorie di massa, indipendentemente dalla loro collocazione fisica eventualmente all'interno dello stesso contenitore del calcolatore. Queste unità periferiche sono infatti sede di fenomeni dotati di una propria dinamica indipendente dai ritmi interni di funzionamento della CPU. Tra il calcolatore (elettronico, digitale binario, programmabile) ed i sistemi del mondo esterno (che possono essere i più disparati, con fenomeni elettrici, meccanici, ottici, chimici, ecc.) esistono varie disomogeneità, più o meno accentuate a seconda dei casi. Si hanno in generale disomogeneità:

fisiche formali temporali spaziali attitudinali

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 40

Interfacciamento Un corretto interfacciamento di un calcolatore con il mondo esterno richiede che vengano superate queste disomogeneità, mediante l'impiego integrato delle tecniche circuitali (HW = hardware) e programmative (SW = software) di volta in volta più opportune. Come si è detto, queste disomogeneità vengono in

genere superate con catene di dispositivi

interagenti:

FENOMENO sensore - trasduttore - mezzo trasmissivo - trasduttore

CALCOLATORE Queste catene di trasferimenti e trasformazioni di informazioni attraversano diversi strati esterni ed interni al calcolatore (fig. seguente).

Fig. - Elementi dell’interfacciamento

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 41

Il progetto di un’interfaccia consiste quindi nell’individuazione di una catena di elementi che complessivamente soddisfano i requisiti globali di trasferimento e trasformazione delle

informazioni, preservando il contenuto

informativo rilevante attraverso tutte le trasformazioni intermedie.

Inoltre il modello di comunicazione delle informazioni tra i vari elementi dipende dal livello di astrazione a cui ci si pone, che a sua volta dipende da dove si collocano i problemi dominanti: così

un’astrazione Fisica ed Elettronica si focalizzerà sulle interazioni tra grandezze fisiche dei

fenomeni (trasformazioni operate da sensori e trasduttori),

un'astrazione Informatica si centra sul problema

del significato e della rappresentazione delle

informazioni, mentre

un'astrazione di Telecomunicazione si centra sul

problema del loro trasporto.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 42

Interfacciamento Analizziamo ora brevemente i vari tipi di disomogeneità sopra citati.

La disomogeneità FISICA si riferisce al fatto che le grandezze fisiche messe in gioco dai fenomeni del mondo esterno o non sono grandezze elettriche o non sono di valore compatibile con quelle dei circuiti di un calcolatore. Il superamento delle disomogeneità fisiche richiede

l’uso di sensori, trasduttori e attuatori che effettuano il trasferimento delle informazioni da un fenomeno ad un altro. Questi dispositivi, per alcuni tipi di fenomeni e grandezze fisiche, possono essere anche molto complessi.

Una disomogeneità FORMALE deriva dalle

caratteristiche del segnale usate per rappresentare le informazioni. Per esempio casi tipici sono costituiti dalle grandezze analogiche, oppure da codifiche digitali particolari (codici BCD, Gray, ecc.).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 43

Interfacciamento

Una disomogeneità TEMPORALE deriva dal fatto che i fenomeni del mondo esterno sono asincroni, evolvono cioè con una loro dinamica indipendente dai tempi di evoluzione dei programmi all'interno del calcolatore.

C'è quindi un problema di sincronizzazione affinchè le operazioni di acquisizione, elaborazione ed emissione di informazioni da parte del calcolatore avvengano in istanti opportuni rispetto all’evoluzione dei fenomeni esterni.

Si noti che la dinamica dei fenomeni dipende spesso da leggi fisiche o eventi casuali su cui non è facile intervenire, ed è quindi in generale il calcolatore a doversi adeguare ai tempi dei fenomeni esterni.

Vengono utilizzate per la sincronizzazione:

tecniche circuitali,

i tre meccanismi di base classici per sincronizzare l’esecuzione di programmi con eventi esterni: o controllo di programma (polling) o interruzione di programma (interrupt), o DMA (accesso diretto alla memoria)

meccanismi di sincronizzazione e temporizzazione dei processi SW di elaborazione interna al calcolatore (trattati nella seconda parte del corso - Sistemi Operativi).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 44

Interfacciamento disomogeneità TEMPORALE (seguito) Un altro aspetto di cui si deve tener conto è il comportamento di dispositivi nel tempo continuo (tipico dei fenomeni della fisica classica) che è diverso dai comportamenti nella funzionalità sequenziale (tipica dei sistemi digitali e in particolare dei calcolatori).

Il corretto superamento di queste disomogeneità

temporali costituisce uno dei problemi centrali della

cosiddetta elaborazione in tempo reale.

La disomogeneità SPAZIALE si riferisce alla collocazione del calcolatore e dei dispositivi con esso interagenti, che possono essere posti a distanze anche rilevanti.

Il superamento di questo aspetto viene realizzato

mediante opportune tecniche di trasmissione, in cui

gli aspetti di trasporto delle informazioni assumono un'influenza rilevante.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 45

Interfacciamento

La disomogeneità ATTITUDINALE si evidenzia

nell’interfacciamento tra elementi attivi, e tipicamente nell'interfacciamento con l'uomo, che ha caratteristiche di comprensione ed elaborazione delle informazioni molto diverse da quelle del calcolatore. I problemi di adattamento a queste diversità attitudinali sono risolti di solito con unità periferiche opportune, ("ergonomiche") e con opportuni algoritmi per la gestione di queste unità in modo "user friendly" (interattività uomo- macchina).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 46

Interfacce circuitali Le interfacce sono costituite dall'insieme di funzionalità HW e SW.

Spesso è necessario, o conveniente, centrare l'attenzione sugli aspetti circuitali, considerando quelli programmativi come se fossero un'estensione dei primi.

Interfacce circuitali elementari

Le interfacce elementari, dette generalmente porte, sono costituite da registri o da buffer accessibili dalla CPU mediante apposite istruzioni macchina di lettura (IN) o scrittura (OUT).

Questi registri sono simili a celle di memoria (e in alcuni calcolatori appartengono allo stesso spazio di indirizzamento, con l'approccio detto "memory mapped I/O") ma presentano, a differenza delle celle di memoria, la caratteristica di essere collegati con elementi del mondo esterno.

Informazioni associate a STATI Valori di grandezze fisiche (temperature, velocità, forze, ecc.) o informazioni che possono essere lette in ogni momento.

Informazioni associate ad EVENTI Informazioni che sono disponibili solo quando si verificano eventi (pressione di un tasto, ecc.)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 47

Acquisizione di informazioni associate a stati Informazioni permanenti

Per l'acquisizione di informazioni associate a stati,

le porte di ingresso sono costituite da "buffer" che, quando sono attivati dalla corrispondente operazione di lettura, immettono sul BUS DATI, in

modo trasparente, i valori binari presenti in quel

momento ai loro morsetti esterni. Con questo tipo di porte di ingresso l’acquisizione di informazioni è come una “fotografia” della configurazione di bit in quel momento, scattata dall’istruzione IN.

DATEN

WRITE

AB7 AB6 AB5 AB4

ADPER

AB3

AB0 Morsetti dal mondo esterno D7 - - - - - D0

DB7

DB0

OE

Comparatore

tra indirizzi e contatti di selezione

Se eguali uscita = 1

+5 V - VCC

Contatti di selezione indirizzo del modulo APERTO = 1 CHIUSO = 0

AB1 AB2

Buffer “trasparente” tri-state

BUS INDIRIZZI

BUS DATI

BUS di CONTROLLO

0 V - GND

Schema semplificato di porta di ingresso per informazioni di stato con buffer trasparente tri-state.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 48

Acquisizione di informazioni associate ad eventi Informazioni transienti

Quando si debbano invece acquisire informazioni

associate ad eventi, occorre utilizzare come porte

di ingresso dei registri (ad esempio di tipo "latch") che siano in grado di memorizzare il valore

associato all'evento quando esso accade, mantenendolo "congelato" fino a quando sarà letto dal processore.

E’ come una fotografia scattata dal verificarsi di un evento che produce dei dati e non dall’esecuzione dell’operazione di INPUT.

In questo caso occorrono anche bit ausiliari per la

gestione del rapporto di sincronizzazione: Produttore (mondo esterno) – Consumatore (calcolatore).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 49

Sincronizzazione dell’acquisizione Occorrono meccanismi ausiliari per consentire alla CPU di sapere se nella porta è contenuta un’informazione associata ad un nuovo evento. Questi meccanismi, nel caso più semplice si riducono ad un flip-flop tipo RS. Il verificarsi dell’evento agisce sul comando Set del FF, portandolo nello stato 1. La CPU quando trova FF = 1 legge la porta che contiene una nuova informazione e poi con il comando Reset riporta il FF = 0 per indicare che non ci sono informazioni nuove.

Il FF assume il significato di “nuovo dato pronto” Dopo l’acquisizione il contenuto della porta non viene generalmente cancellato, ma è considerato consumato (= usato).

In altri termini il FF così gestito funge da elemento di sincronizzazione tra l’acquisizione di dati e gli eventi esterni che li producono. Quando la CPU eseguirà l’operazione di INPUT riceverà, tramite il bus dati, il valore memorizzato a suo tempo e non la configurazione di bit presente in quel momento ai morsetti della porta.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 50

Acquisizione di dati associati ad eventi Porta di ingresso per informazione di evento con latch a memoria

DATEN

WRITE

AB7 AB6 AB5 AB4

ADPER

AB3

AB0 Morsetti dal mondo esterno D7 - - - - - D0

Latch

OE

DB7

DB0

Comparatore

tra indirizzi e contatti di selezione

Se eguali uscita = 1

+5 V - VCC

Contatti di selezione indirizzo del modulo APERTO = 1 CHIUSO = 0

AB1 AB2

Registro “latch” tri-state

BUS INDIRIZZI

BUS DATI

BUS di CONTROLLO

0 V - GND

R S

Q

Evento

Dato pronto

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 51

Porte di uscita

Le porte di uscita sono viste come celle di memoria a "sola scrittura" che rendono disponibile, su opportuni morsetti, il loro contenuto al mondo esterno. Queste porte devono essere sempre realizzate

mediante registri (o latch) in cui le informazioni vengono prelevate da bus dati e memorizzate nel registro all’interno del breve intervallo temporale corrispondente al ciclo di bus dell'operazione di scrittura. Il registro presenta all'esterno con continuità il suo contenuto (generalmente con pilotaggio totem-pole), che rimane immutato fino alla successiva operazione di scrittura su quella porta.

Se si tratta di informazioni di stato questo registro è sufficiente.

Per informazioni in uscita associate ad eventi occorrono ulteriori indicatori (FF) che consentano al calcolatore e ai dispositivi del mondo esterno di riconoscere le varie situazioni dell'evento, per la gestione del rapporto:

Produttore (calcolatore) – Consumatore (mondo esterno).

Un esempio di informazioni di uscita, del tipo ad eventi, è costituito dalle trasmissioni di caratteri

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 52

Funzionalità dei registri di stato e di

comando nelle interfacce complesse Per alcuni tipi di interfacce si hanno funzionalità più complesse, che non si riducono a semplici porte di ingresso e uscita.

Esempi di interfacce complesse sono USART per comunicazioni digitali seriali, interfacce verso memorie di massa come hard disk, circuiti di conteggio o di temporizzazione circuiti di acquisizione di misure analogiche Le funzioni di queste interfacce sono realizzate mediante una serie di circuiti, anche molto complessi e persino talvolta corredati di propri microcontrollori. Per consentire alla CPU di gestire il funzionamento di questi dispositivi sono in genere previsti, accanto alle porte dati di ingresso e dati di uscita, anche ulteriori registri di stato e di comando.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 53

Registri di stato Una o più porte di ingresso consentono alla CPU di acquisire vari bit dei registri di stato, che con il loro valore forniscono informazioni sullo stato dell’interfaccia e della periferica.

Esempi: spento/acceso – on-line/off-line – dato pronto/dato non pronto – ecc.

Registri di comando Una o più porte di uscita consentono alla CPU di scrivere negli appositi registri dell’interfaccia dei bit che con il loro valore producono dei comandi specifici (eventi) o impostano le modalità di funzionamento volute (stati).

Esempi:

Eventi:

azzera segnalazione di errore

lancia le operazioni di conversione Analogico/Digitale

carica il valore su un temporizzatore

ecc.

Stati:

imposta la velocità di trasmissione (baud rate)

abilita/disabilita la generazione di richieste di interruzione

imposta il numero della traccia su cui posizionare la testina magnetica del disco

ecc.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 54

Interfaccia circuitale generalizzata Nella fig. è rappresentata in forma molto schematica la struttura di un’interfaccia circuitale generale, cui possono ricondursi molti dispositivi di corredo per realizzare le funzioni di I/O dei calcolatori.

Fig. - Schema di interfaccia generalizzata.

CS = chip select abilita i trasferimenti sul bus. AD = address seleziona il registro interno interessato dal trasferimento. R/W = read / write determina la direzione del trasferimento.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 55

La memoria di massa -1

La memoria di massa utilizza generalmente un

supporto magnetico per la memorizzazione delle informazioni. L’informazione binaria (bit) viene memorizzata tramite i due stati di magnetizzazione. E’ quindi una

memoria permanente.

Le tipiche memorie di massa di un calcolatore sono i

dischi magnetici.

I dischi rigidi (hard disk) hanno tempi di accesso alle informazioni dell’ordine delle decine di millisecondi e le capacità dell’ordine dei Gigabyte e Terabyte.

Come supporto di memoria rimovibile, e quindi trasportabile, sono utilizzati dischi CD e DVD e le “chiavette” con memorie “flash”.

I dischi sono fisicamente suddivisi in tracce (corone

circolari) e settori (porzioni di traccia), e la lettura/scrittura fisica delle informazioni avviene posizionando la testina di lettura/scrittura sulla traccia e aspettando che con la rotazione si presenti il settore voluto, quindi con accesso sequenziale+ciclico. Accesso sequenziale con il movimento radiale della testina

per raggiungere la traccia indirizzata.

Accesso ciclico per attendere che la rotazione del disco porti sotto la testina il settore indirizzato.

Per motivi di efficienza, dopo l’accesso si trasferiscono in sequenza tutti i byte di un “blocco” costituito da un numero intero di settori contigui.

L’interfaccia di un disco (drive) è un dispositivo complesso che risolve i problemi di accesso fisico al disco.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 56

La memoria di massa -2

Le informazioni su disco sono logicamente

organizzate in file. Un file rappresenta l’unità logica di informazione su disco, è identificato mediante un nome e al suo interno contiene una sequenza di informazioni. Per poter utilizzare le informazioni su file, è necessario che queste vengano prima ricopiate nella memoria di lavoro.

Il Sistema Operativo fornisce le funzioni (File system) necessarie all’accesso ai file

I file possono contenere informazioni qualsiasi: documenti (file di testo), programmi in codice sorgente (file di testo), programmi in codice macchina (file binario eseguibile), immagini (ad esempio mappa di bit), suoni, ecc..

Altri tipi di memorie di massa

I nastri magnetici sono memorie di massa ad accesso

sequenziale con tempi di accesso più lunghi e capacità di memorizzazione superiori ai dischi, e di solito vengono utilizzati per memorizzare informazioni “storiche” o di back-up e comunque di uso molto poco frequente. Sono estraibili e quindi archiviabili.

I CD-ROM sono memorie di massa generalmente utilizzate a sola lettura. La memorizzazione delle informazioni, e la lettura, utilizzano i

principi di funzionamento dei dischi ottici.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 57

Struttura della CPU - 1 Consideriamo le caratteristiche di un programma in codice macchina che derivano dall’architettura tipica dei calcolatori, e in particolare dalla struttura della CPU presentata nelle pagine seguenti.

Relativamente alle istruzioni: Consideriamo il caso semplice in cui ogni istruzione in linguaggio macchina occupa una sola parola di memoria.

le istruzioni di ogni programma sono caricate in parole di memoria di lavoro contigue.

l’indirizzo della parola di memoria che contiene la prima

istruzione (del sistema operativo) da eseguire all’accensione è “noto” (cablato) alla CPU.

l’inizio dei programmi applicativi è noto al Sistema Operativo.

Relativamente alle variabili: Consideriamo il caso semplice in cui ogni variabile occupa una sola parola di memoria.

nel caricamento del programma da eseguire vengono riservate le parole di memoria di lavoro adeguate a contenere i valori delle variabili (dati).

lo spazio di memoria riservato per le variabili è “separato” da quello che contiene le istruzioni.

in linguaggio macchina le variabili sono identificate in modo univoco dall’indirizzo corrispondente.

il nome simbolico di una variabile (che appare nel programma sorgente) è ad uso umano, e può essere considerato

rappresentativo dell’indirizzo (che appare nel programma eseguibile) della parola di memoria riservata ad essa.

il contenuto della parola di memoria riservata ad una variabile

rappresenta la codifica del valore della variabile.

Il valore delle variabili sarà determinato dall’esecuzione del programma (con operazioni di lettura e assegnamento).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 58

Struttura della CPU - 2

Poichè l’esecuzione è sequenziale, la CPU preleva da memoria di lavoro un’istruzione alla volta. A tal fine nella CPU è presente

un registro PC (Program Counter) che viene man mano incrementato in modo da contenere l’indirizzo della parola di memoria in cui è presente la prossima istruzione da eseguire. L’istruzione da eseguire, una volta prelevata dalla memoria con

un’operazione di lettura, viene memorizzata nel registro

istruzione RI e decodificata (interpretata) dall’unità di controllo.

L’esecuzione di un’istruzione comporta l’esecuzione di un

insieme di “micro passi” elementari. Questi possono comportare la generazione di segnali del bus di controllo per l’accesso a memoria o a porta di I/O, e la generazione di segnali di controllo interni alla CPU per l’esecuzione di operazioni aritmetiche o logiche e per il caricamento di dati nei registri.

L’unità di controllo ha il compito di generare i segnali di controllo che comandano i vari elementi interni della CPU e i segnali di controllo del bus.

L’unità aritmetico-logica (ALU - Arithmetic Logic Unit) è l’elemento della CPU in grado di eseguire le operazioni logiche e aritmetiche tra operandi caricati in appositi registri.

La CPU è dotata di registri di lavoro che mantengono i valori degli operandi che devono essere utilizzati dall’ALU, e i risultati prodotti.

La CPU contiene anche un registro SP (Stack Pointer) che contiene l’indirizzo di cima della pila (top of stack). La pila (stack) è un’area di memoria gestita con modalità LIFO (Last In First Out)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 59

Struttura della CPU (1)

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

Le frecce indicano i possibili trasferimenti di informazioni La freccia tratteggiata indica i segnali di controllo per l’ALU,

mentre sono sottintesi i comandi dell’unità di controllo che abilitano i trasferimenti di informazioni tra i registri interni della CPU.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 60

Componenti della CPU (1)

Registro indirizzi: registro di appoggio tra la CPU e il bus indirizzi. La codifica binaria dell’indirizzo di memoria o della porta di I/O cui si accede viene caricata dalla CPU in questo registro. La sua dimensione (in numero di bit) è pari a quella del bus indirizzi.

Registro dati: registro bidirezionale di appoggio tra la CPU e il bus dati. In lettura da memoria o da porta di ingresso, il contenuto del bus dati viene memorizzato in questo registro, prima di essere trasferito internamente in un qualsiasi altro elemento della CPU. In scrittura, la codifica binaria da presentare sul bus dati viene caricata dalla CPU in questo registro. La sua dimensione è pari a quella del bus dati.

Registro contatore di programma (Program Counter - PC): registro che contiene l’indirizzo della prossima istruzione da eseguire. E’ collegato al registro indirizzi per la lettura da memoria di lavoro (fase di fetch) dell’istruzione da eseguire. Può ricevere valori da altri registri della CPU. La sua dimensione è pari a quella del bus indirizzi.

Il flusso di esecuzione di un programma in esecuzione è “scandito” dai valori assunti dal registro program counter PC. In caso di normale esecuzione in sequenza, il registro PC viene ogni volta incrementato di 1.

In caso di esecuzione di istruzioni di salto, nel registro PC viene “forzato” (scritto) l’indirizzo della istruzione destinazione del salto.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 61

Componenti della CPU (2)

Registro puntatore alla pila (Stack Pointer): registro

usato per contenere e gestire l’indirizzo corrente nell’ambito di

una porzione della memoria di lavoro, chiamata stack (pila). L’uso delle parole di memoria di questa area è gestito secondo la modalità LIFO (Last In First Out) e cioè l’ultima informazione che viene scritta è la prima disponibile per la lettura. E’ come se le informazioni fossero collocate una sopra l’altra, in una pila appunto, in cui è accessibile solo l’informazione in cima alla pila. Lo stack pointer contiene l’indirizzo della prima parola di memoria leggibile nello stack.

L’inserimento (push) di una informazione nello stack comporta:

incremento dello Stack Pointer

scrittura dell’informazione all’indirizzo di memoria contenuto nello Stack Pointer

L’estrazione (pop) di una informazione dallo stack comporta:

lettura dell’informazione indirizzata dallo Stack Pointer

decremento dello Stack Pointer

La possibilità di gestire un’area di memoria a stack, cioè con

modalità LIFO, è di importanza fondamentale per la chiamata di

sottoprogrammi e per il ritorno al programma chiamante. La chiamata di un sottoprogramma comporta infatti di

salvare il valore del Program Counter nello stack. Il valore del PC è

l’indirizzo dell’istruzione successiva (sarà usato come indirizzo di

ritorno) a quella di chiamata, e quindi è l’istruzione da eseguire al termine dell’esecuzione del sottoprogramma

forzare nel Program Counter l’indirizzo della prima istruzione del sottoprogramma da eseguire

Il ritorno da sottoprogramma comporta invece di

estrarre dallo stack e forzare nel Program Counter l’indirizzo di ritorno salvato nello stack al momento della chiamata

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 62

Componenti della CPU (3)

Registro Istruzione: contiene l’istruzione (in linguaggio macchina) correntemente in esecuzione. Il contenuto del Registro Istruzione viene caricato tramite il bus dati ad ogni lettura (fetch), dalla memoria di lavoro, di una nuova istruzione da eseguire. In linguaggio macchina, nel nostro esempio semplificato, il

formato di un’istruzione è costituito da 2 campi:

codice operativo: una sequenza di bit che identifica

univocamente il tipo di istruzione (codifica enumerativa)

operando: una sequenza di bit che contiene il riferimento

all’eventuale operando su cui l’istruzione agisce. L’operando di una istruzione può essere un dato, e allora il

riferimento è (generalmente) l’indirizzo della parola di memoria riservata per il dato. L’operando di una istruzione può essere anche un’altra istruzione (la prossima da eseguire con un salto “jump”), e allora il riferimento è l’indirizzo della parola di memoria che contiene quest’altra istruzione (alla quale saltare).

Il campo codice operativo del registro istruzione è presentato in ingresso all’unità di controllo che, in base alla configurazione dei bit di tale campo, interpreta ed esegue l’istruzione corrente, generando con opportune temporizzazioni i necessari segnali di controllo interni ed esterni alla CPU. Il campo operando (che è in generale un indirizzo) è collegato sia al registro indirizzi che al registro PC. La dimensione del registro istruzione è (nel nostro esempio) quella del bus dati.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 63

Componenti della CPU (4)

Registri di lavoro: sono dei registri di supporto alle operazioni da eseguire all’interno della CPU. La loro dimensione è quella del bus dati. Il numero di tali registri dipende dal tipo di CPU. Sono identificati (in linguaggio Assembler) da un nome simbolico e referenziabili con codifica binaria enumerativa (in linguaggio macchina) direttamente dalle istruzioni in linguaggio macchina (o ASSEMBLER).

Accumulatore (A): è il principale tra i registri di lavoro e, per convenzione, è quello in cui viene memorizzato il risultato di ogni operazione eseguita dall’unità aritmetico-logica.

Unità aritmetico-logica (ALU): esegue le operazioni aritmetiche e logiche elementari. Le operazioni eseguibili dipendono dalla complessità dell’ALU. Le operazioni fondamentali sono somma, sottrazione, AND, OR, NOT alle quali possono ricondursi operazioni più complesse quali, moltiplicazione, divisione, confronto, ecc.. L’unità aritmetico logica è a 2 operandi in ingresso e fornisce 1 risultato in uscita. I valori degli operandi sono presentati all’ALU tramite i registri di appoggio e il risultato viene memorizzato generalmente nell’accumulatore. I diversi tipi di operazioni vengono abilitati dall’unità di controllo tramite opportuni segnali. Sono previsti inoltre:

Registri di appoggio (non referenziabili dalle istruzioni in linguaggio macchina o ASSEMBLER): per l’unità aritmetico logica (operando1 e operando2): necessari per

presentare all’ALU gli operandi su cui eseguire l’operazione.

per il calcolo degli indirizzi: necessario per consentire il calcolo dell’indirizzo dell’operando in presenza delle diverse modalità di indirizzamento.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 64

Componenti della CPU (5)

Registro di stato: è un registro che raggruppa dei bit che hanno significato singolarmente per rappresentare delle condizioni. Ogni bit riporta indicazioni relative all’esito dell’operazione aritmetica o logica eseguita dall’ALU (viene quindi “scritto” dall’ALU al termine di ogni operazione eseguita). I bit di stato (flag) più significativi sono:

Carry: viene posto a 1 quando l’operazione aritmetica di somma (o sottrazione) tra due operandi genera riporto (o prestito)

Zero: viene posto a 1 quando il risultato dell’operazione eseguita dall’ALU vale zero (e quindi il contenuto dell’accumulatore è tutti zeri)

Segno: viene posto a 1 quando il risultato dell’operazione eseguita dall’ALU è negativo (il bit più significativo del risultato è 1)

Overflow: viene posto a 1 quando, dopo una somma o sottrazione tra interi in complemento a 2, il risultato è di segno discorde rispetto a quello concorde tra loro degli operandi (operandi di segno discorde non possono dare overflow). Questo indica che il valore numerico ottenuto non è rappresentabile con il numero di bit a disposizione.

I bit del registro di stato vengono interpretati

dall’unità di controllo nell’esecuzione di istruzioni di

salto condizionato.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 65

Componenti della CPU (6)

Unità di controllo: genera la sequenza di (micro)passi elementari necessari all’esecuzione di ogni specifica istruzione macchina. Ogni passo elementare è composto da una serie di comandi elementari che possono essere esterni (segnali sul bus di controllo) o interni (per l’ALU e per i trasferimenti tra registri).

La sequenza di passi elementari che viene attivata ciclicamente dall’unità di controllo può essere schematizzata in tre fasi distinte:

fase di fetch: Program Counter usato per fornire l’indirizzo di lettura acquisizione da memoria dell’istruzione da eseguire Program Counter incrementato, pronto per l’istruzione seguente

fase di decodifica: interpretazione del codice operativo dell’istruzione

fase di esecuzione: a seconda del codice operativo, l’unità di controllo attiva la fase di esecuzione pertinente all’istruzione in esecuzione

Il ritmo temporale dei vari passi è imposto dal segnale di clock.

Tensione

del segnale

Tempo

5 V

0 V

istanti di attivazioni dei passi elementari

CLOCK

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 66

Linguaggio macchina - 1

Ogni tipo di CPU ha un suo proprio linguaggio macchina (set di istruzioni) direttamente interpretabile ed eseguibile. Ogni programma, per poter essere eseguito da una CPU deve quindi essere disponibile (eventualmente tradotto)

nel linguaggio macchina specifico del tipo di CPU. Ogni istruzione in linguaggio macchina è rappresentata da bit e quindi è costituita da una sequenza di “0” e “1”. Ogni istruzione è costituita logicamente da due campi:

il campo codice operativo è costituito dalla configurazione

binaria che identifica univocamente il tipo di istruzione

il campo operando contiene la configurazione binaria che

rappresenta un indirizzo di memoria

Classi di istruzioni tipiche in linguaggio macchina:

1. istruzioni di trasferimento dati da e in memoria 2. istruzioni di trasferimento dati da e in periferica 3. istruzioni aritmetico-logiche 4. istruzioni di modifica del flusso di esecuzione (salti e call) 5. istruzioni ausiliarie Consideriamo un set di istruzioni molto semplificato e congruente con la struttura della CPU, della memoria e delle interfacce di I/O considerata fino a ora. In particolare sono drasticamente semplificate le operazioni di

ingresso e uscita che, con esempi più realistici, con la loro macchinosità renderebbero molto meno comprensibili gli aspetti di base che qui si vogliono presentare.

Per motivi di chiarezza, rappresenteremo il codice operativo di

ogni istruzione anche con una sigla mnemonica (ASSEMBLER).

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 67

Linguaggio macchina – 2 cod. operativo operando significato

0000 (LDA) indirizzo operando mem(indirizzo) ACC

0001 (STA) indirizzo operando ACC mem(indirizzo)

0010 (ADD) indirizzo operando ACC + mem(indirizzo) ACC

0011 (SUB) indirizzo operando ACC - mem(indirizzo) ACC

0100 (JMP) indirizzo istruzione istruzione di salto incondizionato

indirizzo PC (salta a indirizzo)

0101 (JZ) indirizzo istruzione istruzione di salto condizionato

se bit di stato zero =1

indirizzo PC

0110 (IN) indirizzo periferica porta (indirizzo) ACC

0111 (OUT) indirizzo periferica ACC porta(indirizzo)

1000 (CALL) indirizzo istruzione chiamata a sottoprogramma

PC stack(Stack Pointer) push

indirizzo PC

1001 (RET) ritorno da sottoprogramma

stack(Stack Pointer) PC pop

1010 (LDI) indirizzo operando mem(indirizzo) IX

(Jcond) 1011 (JC) 1100 (JS) 1101 (JO)

indirizzo istruzione istruzione di salto condizionato dove cond è uno dei bit di stato (C=carry, S=segno, O=overflow) se bit di stato cond =1

indirizzo PC

1110 (LDAI) 1111 (STAI)

mem(reg.indice) ACC

ACC mem(reg.indice)

mem(indirizzo): parola di memoria indirizzata da indirizzo porta (indirizzo): porta indirizzata da indirizzo stack(Stack Pointer): parola di memoria dello stack indirizzata dallo Stack Pointer ACC: Accumulatore IX: Registro Indice

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 68

Prodotto per somme ripetute in linguaggio macchina (forma simbolica)

indirizzo di memoria

descrizione simbolica del contenuto della parola di memoria

programma in C

129 ..................

130 IN 1 leggi w;

131 STA 153

132 IN 1 leggi y;

133 STA 154

134 LDA 151 sp = 0;

135 STA 156

136 LDA 154 ns = y;

137 STA 157

138 LDA 157 while (ns != 0)

139 JZ 147

140 LDA 156 sp = sp + w;

141 ADD 153

142 STA 156

143 LDA 157 ns = ns -1;

144 SUB 152

145 STA 157

146 JMP 138 147 LDA 156 z = sp;

148 STA 155

149 OUT 2 scrivi z;

150 JMP 2000 151 0000000000000000 const int zero=0;

152 0000000000000001 const int uno=1;

153 int w;

154 int y;

155 int z;

156 int sp;

157 int ns;

158 ...................

gli indirizzi in questo esempio sono rappresentati in decimale In questo esempio: 1 è l’indirizzo della porta di ingresso associata alla tastiera 2 è l’indirizzo della porta di uscita associata al terminale

2000 è l’indirizzo di ritorno a Sistema Operativo

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 69

In questo esempio si suppone di avere:

Prodotto per somme ripetute

in linguaggio macchina binario

indirizzo di memoria

contenuto della parola di memoria

000010000001 C.Op operando

000010000010 0110 000000000001

000010000011 0001 000010011001

000010000100 0110 000000000001

000010000101 0001 000010011010

000010000110 0000 000010010111

000010000111 0001 000010011100

000010001000 0000 000010011010

000010001001 0001 000010011101

000010001010 0000 000010011101

000010001011 0101 000010010011

000010001100 0000 000010011100

000010001101 0010 000010011001

000010001110 0001 000010011100

000010001111 0000 000010011101

000010010000 0011 000010011000

000010010001 0001 000010011101

000010010010 0100 000010001010

000010010011 0000 000010011100

000010010100 0001 000010011011

000010010101 0111 000000000010

000010010110 0100 011111010000

000010010111 0000 000000000000

000010011000 0000 000000000001

000010011001 xxxx xxxxxxxxxxxx

000010011010 xxxx xxxxxxxxxxxx

000010011011 xxxx xxxxxxxxxxxx

000010011100 xxxx xxxxxxxxxxxx

000010011101 xxxx xxxxxxxxxxxx

000010011110 .... .............

Parole di memoria da 16 bit. Memoria da 4k parole (12 bit per specificare l’indirizzo)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 70

Passi elementari per l’esecuzione

delle istruzioni

fase di fetch (comune per tutte le istruzioni): PC Registro Indirizzi

mem(Registro Indirizzi)Registro Dati

Registro DatiRegistro Istruzione

PC+1 PC

Esempi di fase di esecuzione per alcune istruzioni

fase di esecuzione di LDA: Registro Istruzioneoperando Registro Indirizzi

mem(Registro Indirizzi)Registro Dati

Registro DatiAccumulatore

fase di esecuzione di ADD: Accumulatore Operando 1

Registro Istruzioneoperando Registro Indirizzi

mem(Registro Indirizzi) Registro Dati

Registro Dati Operando 2

sommaAccumulatore

fase di esecuzione di JZ: se (bit di statozero= 1)

Registro Istruzioneoperando PC

fase di esecuzione di OUT: Registro Istruzioneoperando Registro Indirizzi

Accumulatore Registro Dati

Registro Dati porta(Registro Indirizzi)

fase di esecuzione di STAI: IX Registro indirizzi

Accumulatore Registro Dati

Registro Dati mem(Registro Indirizzi)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 71

FASE DI FETCH

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

MEMORIA DI LAVORO

1

222

3

4

*

1 - PC Registro Indirizzi

2 - mem(Registro Indirizzi) Registro Dati

3 - Registro Dati Registro Istruzione

4 - PC+1 PC

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 72

Fase di esecuzione di LDA

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

MEMORIA DI LAVORO

1

222

3

1 - Registro Istruzioneoperando Registro Indirizzi

2 - mem(Registro Indirizzi)Registro Dati

3 - Registro DatiAccumulatore

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 73

Fase di esecuzione di ADD

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

MEMORIA DI LAVORO

1

333

24

5

1 - Accumulatore Operando 1

2 - Registro Istruzioneoperando Registro Indirizzi

3 - mem(Registro Indirizzi) Registro Dati

4 - Registro Dati Operando 2

5 - somma Accumulatore

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 74

Fase di esecuzione di JZ

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO 1

2

1 - se (bit di statozero= 1)

2 - Registro Istruzioneoperando PC

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 75

Fase di esecuzione di OUT

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO

DI STATO

PROGRAM

COUNTER

c.op. operando

REG. ISTRUZIONE

REGISTRO

DATI

REGISTRO

INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’

LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

PORTA DI USCITA

1

333

2

1 - Registro Istruzioneoperando Registro Indirizzi

2 - Accumulatore Registro Dati

3 - Registro Dati porta(Registro Indirizzi)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 76

Fase di esecuzione di STAI

OPERANDO 1 OPERANDO 2

ACCUMULATORE

STACK POINTER

REGISTRO DI STATO

PROGRAM COUNTER

c.op. operando REG. ISTRUZIONE

REGISTRO DATI

REGISTRO INDIRIZZI

UNITA’

DI CONTROLLO

UNITA’ LOGICA - ARITMETICA

ALU

BUS DATI BUS CONTROLLO BUS INDIRIZZI

CPU

E REGISTRI

DI LAVORO

REGISTRO IX

MEMORIA DI LAVORO

1 2

3 3 3

1 - Registro Indice Registro Indirizzi

2 - Accumulatore Registro Dati

3 - Registro Dati mem(Registro Indirizzi)

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 77

Fase di esecuzione di CALL 1 – SP + 1 SP // PUSH PC

2 – SP registro indirizzi

3 – PC registro dati

4 – Registro Dati mem (Registro Indirizzi) // write mem

5 – Registro Istruzioneoperando PC // salto al sottoprogramma

Fase di esecuzione di RET 1 – SP registro indirizzi // POP PC

2 – mem (Registro Indirizzi) Registro Dati // read mem

3 – SP-1 SP

4 – Registro Dati PC

Ricordare che:

La possibilità di gestire un’area di memoria a stack, cioè con

modalità LIFO, è di importanza fondamentale per la chiamata di

sottoprogrammi anche annidati e per il ritorno al programma chiamante.

L’inserimento (push) di una informazione nello top of stack comporta:

incremento dello Stack Pointer

scrittura dell’informazione all’indirizzo di memoria contenuto nello Stack Pointer

L’estrazione (pop) di una informazione dallo stack comporta:

lettura dell’informazione indirizzata dallo Stack Pointer

decremento dello Stack Pointer

La chiamata di un sottoprogramma comporta infatti di

salvare il valore del Program Counter nello top of stack. Il valore del PC

è l’indirizzo dell’istruzione successiva (sarà usato come indirizzo di

ritorno) a quella di chiamata, e quindi è l’istruzione da eseguire al termine dell’esecuzione del sottoprogramma

forzare nel Program Counter l’indirizzo della prima istruzione del sottoprogramma da eseguire

Il ritorno da sottoprogramma comporta invece di

estrarre dallo top of stack e forzare nel Program Counter l’indirizzo di ritorno salvato nello stack al momento della chiamata

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 78

Linguaggio ASSEMBLER

E’ il linguaggio simbolico che consente di programmare un calcolatore utilizzando le istruzioni del linguaggio macchina. Per questo motivo viene detto linguaggio di programmazione di basso livello.

In ASSEMBLER:

ogni istruzione simbolica (sigle mnemoniche decise dal costruttore della CPU) corrisponde a una e una sola istruzione in linguaggio macchina (e viceversa)

gli indirizzi di memoria sono espressi in modo simbolico

utilizzando nomi (inventati dal programmatore) che costituiscono delle “etichette” (label) associate alle posizioni di memoria. Quindi le variabili e le istruzioni destinazione di salto sono contrassegnate da etichette e sono citabili tramite il loro nome simbolico

esistono delle direttive (sigle mnemoniche) che consentono di riservare lo spazio di memoria adeguato a contenere una variabile di un certo tipo

esistono delle direttive che consentono di definire dei nomi simbolici per la sostituzione letterale di (cioè designare) valori

costanti Un programma scritto in ASSEMBLER per poter essere eseguito deve

essere tradotto in linguaggio macchina binario, in modo tale da tradurre le sigle mnemoniche delle istruzioni nei corrispondenti codici operativi, sostituire tutti i riferimenti simbolici degli indirizzi (nomi di variabili, etichette) con la loro forma binaria, e riservare lo spazio di memoria per le variabili.

L’operazione di traduzione viene eseguita da un particolare programma, detto ASSEMBLATORE.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 79

Linguaggio Assembler

istruzione significato

LDA indirizzo mem(indirizzo) ACC

STA indirizzo ACC mem(indirizzo)

ADD indirizzo ACC + mem(indirizzo) ACC

SUB indirizzo ACC - mem(indirizzo) ACC

JMP indirizzo istruzione di salto incondizionato

indirizzo PC (salta a indirizzo)

JZ indirizzo istruzione di salto condizionato

se bit di stato zero =1

indirizzo PC

IN indirizzo porta (indirizzo) ACC

OUT indirizzo ACC porta(indirizzo)

CALL indirizzo chiamata a sottoprogramma

PC stack(Stack Pointer)

indirizzo PC

RET ritorno da sottoprogramma

stack(Stack Pointer) PC

LDI indirizzo mem(indirizzo) IX

Jcond indirizzo

JC indirizzo

JS indirizzo

JO indirizzo

istruzione di salto condizionato dove cond è uno dei bit di stato (C=carry, S=segno, O=overflow) se bit di stato cond =1

indirizzo PC

LDAI mem(reg.indice) ACC

STAI ACC mem(reg.indice

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 80

PRODOTTO PER SOMME RIPETUTE IN ASSEMBLER N.B. si fa l’ipotesi semplificativa, ma non realistica, che dalla porta TASTIERA vengano acquisiti valori in codifica complemento a 2.

programma in ASSEMBLER programma in C

label operaz. operando EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

IN PORTA_TASTIERA leggi w; STA W

IN PORTA_TASTIERA leggi y;

STA Y

LDA ZERO sp = 0;

STA SP

LDA Y ns = y;

STA NS

WHILE LDA NS while (ns != 0)

JZ ENDWHILE

LDA SP sp = sp + w; ADD W

STA SP

LDA NS ns = ns -1;

SUB UNO

STA NS

JMP WHILE ENDWHILE LDA SP z = sp;

STA Z

OUT PORTA_VIDEO scrivi z;

JMP EXIT ZERO DW 0 const int zero=0;

UNO DW 1 const int uno=1;

W DW ? int w;

Y DW ? int y;

Z DW ? int z;

SP DW ? int sp;

NS DW ? int ns;

label EQU valore label assume il ruolo di costante simbolica

label DW valore oppure label DW ? (DW = Define Word): direttiva all’assemblatore per riservare in quella posizione una

parola di memoria per la variabile di nome label eventualmente inizializzata a

valore

Le etichette (label) sono i nomi che il programmatore sceglie per le variabili (ma anche per le istruzioni) e costituiscono la forma simbolica che

rappresenta gli indirizzi.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 81

ESEMPIO 1- SOMMA N VALORI INTERI - SCHEMA A BLOCCHI Si vuole calcolare la somma di N valori interi forniti dall’utente. Il numero di valori da acquisire (N) è fornito dall’utente.

inizio

leggi VALORE

leggi N

SOMMA := 0

N = 0 ?no si

fine

CONT := 0

scrivi SOMMA

SOMMA := SOMMA + VALORE

CONT := CONT + 1

CONT = N ?

no

si

N n. di dati (addendi)

SOMMA - risultato

CONT - numero somme

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 82

ESEMPIO 1- SOMMA N VALORI INTERI - PROGRAMMA IN ASSEMBLER N.B. si fa l’ipotesi semplificativa, ma non realistica, che dalla porta TASTIERA vengano acquisiti valori in codifica complemento a 2. Si vuole calcolare la somma di N valori interi forniti dall’utente. Il numero di valori da acquisire (N) è fornito dall’utente.

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

START IN PORTA_TASTIERA ;acquis. valore

STA N ;assegna a var. N

JZ FINE ; se zero finisce

LDA ZERO

STA SOMMA ;inizializza

LDA ZERO ;le variabili

STA CONT

CICLO LDA CONT

SUB N ;confronta CONT con N

JZ VISUALIZZA ;se eguali va a visual.

IN PORTA_TASTIERA

STA VALORE ;acquis. nuovo valore

LDA SOMMA

ADD VALORE ;aggiunge a SOMMA

STA SOMMA

LDA CONT

ADD UNO ;incrementa CONT

STA CONT

JMP CICLO ;torna a ripetere ciclo

VISUALIZZA LDA SOMMA

OUT PORTA_VIDEO

FINE JMP EXIT ;torna a Sist. Operativo

;allocazione delle celle per le variabili

ZERO DW 0

UNO DW 1

N DW ?

CONT DW ?

SOMMA DW ?

VALORE DW ?

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 83

ESEMPIO 2- DIVISIONE TRA INTERI - SCHEMA A BLOCCHI

La divisione N1/N2 viene effettuata, con questo algoritmo, per sottrazioni

successive, con l’ipotesi N2 > 0 e N10. L’algoritmo calcola il risultato RIS e il resto RESTO della divisione intera.

inizio

fine

leggi N1

leggi N2

RIS := 0

scrivi RIS

scrivi RESTO

RESTO := N1

RESTO := RESTO - N2

RIS := RIS + 1

RESTO < N2 ? si

no

N2 > 0 ?

si

no

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 84

ESEMPIO 2- DIVISIONE TRA INTERI - PROGRAMMA IN ASSEMBLER N.B. si fa l’ipotesi semplificativa, ma non realistica, che dalla porta TASTIERA vengano acquisiti valori in codifica complemento a 2.

La divisione N1/N2 viene effettuata, con questo algoritmo, per sottrazioni

successive, con l’ipotesi N2 > 0 e N10. L’algoritmo calcola il risultato e il resto della divisione intera.

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

START IN PORTA_TASTIERA

STA N1

IN PORTA_TASTIERA

STA N2

JZ FINE

LDA ZERO

STA RIS

LDA N1

STA RESTO

CICLO LDA RESTO

SUB N2

JS SCRIVI

LDA RESTO

SUB N2

STA RESTO

LDA RIS

ADD UNO

STA RIS

JMP CICLO

SCRIVI LDA RIS

OUT PORTA_VIDEO

LDA RESTO

OUT PORTA_VIDEO

FINE JMP EXIT

ZERO DW 0

UNO DW 1

N1 DW ?

N2 DW ?

RIS DW ?

RESTO DW ?

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 85

MODALITÀ DI INDIRIZZAMENTO

E FORMATO ISTRUZIONI MACCHINA Formato istruzione:

Codice Operativo Operando

indirizzo parola di memoria

Codice Operativo: m bit (2

m istruzioni distinte)

Campo Operando: n bit (2n indirizzi distinti)

Il linguaggio macchina della maggior parte delle CPU, e quindi il corrispondente linguaggio ASSEMBLER, prevede

diverse modalità di indirizzamento (oltre a quello diretto) che rendono il set istruzioni più potente e consentono maggior flessibilità ed efficienza. La modalità di indirizzamento è un campo aggiuntivo nel formato istruzione e definisce il modo in cui deve essere utilizzato il valore presente nel Campo Operando per calcolare l’indirizzo dell’operando stesso.

FORMATO ISTRUZIONE:

Codice Operativo Mod. Indir. Operando

indirizzo parola di memoria

Codice Operativo: m bit (2

m istruzioni distinte)

Modalità di Indirizzamento: s bit (2s modalità distinte)

Campo Operando: n bit (2n indirizzi distinti)

Non tutte le istruzioni ASSEMBLER ammettono tutte le modalità di indirizzamento previste per la CPU.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 86

MODALITÀ DI INDIRIZZAMENTO (1)

INDIRIZZAMENTO DIRETTO:

il Campo Operando contiene l’indirizzo dell’operando stesso

un accesso a memoria per accedere all’operando V= indirizzo di memoria, ad es. di una variabile in ASSEMBLER: ETICHETTA Ad esempio:

LDA V significato mem(V)A

INDIRIZZAMENTO INDIRETTO:

il Campo Operando contiene l’indirizzo di memoria di una parola che contiene l’indirizzo dell’operando

due accessi a memoria per accedere all’operando P = indirizzo di memoria che contiene un puntatore in ASSEMBLER: @ETICHETTA Ad esempio:

LDA @P significato mem(mem(P))A

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 87

MODALITÀ DI INDIRIZZAMENTO (2)

INDIRIZZAMENTO RELATIVO A REGISTRO INDICE:

il Campo Operando contiene un indirizzo di memoria che viene sommato al contenuto del registro indice (I) per ottenere l’indirizzo dell’operando

Questa modalità consente di indirizzare in modo parametrico una sequenza di parole di memoria contigue (Campo Operando = indirizzo base e valore di I = spiazzamento) V = indirizzo di memoria, ad es. di una variabile in ASSEMBLER: ETICHETTA(I) Ad esempio:

LDA V(I) significato mem(V+I) A

INDIRIZZAMENTO IMMEDIATO:

il Campo Operando contiene il valore (che in questo caso è

una costante) dell’operando (il valore può essere espresso in modo esplicito oppure simbolico)

N = valore di una costante in ASSEMBLER: #ETICHETTA (o valore) Ad esempio:

LDA #N significato N A

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 88

ESEMPIO 3A- CALCOLO DEL MASSIMO IN UN ARRAY DI INTERI N.B. si fa l’ipotesi semplificativa, ma non realistica, che dalla porta TASTIERA vengano acquisiti valori in codifica complemento a 2.

Si vuole acquisire una sequenza di N ( Nmax) valori interi, memorizzarli in un array, e trovare il valore massimo e la sua posizione. Si ipotizzi che i

valori acquisiti siano 0.

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

ZERO EQU 0

UNO EQU 1

NMAX EQU 10

START IN PORTA_TASTIERA

STA N

JZ FINE ; se N = 0

LDA #NMAX

SUB N

JS FINE ; se N > Nmax

LDA #ZERO

STA CONT

LDI CONT

ACQUISISCI LDA CONT ; ciclo di acquisizione

SUB N

JZ CALCOLA ; qui CONT = N – fine acquisizione

IN PORTA_TASTIERA

STA DATI(I) ; inserisce in array posizione I

LDA CONT

ADD #UNO

STA CONT ; incrementa cintatore e indice

LDI CONT

JMP ACQUISISCI

CALCOLA LDA #ZERO

STA CONT

LDI CONT

LDA DATI(I)

STA MAX ; per ora assume il primo come max

LDA CONT

STA POSMAX

CICLO LDA CONT

ADD #UNO

STA CONT

LDA CONT

SUB N

JZ SCRIVI ; qui valutati tutti gli N elem.

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 89

LDI CONT

LDA DATI(I)

SUB MAX

JS CICLO ; ricicla

LDA DATI(I) ; qui trovato un nuovo max

STA MAX

LDA CONT

STA POSMAX

JMP CICLO

SCRIVI LDA MAX ; fine ricerca max – stampa ris.

OUT PORTA_VIDEO

LDA POSMAX

OUT PORTA_VIDEO

FINE JMP EXIT ; torna a sistema operativo

N DW ?

CONT DW ?

MAX DW ?

POSMAX DW ?

DATI DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 90

ESEMPIO 3B- CALCOLO DEL MASSIMO IN UN ARRAY DI INTERI Versione con chiamata a sottoprogramma per l’aggiornamento del massimo e della sua posizione.

;**********************************************

;dichiarazione di costanti simboliche

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

ZERO EQU 0

UNO EQU 1

NMAX EQU 10

;************************************************

;inizio programma

START IN PORTA_TASTIERA ;acquis. numero elementi

STA N

JZ FINE ; se zero finisce

LDA #NMAX

SUB N ;se maggiore delle dimens. array

JS FINE ;finisce

LDA #ZERO

STA CONT ;inizializza CONT

ACQUISISCI LDA CONT

SUB N ;se CONT=N

JZ CALCOLA ;esce dal ciclo di acquisiz.

IN PORTA_TASTIERA ;acquis. elemento

LDI CONT ;carica reg. indice

STA DATI(I) ;assegna elemento in array

LDA CONT

ADD #UNO

STA CONT ;incrementa CONT

JMP ACQUISISCI ;ricicla

CALCOLA LDA #ZERO

STA CONT ;ricomincia da inizio array

LDI CONT

CALL AGGIORNA

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 91

CICLO LDA CONT

ADD #UNO

STA CONT

SUB N

JZ SCRIVI ;se CONT=N esce dal ciclo

LDI CONT ;carica registro indice

LDA DATI(I) ;indirizz. Con reg. indice

SUB MAX

JS CICLO ;minore del max - ricicla

;qui trovato nuovo max

CALL AGGIORNA ;aggiorna max

JMP CICLO ;ricicla

SCRIVI LDA MAX

OUT PORTA_VIDEO

LDA POSMAX

OUT PORTA_VIDEO

FINE JMP EXIT ;FINE – torna a Sist. Operativo

;**********************************************************

;sottoprogramma di aggiornamento dei valori provvisori

; del max e della sua posizione

;**********************************************************

AGGIORNA LDA DATI(I) ;indirizz. Con reg. indice

STA MAX

LDA CONT

STA POSMAX

RET

***********************************************************

; Area delle variabili

N DW ?

CONT DW ?

MAX DW ?

POSMAX DW ?

DATI DW ? ;spazio per gli elementi dell’array

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

Fondamenti di Informatica – Corso di Laurea Prof. L Mezzalira

3 - Architettura e linguaggio del calcolatore - 92

Storia modifiche 27-09-11 – inserita pag 77 con CALL e RET – stampato lucido – non in rete

28-09.-11 – modifiche varie minori – generato PDF