+ All Categories
Home > Documents > Architettura e funzionalità del calcolatore - Intranet...

Architettura e funzionalità del calcolatore - Intranet...

Date post: 21-Feb-2019
Category:
Upload: lexuyen
View: 224 times
Download: 0 times
Share this document with a friend
50
Fondamenti di informatica Prof. Lorenzo Mezzalira Fascicolo 2 1 / 50 FONDAMENTI DI INFORMATICA Prof. Lorenzo Mezzalira Appunti del corso di Fondamenti di informatica Fascicolo integrativo - 2 - Architettura e funzionalità del calcolatore Architettura tipica dei calcolatori Bus di sistema Memoria di lavoro Struttura interna di CPU Istruzioni macchina e loro esecuzione Linguaggio macchina ed esempi di programmi in Assembler
Transcript
Page 1: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

1 / 50

FONDAMENTI DI INFORMATICA Prof. Lorenzo Mezzalira

Appunti del corso di Fondamenti di informatica

Fascicolo integrativo - 2 -

Architettura e funzionalità del calcolatore

Architettura tipica dei calcolatori Bus di sistema Memoria di lavoro Struttura interna di CPU Istruzioni macchina e loro esecuzione Linguaggio macchina ed esempi di programmi in Assembler

Page 2: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

2 / 50

Esecutore calcolatore: requisiti funzionali

Che cosa deve “saper fare” un calcolatore per eseguire i programmi?

Ricordiamo che un programma rappresenta un algoritmo, cioè descrive la sequenza di operazioni

da compiere per risolvere un problema.

Le operazioni sono rappresentate da istruzioni che sono codificate con opportune sequenze di bit

contenuti nelle parole della memoria di lavoro.

Quindi le funzioni da svolgere e le unità funzionali di un calcolatore sono:

mantenere e rendere accessibili istruzioni e dati, compito dellamemoria di lavoro

Prelevare da memoria di lavoro, capire ed eseguire le istruzioni, compito dell’unità centrale di elaborazione, detta anche CPU - Central Processing Unit

interagire (scambiare informazioni) con il “mondo esterno” compito della CPU con l’esecuzione di istruzioni e programmi che gestiscono le interfacce di ingresso/uscita, dette anche I/O – Input/Output.

Architettura di Eckert - Mauchly - Von Neumann

L’architettura comunemente detta di 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.

Page 3: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

3 / 50

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

Page 4: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

4 / 50

FUNZIONALITÀ GENERALE DEL CALCOLATORE

Esecuzione dei programmi

La funzionalità tipica dei calcolatori consiste nell’eseguire i programmi che sono descrizioni di

algoritmi. L’esecuzione dei programmi consiste nell’esecuzione sequenziale, secondo un flusso di

esecuzione, di istruzioni macchina. In base al tipo di istruzione da eseguire il calcolatore, passo

dopo passo, acquisirà informazioni dal mondo esterno, eseguirà operazioni sui dati memorizzati

internamente, effettuerà variazioni del flusso di esecuzione rispetto alla normale sequenza ed

emetterà delle informazioni verso il mondo esterno. Questa esecuzione avviene con elevata

velocità, così da mascherare talvolta la sequenzialità e dare l’impressione dello svolgimento di più

attività contemporaneamente.

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 nell’esecuzione delle istruzioni procede normalmente secondo indirizzi sequenziali

crescenti nella memoria di lavoro, salvo quando esegue istruzioni di modifica del flusso di

controllo (istruzioni di salto o JUMP)

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.

Page 5: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

5 / 50

Bus di sistema Il BUS è il mezzo 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) per specificare il partner di ogni transazione

di informazione (istruzioni e dati) che rappresentano l’informazione di volta in volta trasferita

di controllo (comandi) che specificano modalità e temporizzazione delle transazioni. Ogni trasferimento di informazione 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 (significa: generazione del segnale) che eviti i possibili conflitti elettrici, che si verificherebbero qualora diversi dispositivi tentassero contemporaneamente di imporre livelli alti e bassi su uno stesso segnale. Nota - 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.

Page 6: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

6 / 50

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 ingresso/uscita (I/O) o un’unità di servizio, ad es. un timer. La direzione del trasferimento tra master e slave determina la classificazione nelle due seguenti 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 di lavoro 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 porta di ingresso (I/O read o IN)

Scrittura su porta d’uscita (I/O write o OUT) Sono inoltre previsti particolari cicli di gestione dei meccanismi di Interruzione e di DMA, sinteticamente presentati nel seguito.

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.

Page 7: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

7 / 50

+Vcc

U

GND

Conduttore Del BUS

+Vcc

U’

GND

Conduttore Del BUS

R

U

OE

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. I tipi di circuiti di pilotaggio che consideriamo sono: totem-pole, tree-state e open-collector. 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.

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.

Page 8: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

8 / 50

+Vcc

GND

ConduttoreDel

BUS

U

R

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.

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.

Tra i circuiti open-collector collegati ad uno stesso conduttore si realizza una funzione logica “cablata”:

Iin logica positiva si ottiene la funzione Wired-AND rispetto al livello dominato, che è quello alto. Infatti per avere segnale alto in uscita occorre che tutti i circuiti propongano un livello alto.

In logica negativa si ottiene la funzione Wired-OR rispetto al livello dominante, che è quello basso Infatti per avere un segnale basso in uscita 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.

Page 9: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

9 / 50

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

Page 10: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

10 / 50

Un esempio di semplice 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 Prevede i segnali DB7 .. DB0 – comandati da circuiti tri-state – 8 bit

Bus Indirizzi Prevede i segnali AB15 .. AB0 – comandati da circuiti tri-state – 16 bit Con 16 bit lo spazio di indirizzamento è di 64k (216 )

Bus di controllo – MMS8 ADMEM (ADdress for MEMory) – Tri-state – Attivo basso indica che l’indirizzo presente sui bit di indirizzo è indirizzo valido per accessi a memoria. Rimane attivo basso per tutto il ciclo di accesso alla memoria e poi torna a riposo a livello alto. ADPER (ADdress for PERipheral) – Tri-state – Attivo basso indica che l’indirizzo presente sui bit di indirizzo è indirizzo valido per accessi a periferica. Rimane attivo basso per tutto il ciclo di accesso alla periferica e poi torna a riposo a livello alto WRITE – Tri-state – Rimane attivo a livello basso per tutta la durata di un ciclo di scrittura scrittura, mentre rimane a riposo a livello alto e nei cicli di lettura DATEN (DAta Transfer ENable) – Tri-state – Attivo a livello 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 attesa (wait). Se la transazione avviene indirizzando un elemento veloce, che non richiede stati di wait, questo segnale rimane a riposo a livello alto. INTREQ (INTerrupt REQuest) – Open-collector – Attivo basso comandato dai moduli che vogliono inoltrare alla CPU una richiesta di interruzione INTACK (INTerrupt ACKnowledge) – Totem-pole – Attivo basso comandato dalla CPU quando accetta una richiesta di interruzione HOLDREQ (HOLD REQuest) – Open-collector – Attivo basso comandato dai moduli DMA Controller, che vogliono inoltrare alla CPU la richiesta di gestire trasferimenti con DMA con la CPU che si sospende dal ruolo di master. HOLDACK (HOLD ACKnowledge) – 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

Bus servizi - MMS8 RESET CLOCK

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

Page 11: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

11 / 50

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 e l’asse delle ordinate rappresenta i livelli dei segnali. La scala dei tempi è spesso molto dilatata (i centimetri possono corrispondere 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 possono assumere 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.

Page 12: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

12 / 50

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 WM = !ADMEM and !WRITE and !DATEN RM è il segnale Read Memory = lettura memoria RM = !ADMEM and WRITE and !DATEN

Page 13: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

13 / 50

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 tore

PORTA IN (RDP)

PORTA OUT (RDP)

WO

RI

CPU

PERIFERICA DI USCITA

PERIFERICA DI INGRESSO

BUS INDIRIZZI

BUS DATI

BUS CONTROLLO

WO è il segnale Write Output = scrittura su porta WO = !ADPER and !WRITE and !DATEN RI è il segnale Read Input = lettura da porta RI = !ADPER and WRITE and !DATEN

Page 14: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

14 / 50

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 I 4 bit più significativi (A15 .. A12) sono usati in questo esempio per selezionare un banco di 4K. Un banco di memoria viene attivato solo se la configurazione di questi bit corrisponde all’indirizzo del banco, così come è impostato tramite i 4 interruttori (microswitch). I 12 bit meno significativi dell’indirizzo (AB11 .. AB0) selezionano la cella di memoria voluta all’interno del banco di 4K CS – Chip Select attivo basso abilita la memoria E’ tipico dei circuiti di memoria essere dotati di un bit di comando, il Chip Select, che deve essere attivato (basso) quando si devono eseguire operazioni con quella memoria. Con il bit CS a livello alto la memoria rimane inattiva qualunque siano i valori degli altri bit di comando e di indirizzamento. 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. I segnali di comando Output Enable si trovano in genere nei circuiti di memoria e nei registri dotati di uscite con circuito di pilotaggio tri-state.

D7 . . D0 bit dei dati

Page 15: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

15 / 50

Memoria di lavoro La memoria di lavoro è un insieme ordinato di parole (o 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. Ogni parola di memoria è costituita da h elementi di memoria binari (ad es. h = 8, 16, 32, 64 bit). Una parola di memoria è come un registro. Tutte le parole di una memoria hanno lo stesso numero di bit. 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 pesato 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 La memoria di lavoro è l’unica memoria direttamente accessibile dalla CPU per leggere o scrivere singole informazioni. 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. Naturalmente la parte di memoria effettivamente presente avrà un numero di celle minore o uguale allo spazio indirizzabile. Gli indirizzi corrispondenti ad aree prive di memoria non producono alcuna funzionalità.

Page 16: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

16 / 50

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. Si noti che la proprietà di essere ad accesso casuale, in tutta l’area di indirizzamento, è una caratteristica fondamentale per consentire una elevata velocità di esecuzione dei programmi, che nel loro svolgimento comportano accessi a diverse informazioni (istruzioni e dati) collocati in posizioni non 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 RAM è in genere volatile. La memoria ROM è solo leggibile: le informazioni vengono scritte in modo “permanente” di solito dal costruttore, prima dell’installazione nel calcolatore. Anche la memoria ROM è ad accesso casuale. 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. Ma la volatilità NON è una caratteristica necessaria.

all’accensione il contenuto delle parole di memoria RAM è non significativo, cioè non ha alcuna correlazione col contenuto che aveva 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 per un accesso singolo è circa 1 milione di volte più lenta) ma ha in genere un numero di parole inferiore a quello della memoria di massa.

Page 17: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

17 / 50

Schema funzionale della memoria di lavoro (RAM) Evidenziato il caso di lettura della parola di indirizzo 577

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) I circuiti di decodifica ricevono in ingresso i 12 bit di indirizzo ed emettono in uscita i 4096 bit di attivazione delle singole celle. Naturalmente dei bit di uscita sarà attivato uno soltanto, cioè quello che corrisponde all’indirizzo rappresentato dai bit di indirizzamento. BUS Dati e parole di memoria di 8 bit Nello schema di esempio è 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)

Page 18: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

18 / 50

Una possibile partizione della memoria di lavoro

RAM Area per dati di sistema

RAM Area codice

RAM Area dati

ROM Area codice e tabelle

Sistema Operativo

RAM Area 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

ROM

RAM

Page 19: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

19 / 50

Struttura della CPU Per presentare la funzionalità tipica dei calcolatori programmabili, ed in particolare dell’unità centrale (CPU = Central Processing Unit) ricorriamo ad un esempio estremamente semplificato e ridotto agli aspetti fondamentali. Un semplificato esempio didattico si rende necessario perchè le CPU degli attuali calcolatori, anche dei più semplici microcontrollori, hanno complessità non compatibili con un insegnamento di Fondamenti di informatica. I meccanismi di base della funzionalità sono però gli stessi e quindi ben esemplificati. 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 un programma da eseguire 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. Questo significa che le CPU sono realizzate in modo che all’accensione, o dopo ogni reset, iniziano a leggere la prima istruzione da eseguire generando sempre un certo indirizzo che è tipico di ogni modello di CPU. Naturalmente nel progettare un sistema di calcolo si dovrà fare in modo che a tale indirizzo sia collocata la prima istruzione da eseguire. Questa sarà l’inizio del Sistema Operativo (S.O.), eventualmente molto semplice se si tratta di microcontrollori embedded, cioè inglobati in un dispositivo. L’inizio dei programmi applicativi è noto al Sistema Operativo. Nei sistemi che devono eseguire applicazioni scelte da un operatore (come per i Personal Computer) il S.O. acquisisce questo indirizzo da comandi dell’operatore, mentre nelle applicazioni autonome questo indirizzo è ricavato automaticamente. 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 è “distinto” da quello che contiene le istruzioni. In linguaggio macchina le variabili sono identificate in modo univoco dall’indirizzo della parola di memoria 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 è costituito dalla configurazione dei bit che rappresenta la codifica del valore della variabile. Il valore delle variabili sarà determinato ed utilizzato dall’esecuzione del programma (con operazioni di lettura e assegnamento). Poichè l’esecuzione è sequenziale, la CPU preleva da memoria di lavoro un’istruzione alla volta. A tal fine nella CPU è presente un registro contatore di programma 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.

Page 20: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

20 / 50

L’istruzione da eseguire, una volta prelevata dalla memoria con un’operazione di lettura, viene memorizzata all’interno della CPU 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 trasferimento interno e caricamento di dati nei registri.

Page 21: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

21 / 50

Struttura della CPU

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. Si noti che nello schema a blocchi dell’interno della CPU sono sottintesi i bit di comando di cui sono dotati tutti i registri, e speficamente: OE – Output Enable – bit che comanda l’emissione del contenuto del registro tramite i circuiti di uscita tri-state LD – Load – bit che comanda il caricamento del registro con il valore che si presenta ai suoi ingressi. Questi bit di comando sono attivati dall’unità di controllo con le sequenze e temporizzazioni necessarie per l’esecuzione delle istruzioni macchina.

Page 22: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

22 / 50

Componenti della CPU 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 che si affaccia sul bus dati tramite circuiti tri-state. La dimensione di questo registro è pari a quella del bus dati. (in genere 8, 16 o 32 bit) Unità di controllo: genera la sequenza di (micro)passi elementari necessari all’esecuzione di ogni specifica istruzione macchina. L’unità di controllo costituisce l’unità attiva che imprime l’evoluzione del funzionamento della CPU e dell’intero calcolatore. Svolge questa funzione generando i segnali di controllo che comandano i vari elementi interni della CPU e i segnali di controllo del bus. Ogni passo elementare per l’esecuzione delle istruzioni è composto da una serie di comandi elementari che possono essere esterni (segnali sul bus di controllo) o interni (segnali per l’ALU e per i trasferimenti tra registri). I comandi consistono nell’attivazione di appositi bit. Il livello attivo dei comandi può essere il livello alto o, più spesso, il livello basso. Ad es. la ricopiatura del contenuto di un registro in un altro registro è ottenuta attivando il comando Output Enable (OE) del primo registro e il comando Load (LD) del secondo registro. La sequenza di passi elementari che viene attivata ciclicamente dall’unità di controllo può essere schematizzata in tre fasi distinte: fase di fetch: Il registro Program Counter viene usato per fornire l’indirizzo di lettura che viene copiato nel registro indirizzi e quindi presentato nel bus indirizzi. L’acquisizione dalla memoria di lavoro dell’istruzione da eseguire è ottenuta presentando sui bit del bus di controllo i segnali che comandano la lettura da memoria. Il Program Counter viene incrementato, in modo che il suo contenuto sia l’indirizzo dell’istruzione seguente. L’informazione letta dalla memoria è l’istruzione che proviene dal bus dati, passa nel registro dati e infine viene caricata nel registro istruzione. fase di decodifica: in questa fase avviene “l’interpretazione” del codice operativo dell’istruzione contenuta nel registro istruzione fase di esecuzione: Questa fase si svolge in modo diverso per le diverse istruzioni macchina. A seconda del codice operativo, l’unità di controllo attiva la successione di passi elementari che effettuano le operazioni pertinenti all’istruzione in esecuzione Il ritmo temporale dei vari passi è imposto dal segnale di clock che è attivato da un oscillatore che impone un andamento periodico.

Page 23: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

23 / 50

Tensione

del segnale

Tempo

5 V

0 V

istanti di attivazioni dei passi elementari

CLOCK

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. E’ dotato di un comando di incremento che viene attivato dopo ogni lettura di istruzione (fetch), ma può anche ricevere e caricare 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 dell’istruzione destinazione del salto, che sarà quindi quella prelevata nella prossima fase di fetch. Registro puntatore alla pila (Stack Pointer): è un importante 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 quest’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

1. salvare il valore del Program Counter in cima alla pila (push). Il valore del PC è l’indirizzo dell’istruzione successiva a quella di chiamata, e quindi è l’istruzione da eseguire al termine dell’esecuzione del sottoprogramma (sarà usato come indirizzo di ritorno)

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

Page 24: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

24 / 50

Il ritorno da sottoprogramma comporta invece di 1. estrarre dalla cima della pila (pop) e forzare nel Program Counter l’indirizzo di ritorno

salvato nella pila al momento della chiamata 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:

campo codice operativo: una sequenza di bit che identifica univocamente il tipo di istruzione (codifica enumerativa)

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

Page 25: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

25 / 50

Registri di lavoro: sono dei registri di supporto alle operazioni da eseguire all’interno della CPU. La loro dimensione è generalmente quella del bus dati, ma può essere anche maggiore. In vari tipi di CPU troviamo registri di 8, 16 o 32 bit. Anche il numero di tali registri dipende dal tipo di CPU. I registri di lavoro sono identificati (in linguaggio Assembler) ognuno da un suo nome simbolico e referenziabili con codifica binaria enumerativa (in linguaggio macchina) direttamente dalle istruzioni in linguaggio macchina (o ASSEMBLER). Accumulatore (A): è il principale (e nel nostro esempio l’unico) 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. Circuiti per il calcolo degli indirizzi: necessario per consentire il calcolo dell’indirizzo dell’operando in presenza delle diverse modalità di indirizzamento. 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

Page 26: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

26 / 50

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 come verrà descritto nel seguito

Linguaggio macchina Ogni tipo di CPU ha un suo proprio linguaggio macchina che comprende un insieme di istruzioni (set di istruzioni) codificate in forma binaria e direttamente interpretabili ed eseguibili dalla CPU stessa. 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 consente di identificare il dato su cui opera l’istruzione, e generalmente rappresenta un indirizzo di memoria di lavoro in cui è contenuto il valore da utilizzare. Classi di istruzioni tipiche in linguaggio macchina:

istruzioni di trasferimento dati da e in memoria. Usate per leggere il valore di variabili o per assegnare loro un nuovo valore

istruzioni di trasferimento dati da e in periferica. Usate per acquisire informazioni dal mondo esterno tramite porte di ingresso o per emettere informazioni tramite porte d’uscita.

istruzioni aritmetico-logiche. Eseguono il calcolo di operazioni aritmetiche o logiche tra i valori predisposti come operandi.

istruzioni di modifica del flusso di esecuzione. Sono i salti (jump) a istruzioni non sequenziali e chiamate (call) di attivazione di sottoprogrammi.

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 ad 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 (linguaggio simbolico ASSEMBLER). Nell’esempio considereremo istruzioni di 16 bit in cui il codice operativo è di 4 bit e il campo operando è di 12 bit. Si noti che questa scelta consente di codificare 24 = 16 diverse istruzioni ed un campo di indirizzamento nella memoria di lavoro di 212 = 4096 parole per istruzioni e dati.

Page 27: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

27 / 50

cod. operativo operando Significato (semantica)

0000 (LDA) indirizzo operando mem(indirizzo) ACC lettura

0001 (STA) indirizzo operando ACC mem(indirizzo) scrittura

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

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

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 porta porta (indirizzo) ACC

0111 (OUT) indirizzo porta 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 indirizzo istruzione indirizzo istruzione indirizzo istruzione

istruzioni 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 specificata (indirizzata) da indirizzo porta (indirizzo): porta specificata (indirizzata) da indirizzo stack(Stack Pointer): parola di memoria dello stack indirizzata dallo Stack Pointer ACC: Accumulatore IX: Registro Indice

Page 28: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

28 / 50

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 video

2000 è l’indirizzo di ritorno a Sistema Operativo

Prodotto per somme ripetute

in linguaggio macchina (forma simbolica e indirizzi scritti in forma decimale )

Page 29: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

29 / 50

indirizzo di

memoria di 12 bit

contenuto della parola di memoria

parole di 16 bit

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

In questo esempio si suppone di avere: Parole di memoria da 16 bit. Memoria di lavoro da 4k parole (12 bit per specificare l’indirizzo)

Prodotto per somme ripetute in linguaggio macchina binario

Page 30: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

30 / 50

Passi elementari per l’esecuzione delle istruzioni fase di fetch (comune per tutte le istruzioni):

PC Registro Indirizzi

mem(Registro Indirizzi)Registro Dati – ciclo di lettura sul bus

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 – ciclo di lettura sul bus

Registro DatiAccumulatore fase di esecuzione di ADD:

Accumulatore Operando 1

Registro Istruzioneoperando Registro Indirizzi

mem(Registro Indirizzi) Registro Dati – ciclo di lettura sul bus

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) – ciclo di scrittura sul bus fase di esecuzione di STAI:

IX Registro indirizzi

Accumulatore Registro Dati

Registro Dati mem(Registro Indirizzi) – ciclo di scrittura sul bus

Page 31: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

31 / 50

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

Page 32: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

32 / 50

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

Page 33: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

33 / 50

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 – ciclo di lettura sul bus

4 - Registro Dati Operando 2

5 - somma Accumulatore

Page 34: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

34 / 50

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

Page 35: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

35 / 50

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) – ciclo di scrittura sul bus

Page 36: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

36 / 50

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) – ciclo di scrittura sul bus

Page 37: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

37 / 50

Istruzioni di chiamata e ritorno da sottoprogramma 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) // – ciclo di scrittura sul bus (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 // – ciclo di lettura sul bus (read mem)

3 – SP-1 SP

4 – Registro Dati PC

Ricordare che:

La possibilità di gestire un’area di memoria a pila (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 nella cima della pila (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 dalla pila (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 nella cima della pila (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 dalla cima della pila (top of stack) e forzare nel Program Counter l’indirizzo di ritorno salvato nella pila (stack) al momento della chiamata del sottoprogramma.

Page 38: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

38 / 50

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, rappresentata con 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.

Page 39: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

39 / 50

Insieme di istruzioni assembler della CPU del nostro esempio semplice

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

Page 40: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

40 / 50

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 // direttiva def. cost

PORTA_TASTIERA EQU 1 // direttiva def. cost

PORTA_VIDEO EQU 2 // direttiva def. cost

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 è una direttiva con la quale 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.

Page 41: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

41 / 50

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

Page 42: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

42 / 50

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 noti che dopo il punto e virgola (semicolon) il seguito della linea è considerato commento Si vuole calcolare la somma di N valori interi forniti dall’utente. Il numero di valori da acquisire (N) è fornito dall’utente. ;********************************************************

;Programma di calcolo della somma di N interi in ingresso

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

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 ?

Page 43: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

43 / 50

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

Page 44: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

44 / 50

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.

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

; esempio di programma di divisione tra interi positivi

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

;*** direttive di definizione di costanti

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

;*** inizio programma

START IN PORTA_TASTIERA ; acquisisce dividendo

STA N1

IN PORTA_TASTIERA ; acquisisce divisore

STA N2

JZ FINE ; se divisore =0 salta a fine

LDA ZERO

STA RIS ; inizializza risultato

LDA N1

STA RESTO

;********** ciclo di sottrazioni successive

CICLO LDA RESTO

SUB N2

JS SCRIVI ; se RESTO < 0 fine ciclo di sottrazioni

LDA RESTO

SUB N2 ; sottrazioni successive

STA RESTO

LDA RIS ; ad ogni sottrazione

ADD UNO ; incrementa di uno

STA RIS ; il risultato

JMP CICLO

;********** fine ciclo di sottrazioni

SCRIVI LDA RIS

OUT PORTA_VIDEO

LDA RESTO

OUT PORTA_VIDEO

FINE JMP EXIT ; torna al sistema operativo

; ***

; *** direttive di dichiarazione delle variabili

ZERO DW 0

UNO DW 1

N1 DW ?

N2 DW ?

RIS DW ?

RESTO DW ?

Page 45: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

45 / 50

MODALITÀ DI INDIRIZZAMENTO E FORMATO ISTRUZIONI MACCHINA Formato istruzione:

Codice Operativo Operando

indirizzo parola di memoria

Codice Operativo: m bit (2m 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 (2m 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.

indirizzamento diretto: il Campo Operando contiene l’indirizzo dell’operando stesso viene eseguito un accesso a memoria per accedere all’operando V= indirizzo di memoria, ad es. di una variabile in ASSEMBLER: etichetta Ad esempio:

LDA V ; il significato è mem(V)A indirizzamento indiretto: il Campo Operando contiene l’indirizzo di memoria di una parola che contiene l’indirizzo dell’operando occorrono due accessi a memoria per accedere all’operando P = indirizzo di memoria che contiene un puntatore (cioè indirizzo) all’operando in ASSEMBLER: @etichetta Ad esempio:

LDA @P ; il significato è mem(mem(P))A

Page 46: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

46 / 50

indirizzamento relativo a registro indice: il Campo Operando contiene un indirizzo di memoria che viene sommato al contenuto del registro indice IX per ottenere l’indirizzo dell’operando Questa modalità consente di indirizzare in modo parametrico una parola all’interno di una sequenza di parole di memoria contigue, cioè di un array. (Campo Operando = indirizzo base dell’array e valore di I = indice, cioè spiazzamento dall’inizio dell’array) V = indirizzo di memoria del primo elemento di una sequenza (array) in ASSEMBLER: etichetta(IX) Ad esempio:

LDA V(IX) ; il significato è mem(V+IX) A indirizzamento immediato: il Campo Operando contiene direttamente 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 ;il significato è N A

Page 47: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

47 / 50

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. ;*******************************************

; *** Acquisizione dei valori di elementi di un array

; *** Ricerca del massimo in un array di interi

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

; *** definizione delle costanti

EXIT EQU 2000

PORTA_TASTIERA EQU 1

PORTA_VIDEO EQU 2

ZERO EQU 0

UNO EQU 1

NMAX EQU 10

; *** Inizio del codice

START IN PORTA_TASTIERA ; acquisisce numero di elementi

STA N

JZ FINE ; se N = 0 nessun elemento da acquisire

; --- verifica che ci stiano nell’array

LDA #NMAX

SUB N

JS FINE ; se N > Nmax

LDA #ZERO

STA CONT

LDI CONT

; --- ciclo di acquisizione

ACQUISISCI LDA CONT

SUB N

JZ CALCOLA ; qui CONT = N – fine acquisizione

IN PORTA_TASTIERA ; acquisisce dato

STA DATI(I) ; inserisce in array posizione I

LDA CONT

ADD #UNO

STA CONT ; incrementa contatore e indice

LDI CONT

JMP ACQUISISCI

; --- prepara contatore e indice per la ricerca del max

CALCOLA LDA #ZERO

STA CONT

LDI CONT

LDA DATI(I)

STA MAX ; per ora assume il primo come max

LDA CONT

STA POSMAX

; --- ciclo di scansione dell’array per ricerca max

CICLO LDA CONT

Page 48: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

48 / 50

ADD #UNO

STA CONT

LDA CONT

SUB N

JZ SCRIVI ; qui valutati tutti gli N elem.

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

; --- fine ciclo ricerca max

SCRIVI LDA MAX ; stampa risultati

OUT PORTA_VIDEO ; scrive il valore max

LDA POSMAX

OUT PORTA_VIDEO ; scrive la posizione del max

FINE JMP EXIT ; torna a sistema operativo

; *** Dichiarazione delle variabili

N DW ? ; numero elementi presenti in array

CONT DW ? ; contatore di servizio per i cicli

MAX DW ? ; valore max trovato

POSMAX DW ? ; posizione di max nell’array

DATI DW ? ; array di interi

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

DW ?

Page 49: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

49 / 50

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

Page 50: Architettura e funzionalità del calcolatore - Intranet DEIBhome.deib.polimi.it/mezzalir/Informatica1/DOC/Lucidi/Disp2... · Fondamenti di informatica – Prof. Lorenzo Mezzalira

Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 2

50 / 50

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 ?


Recommended