informazioni sul corso (1/2) programma del corso · patterson, hennessy, struttura e progetto dei...

70
Architettura degli Elaboratori © 2007 F. Bergenti 1 © 2007 F. Bergenti Architettura degli Elaboratori 1 Architettura degli Elaboratori Ing. Federico Bergenti E-mail [email protected] Telefono 0521 90 6975 Web http://www.ce.unipr.it © 2007 F. Bergenti Architettura degli Elaboratori 2 Informazioni sul Corso (1/2) Modalità d’esame Prova scritta (teoria ed esercizi) Prova orale Le prove sono indipendenti Ricevimento E-mail per fissare un appuntamento Tentativamente, Lunedì (dopo lezione, ore 12.15/13.30) © 2007 F. Bergenti Architettura degli Elaboratori 3 Informazioni sul Corso (2/2) Trasparenze disponibili Su CampusNet http://www.ce.unipr.it Libri di testo consigliati Patterson, Hennessy, Struttura e Progetto dei Calcolatori, Zanichelli Stallings, Architettura e Organizzazione dei Calcolatori, Addison Wesley Bucci, Architettura e Organizzazione dei Calcolatori Elettronici – Fondamenti, McGraw-Hill Hyde, The Art of Assembly Language, http://webster.cs.ucr.edu/AoA © 2007 F. Bergenti Architettura degli Elaboratori 4 Programma del Corso Introduzione agli elaboratori Storia, macchine astratte, rappresentazione e codifica dell’informazione Livello logico Automi a stati finiti, reti combinatorie e sequenziali Livello assembly e micro-architettura Architettura di una CPU, assembly, memoria, I/O Approfondimenti sul livello assembly IA-32 Con esercizi di programmazione Approfondimento sui compilatori Analisi di un piccolo compilatore C-like (per IA-32) Approfondimento sulle micro-architetture Analisi di un semplice emulatore di micro-architettura

Upload: others

Post on 15-Feb-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Architettura degli Elaboratori

© 2007 F. Bergenti 1

© 2007 F. Bergenti Architettura degli Elaboratori 1

Architettura degli Elaboratori

Ing. Federico Bergenti

E-mail [email protected] 0521 90 6975Web http://www.ce.unipr.it

© 2007 F. Bergenti Architettura degli Elaboratori 2

Informazioni sul Corso (1/2)� Modalità d’esame� Prova scritta (teoria ed esercizi)� Prova orale� Le prove sono indipendenti� Ricevimento� E-mail per fissare un appuntamento� Tentativamente, Lunedì (dopo lezione, ore 12.15/13.30)

© 2007 F. Bergenti Architettura degli Elaboratori 3

Informazioni sul Corso (2/2)� Trasparenze disponibili� Su CampusNet� http://www.ce.unipr.it� Libri di testo consigliati� Patterson, Hennessy, Struttura e Progetto dei Calcolatori, Zanichelli� Stallings, Architettura e Organizzazione dei Calcolatori, Addison Wesley� Bucci, Architettura e Organizzazione dei Calcolatori Elettronici – Fondamenti, McGraw-Hill� Hyde, The Art of Assembly Language,http://webster.cs.ucr.edu/AoA

© 2007 F. Bergenti Architettura degli Elaboratori 4

Programma del Corso� Introduzione agli elaboratori� Storia, macchine astratte, rappresentazione e codifica dell’informazione� Livello logico� Automi a stati finiti, reti combinatorie e sequenziali� Livello assembly e micro-architettura� Architettura di una CPU, assembly, memoria, I/O� Approfondimenti sul livello assembly IA-32� Con esercizi di programmazione� Approfondimento sui compilatori� Analisi di un piccolo compilatore C-like (per IA-32)� Approfondimento sulle micro-architetture� Analisi di un semplice emulatore di micro-architettura

Architettura degli Elaboratori

© 2007 F. Bergenti 2

© 2007 F. Bergenti Architettura degli Elaboratori 5

Introduzione agli Elaboratori

“Nulla è più importante che vedere le sorgenti dell’invenzione che sono, a mio

avviso, degne di un interesse ancora maggiore di quello dovuto all’invenzione

stessa”G.W. Leibnitz

© 2007 F. Bergenti Architettura degli Elaboratori 6

Informatica ed Elaboratori

Informatica = Informazione + Automatica� Anche nota come� Computer science (paesi Anglosassoni)� Scienze dell’informazione (più correttamente)� Calcolatori� Strumento per la trasmissione, la trasformazione e la conservazione delle informazioni

© 2007 F. Bergenti Architettura degli Elaboratori 7

Problemi e Soluzioni (1/3)� Elaboratori� Supporto (teorico e pratico) per esprimere la soluzione di problemi� Nel vocabolario� “Un problema è una ricerca che bisogna eseguire con procedimenti scientifici” –Larousse� “Quesito che richiede la determinazione o la costruzione di uno o più enti che soddisfano a date condizioni fissate in precedenza” – Devoto

© 2007 F. Bergenti Architettura degli Elaboratori 8

Problemi e Soluzioni (2/3)� Gli elaboratori non risolvono i problemi� Esprimono una soluzione� Sono (rapidissimi e) precisi esecutori di ordini� Risolvere un problema richiede un esecutore� Stato iniziale, stato finale (risolto, non esiste

soluzione, ...)� Criterio di verifica� Attività del risolutore del problema èricercare una sequenza di ordini da far compiere ad un esecutore

Architettura degli Elaboratori

© 2007 F. Bergenti 3

© 2007 F. Bergenti Architettura degli Elaboratori 9

Problemi e Soluzioni (3/3)� Dati iniziali� Dati finali (o risultati) Sono il prodotto della soluzione Ottenuti dall’esecutore mediante azioni

Stato iniziale(dati)

Stato finale(risultati)

Risoluzionel’esecutore attua gli ordini che gli

vengono impartiti

Verifica

© 2007 F. Bergenti Architettura degli Elaboratori 10

Processo di Risoluzione� Processo di risoluzione Una sequenza di passaggi da uno stato iniziale, a stati successivi finché non si perviene ad uno stato finale che rappresenta una soluzione� Ricerca di una sequenza di azioni che

conduce Dalla conoscenza di informazioni iniziali Alla conoscenza di certe informazioni finali che soddisfino ad un criterio di verifica

© 2007 F. Bergenti Architettura degli Elaboratori 11

Istruzioni ed Esecuzione� La ricerca delle azioni è sostanzialmente diverso dall’esecuzione delle azioni che portano dai dati ai risultati

Azioni = Istruzioni + Esecutore� Il risolutore deve usare un linguaggio per comunicare le istruzioni all’esecutore Con lo scopo di fargli eseguire le corrispondenti

azioni

© 2007 F. Bergenti Architettura degli Elaboratori 12

Risoluzione di un Problema� Risolvere un problema significa Ricercare ed esprimere (in un linguaggio) un elenco di istruzioni che, una volta interpretate da un esecutore, conducono (partendo da alcune informazioni iniziali) a delle informazioni finali soddisfacenti un criterio di verifica� Uno stesso elenco di istruzioni può servire a

risolvere problemi diversi Parametri di una classe di problemi che vengono attualizzati in argomenti E.g., trovare la somma fra 314 e 512

Architettura degli Elaboratori

© 2007 F. Bergenti 4

© 2007 F. Bergenti Architettura degli Elaboratori 13

Risultato e Soluzione La soluzione è l’elenco delle istruzioni che, applicate ai dati iniziali, consentono di pervenire ai dati finali (risultati)

Procedimento risolutivo

EsecutoreDati iniziali Dati finali

Verifica

Risolutore

© 2007 F. Bergenti Architettura degli Elaboratori 14

Esecutore, Azioni, Processi Ogni esecutore viene definito dalle azioni atomicheche può compiere� Anche dette azioni elementari Processo� Azione composta da una sequenza di azioni elementari

(detti passi) Programma (o procedura)� Descrizione di un processo (utilizzando un linguaggio comprensibile all’esecutore senza ambiguità) Algoritmo� Procedura con certe caratteristiche (...vedi altri corsi...)

© 2007 F. Bergenti Architettura degli Elaboratori 15

Storia degli Elaboratori (1/7)

© 2007 F. Bergenti Architettura degli Elaboratori 16

Storia degli Elaboratori (2/7)

Architettura degli Elaboratori

© 2007 F. Bergenti 5

© 2007 F. Bergenti Architettura degli Elaboratori 17

Storia degli Elaboratori (3/7)

© 2007 F. Bergenti Architettura degli Elaboratori 18

Storia degli Elaboratori (4/7)

© 2007 F. Bergenti Architettura degli Elaboratori 19

Storia degli Elaboratori (5/7)

© 2007 F. Bergenti Architettura degli Elaboratori 20

Storia degli Elaboratori (6/7)

Architettura degli Elaboratori

© 2007 F. Bergenti 6

© 2007 F. Bergenti Architettura degli Elaboratori 21

Storia degli Elaboratori (7/7)

© 2007 F. Bergenti Architettura degli Elaboratori 22

Macchine Astratte (1/2)� In generale, un esecutore ha a disposizione Un organo di ingresso Un organo di uscita Una memoria (virtualmente illiminata) per memorizzare i risultati intermedi Una procedura risolutiva (di un problema)� L’esecutore prototipo è una persona dotata

di carta e penna La macchina di Turing nasce dall’osservazione del comportamento del matematico al lavoro

© 2007 F. Bergenti Architettura degli Elaboratori 23

Macchine Astratte (2/2)

Memoria dati

Organo di uscitaOrgano di ingresso Esecutore

Procedura risolutiva

Dati di uscita

Dati di ingresso

© 2007 F. Bergenti Architettura degli Elaboratori 24

Modello di Von Neumann (1/3)� La procedura risolutiva deve essere espressa in un linguaggio� La procedura risolutiva può essere scritta

in termini di numeri� La procedura risolutiva può essere memorizzata dove vengono memorizzati i risultati intermedi� Viene anche detta macchina a

programma memorizzato

Architettura degli Elaboratori

© 2007 F. Bergenti 7

© 2007 F. Bergenti Architettura degli Elaboratori 25

Modello di Von Neumann (2/3)

Memoria Dati e

Programmi

Organo di uscitaOrgano di ingresso Esecutore

Dati di uscita

Dati di ingresso

© 2007 F. Bergenti Architettura degli Elaboratori 26

Modello di Von Neumann (3/3)� La procedura risolutiva può essere ripetuta� Un numero illimitato di volte� Anche per dati d’ingresso diversi� Tutti i calcolatori moderni sono macchine di Von Neumann

Calcolatore ≠ Calcolatrice

© 2007 F. Bergenti Architettura degli Elaboratori 27

Hardware e Software� Hardware: oggetti fisici che compongono un calcolatore� Tipicamente elettronici� Tipicamente assemblati in un computer e in un

insieme di dispositivi periferici e di supporto� Software: insieme di procedure che guidano un calcolatore nell’attuazione delle proprie azioni elementari� Questo concetto si è profondamente evoluto da

fine anni ’60

© 2007 F. Bergenti Architettura degli Elaboratori 28

Alcuni Contributi Tecnologici

Architettura degli Elaboratori

© 2007 F. Bergenti 8

© 2007 F. Bergenti Architettura degli Elaboratori 29

Hardware e Reti

© 2007 F. Bergenti Architettura degli Elaboratori 30

Sistemi Operativi e Linguaggi

© 2007 F. Bergenti Architettura degli Elaboratori 31

Gerarchia di Macchine (1/2)� Un linguaggio

�è un insieme di frasi ben

formulate mediante simboli di un alfabeto

�� Un linguaggio

�è detto linguaggio di

programmazione di una macchina

�se

�è

un esecutore in grado di� Decidere se una frase è ben formulata� Eseguire le procedure (i programmi) scritti secondo la sintassi di

�Macchina

�programma scritto in

�dati

risultati

© 2007 F. Bergenti Architettura degli Elaboratori 32

Gerarchia di Macchine (2/2)� L’esecuzione di un programma scritto in linguaggio

� � � è affidato ad una catena (arbitrariamente lunga) di macchine astratte che si reggono su una macchina concreta

!� Ogni macchina è descritta completamente" Dal proprio linguaggio" Dalle proprie azioni

elementari

� #� $ � %� & ' � & ( � & )

Architettura degli Elaboratori

© 2007 F. Bergenti 9

© 2007 F. Bergenti Architettura degli Elaboratori 33

Interprete e Compilatore* Per realizzare una gerarchia di macchine, (ad ogni livello) abbiamo due possibilità+ Interprete, Esecuzione diretta degli ordini da parte della macchina

(gli ordini vengono trasformati in azioni)+ Compilatore, Traduzione ad un livello sottostante, Mediante un esecutore apposito (detto compilatore) che ha lo scopo di tradurre da un linguaggio - . ad un linguaggio

- ./ 0© 2007 F. Bergenti Architettura degli Elaboratori 34

Interprete (1/3)* Macchina che esegue azioni a fronte di un programma scritto in un linguaggio * Equivale a fornire una caratterizzazione del significato (semantica operazionale) del linguaggio* Lega inscindibilmente la semantica di un linguaggio ad un esecutore specifico* Almeno un livello di interpretazione èsempre necessario

© 2007 F. Bergenti Architettura degli Elaboratori 35

Interprete (2/3)* I linguaggi interpretabili direttamente dai calcolatori elettronici sono molto lontani dal modo di ragionare di un risolutore umano+ Linguaggi a basso livello (di astrazione)* È necessario disporre di linguaggi più simili al modo di ragionare dei risolutori umani+ Linguaggio ad alto livello (di astrazione)+ Il primo è stato il FORTRAN (FORmula

TRANslation)

© 2007 F. Bergenti Architettura degli Elaboratori 36

Interprete (3/3)1 Ogni macchina associata ad un linguaggio può essere descritta da una procedura che stabilisce la prossima istruzione da eseguire (e cosa eseguire)1 Un programma è costituito da un elenco di istruzioni, ciasuna delle quali appartenenti ad uno tra n possibili tipi di istruzioni I1, I2, ... ,In a cui corrispondono procedure da eseguire P1, P2, ... ,Pn

read un istruzione I

while I ≠termina doif I è di tipo I 1 then

esegui P 1

elseif I è di tipo I 2 then

esegui P 2

else...elseif I è di tipo I n then

esegui P n

read prossima Iend while

Architettura degli Elaboratori

© 2007 F. Bergenti 10

© 2007 F. Bergenti Architettura degli Elaboratori 37

Compilatore (1/2)2 Un modo alternativo all’interpretazione per realizzare la semantica di un linguaggio

3

è quello di descriverne la traduzione in un linguaggio

3 4

di semantica nota2 Tipicamente

3 4

è il linguaggio di una macchina ad un livello più profondo nella gerarchia2 Identifica due fasi5 Compile-time: fase dedicata alla traduzione dal

programma P in 6 al programma semanticamente equivalente P’ in 6 75 Run-time: fase di esecuzione di P’ da parte di una macchina che interpreta

6 7© 2007 F. Bergenti Architettura degli Elaboratori 38

Compilatore (2/2)8 E.g., i programmi FORTRAN 9 Non possono essere interpretati da un calcolatore (degli anni ’50)9 Possiamo scrivere un traduttore che accetta (come dati) un qualsiasi programma FORTRAN e produce (come risultati) un programma per la macchina equivalente (in questo caso

: ;)8 Oggi, i compilatori sono dei programmi

molto soffisticati e potenti9 Il risultato della traduzione è spesso migliore (da qualche punto di vista) di un equivalente programma scritto direttamente in

3 ;

© 2007 F. Bergenti Architettura degli Elaboratori 39

Interprete vs Compilatore2 Tipicamente5 Il compile-time non viene considerato nella valutazione delle prestazioni di un programma5 Il run-time di un programma compilato è molto inferiore a quello dell’equivalente interpretato< Almeno 10 volte (dato indicativo)2 I linguaggi di programmazione moderni sono troppo

complessi per essere interpretati5 L’interpretazione di una piccola parte di programma richiede tempo per capire se la frase è ben formulata2 Tipicamente, ci sono soluzioni intermedie5 Linguaggi di scripting5 Compilatori Just-in-Time

© 2007 F. Bergenti Architettura degli Elaboratori 40

Livelli di Astrazione (1/3)8 La gerarchia di macchine realizza una gerarchia di livelli d’astrazione9 Più propriamente livelli di sistema8 Ogni livello9 Descrive il sistema di calcolo nel suo complesso9 Fornisce un modello del sistema più vicino al

modo di pensare delle persone9 Nasconde molti dettagli necessari ma poco interessanti

Architettura degli Elaboratori

© 2007 F. Bergenti 11

© 2007 F. Bergenti Architettura degli Elaboratori 41

Livelli di Astrazione (2/3)= La macchina

> ?

è il calcolatore concreto (tipicamente elettronico)@ Interpreta gli ordini ed esegue azioni

(accende/spegne dei transistor)= Salendo nella gerarchia@ I dettagli dei livelli bassi vengono mascheratiA La memoria non è più limitata alla memoria centrale, ...@ Gli oggetti disponibili sono più complessiA Non solo numeri, anche vettori, matrici, testi, ...@ Le azioni elementari sono più complesseA Non solo aritmetica, anche manipolazione di testi, ...

© 2007 F. Bergenti Architettura degli Elaboratori 42

Livelli di Astrazione (3/3)B Al livello di astrazione più alto, la macchinaC Capisce un linguaggio più simile a quello dell’uomoC Compie azioni complesse sul proprio mondoC È solo debolmente limitata dalle risorse disponibiliC ...B Il progetto Intelligenza Artificiale è il tentativo di realizzare la macchina al più alto livello di astrazioneC Ormai praticamente abbandonato in quanto taleC Le idee che ha introdotto nel tentativo di raggiungere il

risultato sono al centro di molta ricerca avanzata

© 2007 F. Bergenti Architettura degli Elaboratori 43

Portabilità del Codice e Java

© 2007 F. Bergenti Architettura degli Elaboratori 44

Gerarchia Reale di Macchine

Macchina (Linguaggio) JavaJava Virtual MachineMacchina C(con sistema operativo)Macchina assemblyLinguaggio MacchinaMicroprogramma (Firmware)

Livello diastrazione

Virtualizzazione dell’hardware

Compilatore

Interprete + Compilatore

Compilatore

Compilatore

Interprete

Architettura degli Elaboratori

© 2007 F. Bergenti 12

© 2007 F. Bergenti Architettura degli Elaboratori 45

Rappresentazione dell’Informazione

“Seocndo uno stiduo di una UnivretisàInlegse l’oridne dlele letetre all’intreno di

una praola non è improtatne, ciò che improta è la pirma e l’utlima letetra”

Anonimo

© 2007 F. Bergenti Architettura degli Elaboratori 46

InformazioneD Alcune domandeE Cos’è l’informazione?E Come si misura l’informazione?E L’informazione dipende da chi la trasmette? E da chi la riceve?E ...D Per capire queste cose abbiamo bisogno diE Concretizzare l’informazione in un messaggioE Trasmettere il messaggio verso qualcuno (o qualcosa) che lo interpretiE Misurare l’informazione acquisita della ricezione del messaggio

© 2007 F. Bergenti Architettura degli Elaboratori 47

Alfabeto e Linguaggio (1/2)F Un insieme non vuoto e finito di simboli è un alfabetoG H

= { a, b, c, ..., z },

H= {

I,

J,

K,

L, ...,

M}, ...F Dato un alfabeto

N,

N* è l’insieme delle

sequenze finite generabili con i simboli di

NG Le sequenze vengo dette stringheG Non poniamo limite alla lunghezza delle stringheG La stringa vuota ε∈ H*F Un linguaggio O su un alfabeto

Nè un

sottoinsieme di N

*

© 2007 F. Bergenti Architettura degli Elaboratori 48

Alfabeto e Linguaggio (2/2)F Un linguaggio

Opuò essere definitoG In modo estensionale, cioè per enumerazione

dei suoi elementiP Sempre finito in questo casoG In modo intensionaleP Mediante una serie di regole d’appartenenza, che prendono il nome di grammaticaF Detta S∈ O

una stringa, è possibile definireG |S|, la lunghezza della stringaG Per ogni G∈ Q

, S RG, la stringa ottenuta dalla concatenazione di S e GP Anche se S∈ S e G∈ S, non è garantito che S TG∈ S

Architettura degli Elaboratori

© 2007 F. Bergenti 13

© 2007 F. Bergenti Architettura degli Elaboratori 49

Trasmissione dei SimboliU Trasmettitore (sorgente) di simboliV Rappresenta l’informazione che vuole inviare nei termini di una stringa di simboli da trasmettereU Ricevitore (destinazione) di simboliV Interpreta l’informazione partendo dalla stringa di simboli ricevuta

Canale trasmissivo (ideale o rumoroso)simbolo s simbolo s’

x = s x’ = s’

© 2007 F. Bergenti Architettura degli Elaboratori 50

Simboli e InformazioneW Le stringhe rappresentano l’informazioneX Danno concretezza ad un’astrazioneW Le stringhe possono essere codificate in forme diverseX Alfabeti diversiX Grammatiche diverse per il linguaggioX ...W In generale, esistono codifiche diverse per scopi diversiX MemorizzazioneX Elaborazione (manipolazione di stringhe)X ...

© 2007 F. Bergenti Architettura degli Elaboratori 51

Misura dell’Informazione (1/2)W L’informazione I(a) portata da un simbolo a∈ Yè

legata a P{x’=a}X Probabilità di ricevere il simbolo aW Vediamo due casi particolamente interessantiX P{x’=a} è grande (

Z1), l’informazione portata dal simbolo è

piccolaX P{x’=a} è piccola (

[0), l’informazione portata dal simbolo è

grandeW Per comodità, richiediamo che l’informazione associata ad un simbolo a sia una quantità positivaed additiva (definizione di Shannon)X I(a) = -log2 P{x’=a} (l’unità di misura è il bit)

© 2007 F. Bergenti Architettura degli Elaboratori 52

Misura dell’Informazione (2/2)W Misurare l’informazione consente diX Misurare la ridondanza di un messaggio\ Come posso ridurre la lunghezza della stringa trasmessa?X Misurare la perdita d’informazione nella trasmissione\ Quando veloce posso trasmettere accettando un certo errore?X Misurare la perdita di informazione nella codifica (o nella

transcodifica)\ Quale parte della stringa trasmessa posso tralasciare accettando un certo errore?X Studiare codifiche migliori per scopi diversiX ...

Architettura degli Elaboratori

© 2007 F. Bergenti 14

© 2007 F. Bergenti Architettura degli Elaboratori 53

Codifica Binaria (1/3)] Dato un alfabeto finito

^

, ogni stringa di

^

* può essere codificata in una stringa (tipicamente più lunga) di simboli presi da un alfabeto

_

di due soli simboli` Di solito,

a

= { 0, 1 }] In codifica binaria, i simboli vengono detti bit(binary digit)] Esempiob̀

= { a, b, c, d } ` a→00, b→01, c→10, d→11` S = abbccdd→S = 00010110101111

© 2007 F. Bergenti Architettura degli Elaboratori 54

Codifica Binaria (2/3)] In generale, da un alfabeto di m simboli èpossibile generare mn stringhe diverse di lunghezza n] Codifica binaria a lunghezza costanterichiede un numero di bit n pari a

2n = |

^

| n =

clog2|

^|

d] Quindi, detta S e una stringa ed S f la sua transcodifica binaria a lunghezza costante

|S f| =

clog2|

^|

d|S e|

© 2007 F. Bergenti Architettura degli Elaboratori 55

Codifica Binaria (3/3)g Quando si parla di lunghezza di stringhe binarie si usano i dei prefissig Approssimazioni con potenze di 2 di quelli usati comunemente in fisica, chimica, ...g Spesso si parla in termini di byte, blocchi di 8 bith Nibble (o nybble), 4 bit ≈1015250

P

Peta

≈1012240T

Tera

≈109230G

Giga

≈106220M

Mega

≈103210K

Kilo

© 2007 F. Bergenti Architettura degli Elaboratori 56

Rappresentazione dei Naturali (1/3)] L’insieme N dei numeri naturali è infinito` N = { 0, 1, 2, ... }` Altri corsi parlano di come si costruisce questo insieme] Serve una grammatica per rappresentare

ogni numero con una stringa di simboli` Una rappresentazione estensionale non basta] Civiltà diverse hanno adottato grammatiche diverse` Numeri romani` Oggi, in occidente, si utilizzano i numeri arabi

Architettura degli Elaboratori

© 2007 F. Bergenti 15

© 2007 F. Bergenti Architettura degli Elaboratori 57

Rappresentazione dei Naturali (2/3)i La rappresentazione dei naturali si basa sulla notazione posizionale

S = dn-1 dn-2 ... d1 d0

n =

j

idn-1 10ii In generale, scelta una base b > 1, una stringa dall’alfabeto

k

= { 0, 1, ..., b-1 } viene interpretata

n =

j

idn-1 bi

© 2007 F. Bergenti Architettura degli Elaboratori 58

Rappresentazione dei Naturali (3/3)l E.g., b=2m S=11001, n=25m n=19, S=10011l E.g., b=8m S=57, n=47m n=52, S=64l E.g., b=16 (usiamo delle lettere per completare l’alfabeto)m S=F5, n=245m n=19, S=13l Per evitare ambiguità, indichiamo la base nel pedice del numero: n=1910=1316=000100112

© 2007 F. Bergenti Architettura degli Elaboratori 59

Rappresentazione dei Reali (1/2)i L’insieme R è continuo e non può essere rappresentato tutton Alfabeto finiton Stringhe illimitate (ma non infinite)i Vari sottoinsiemi di R possono essere rappresentatin Numeri relativi (Z)o Estendiamo l’alfabeto con { +, - } e modifichiamo la

grammatican Numeri razionali (Q)o Estendiamo l’alfabeto con { . } e modifichiamo la grammatica

© 2007 F. Bergenti Architettura degli Elaboratori 60

Rappresentazione dei Reali (2/2)o E.g., b=2p S=-11001, n=-25p n=19.375, S=10011.011o E.g., b=8p S=-57, n=-47p n=52.25, S=64.2o E.g., b=16 (usiamo delle lettere per completare l’alfabeto)p S=-F5, n=-245p n=19.625, S=13.Ao Attenzione: questa notazione non è praticamente utile per realizzare un calcolatorep In realtà (come vedremo) se ne usano altre

Architettura degli Elaboratori

© 2007 F. Bergenti 16

© 2007 F. Bergenti Architettura degli Elaboratori 61

Codifica dei Testi (1/4)q Un testo è una sequenza di caratteriq Un carattere può essere r Una lettera r Un numeror Un simbolo speciale (punteggiatura, ...)q Codifichiamo il testo un carattere alla voltar Anche se una codifica per parole potrebbe essere utilizzata

© 2007 F. Bergenti Architettura degli Elaboratori 62

Codifica dei Testi (2/4)s La codifica ASCIIt American Standard Code for Information Interchanget Introdotta per definire uno standard per l’input/output da/verso terminalit Sviluppata negli USAs Comprende 127 caratterit 7 bit in codifica binariat L’ottavo bit è di verifica (parity bit)t Comprendeu Caratteri stampabiliu Caratteri di controllo (a

capo, torna indietro, ...)

© 2007 F. Bergenti Architettura degli Elaboratori 63

Codifica dei Testi (3/4)v ASCII è stato esteso utilizzando l’ottavo bit per caratteri non-USAw Lettere accentate, caratteri grafici, ...v Recentemente Unicode estende ASCIIw Un unico formato per tutte le linguew Formati a lunghezza fissa o variabile (in base al valore

dell’ottavo o del sedicesimo bit)w Vari UTF (Unicode Transformation Format)v Nella pratica programmativaw IETF (Internet Engineering Task Force) richiede UTF-8 (lunghezza variabile fino a 32 bit)w Java e Microsoft Windows (NT o superiore) usano UTF-16 (almeno 16 bit, lunghezza variabile)

© 2007 F. Bergenti Architettura degli Elaboratori 64

Codifica dei Testi (4/4)

Architettura degli Elaboratori

© 2007 F. Bergenti 17

© 2007 F. Bergenti Architettura degli Elaboratori 65

Rappresentazione dei Suonix Un suono è un fenomeno fisico continuoy Pressione dell’aria sulla membrana del microfonoy Tensione elettrica a valle del microfonox Per trattare un suono è spesso necessario

digitalizzarloy Campionamento, il suono viene misurato solo in alcuni istanti di tempoy Quantizzazione, il valore di ogni campione viene discretizzato e limitato in un intervallo

© 2007 F. Bergenti Architettura degli Elaboratori 66

Digitalizzazionez Due fonti di errore{ Errore di campionamento{ Errore di quantizzazionez Qualità della

digitalizzazione{ fc, frequenza di campionamento{ l, numero di livelli (di solito potenza di 2)

© 2007 F. Bergenti Architettura degli Elaboratori 67

Codifica dei Suonix Diversi valori forniscono diverse qualità di digitalizzazioney CD, fc=44.1 kHz, l=216 (16 bit), stereoy Telefono, fc=8 kHz, l=28 (8 bit), monox La qualità può essere sinteticamente misurata con la bit-rate b=fckn, con l=2k e nnumero di canaliy CD, q=172.2 Kbyte/sy Telefono, q=7.8 Kbyte/sx Per una canzone di 4 minuti in un CD servono circa 41.3 Mbyte

© 2007 F. Bergenti Architettura degli Elaboratori 68

Codifica delle Immaginix Le immagini vengono digitalizzate in pixel(picture elements)y Campionamento in base alla risoluzione r| Fotocamera economica: r=2272x1704 (≈4Mpixel)| Tipicamente in rapporto 4/3 o 16/9y Quantizzazione su 24 bit| 8 per ognuno dei 3 canali R (red), G (green) e B (blue)x Per una fotografia digitale servono circa 11 Mbyte

Architettura degli Elaboratori

© 2007 F. Bergenti 18

© 2007 F. Bergenti Architettura degli Elaboratori 69

Codifiche dei Video} Campionamento nello spazio e nel tempo~ Ogni fotogramma è codificato come un’immagine~ 24/30 fotogrammi al secondo per il cinema} La bit rate di un video di qualità (e.g.,

1280×720) a 24 fotogrammi al secondo ècirca b=63.2 Mbyte/s~ Quindi, per memorizzare un ora di video

servono circa 222.4 Gbyte

© 2007 F. Bergenti Architettura degli Elaboratori 70

Codifiche Ridondanti (1/2)} Spesso, i linguaggi impongogno delle regole grammaticali per cui i messaggi risultano ridondanti~ Un messaggio è ridondante se richiede “più

simboli del necessario”} Esempio~ Tipcamnte le parole lnghe contngno parcchi cartteri che potrbbro essre elimnati~ Seocndo uno stiduo di una Univretisà Inlegse l’oridne dlele letetre all’intreno di una praola non è improtatne, ciò che improta è la pirma e l’utlima letetra

© 2007 F. Bergenti Architettura degli Elaboratori 71

Codifiche Ridondanti (2/2)} In caso di linguaggi ridondanti, abbiamo due possibilità~ Codificare in un altro linguaggio togliendo la

ridondanza� Tipicamente, si ottengono messaggi più previ~ Sfruttare la ridondanza per altri altri scopi� Forward Error Detection, scoprire eventuali errori (di trasmissione o di memorizzazione)� Forward Error Correction, correggere eventuali errori (di trasmissione o di memorizzazione)

© 2007 F. Bergenti Architettura degli Elaboratori 72

Codifica di Hamming� Usato principalmente per individuare errori su singoli bit� È anche possibile la

correzione aumentando la ridondanza� Codifica delle cifre da 0 a 9

utilizzando 5 bit (anziché 4)� Si associa ad ogni cifra una stringa binaria in cui sono presenti sempre due 1 e tre 0 (o viceversa)� In caso di errore, la stringa potrebbe assumere una delle altre 22 configurazioni 00011 9

00101 8

00110 7

01001 6

01010 5

01100 4

10001 3

10010 2

10100 1

11000 0

Architettura degli Elaboratori

© 2007 F. Bergenti 19

© 2007 F. Bergenti Architettura degli Elaboratori 73

Codifica di Huffman (1/10)� Codifica binaria a lunghezza variabile� Simboli più probabili (più frequenti) vengono codificati con stringhe più corte� È alla base del formato ZIP� Massimo rapporto di compressione (lunghezza

finale / lunghezza iniziale)� Deve considerare l’intera stringa da codificare� Operazione di codifica lenta� Non sfrutta le “caratteristiche fisiologiche” delle stringhe� Non sfrutta in nessun modo l’uso finale delle stringhe

© 2007 F. Bergenti Architettura degli Elaboratori 74

Codifica di Huffman (2/10)� Per la costruzione del codice si parte dalle probabilità dei singoli simboli� Approssimata con la relativa frequenza� Passo 1: si costruisce un nodo foglia per ogni lettera, etichettandolo con la frequenza del simbolo

f : 5 e : 9 c : 12 b : 13 d : 16 a : 45

© 2007 F. Bergenti Architettura degli Elaboratori 75

Codifica di Huffman (3/10)

� Passo 2: si rimuovono due nodi con frequenze minori

c : 12 b : 13 d : 16 a : 45

f : 5 e : 9

© 2007 F. Bergenti Architettura degli Elaboratori 76

Codifica di Huffman (4/10)

� Passo 3: Si collegano i nodi ad un nodo padre etichettato con la somma delle frequenze

c : 12 b : 13 d : 16 a : 45

f : 5 e : 9

14

Architettura degli Elaboratori

© 2007 F. Bergenti 20

© 2007 F. Bergenti Architettura degli Elaboratori 77

Codifica di Huffman (5/10)

� Passo 4: Si aggiunge il nuovo nodo alla lista

c : 12 b : 13 d : 16 a : 45

f : 5 e : 9

14

© 2007 F. Bergenti Architettura degli Elaboratori 78

Codifica di Huffman (6/10)

� Passo 5: Si ripetono i passi dal 2 al 4 finché resta un solo nodo nella lista

f : 5 e : 9 c : 12 b : 13

d : 16 a : 4514 25

© 2007 F. Bergenti Architettura degli Elaboratori 79

Codifica di Huffman (7/10)

c : 12 b : 13 d : 16

a : 4525 30

f : 5 e : 9

14

© 2007 F. Bergenti Architettura degli Elaboratori 80

14

Codifica di Huffman (8/10)

a : 45 55

c : 12 b : 13 d : 16

25 30

f : 5 e : 9

Architettura degli Elaboratori

© 2007 F. Bergenti 21

© 2007 F. Bergenti Architettura degli Elaboratori 81

14

Codifica di Huffman (9/10)

a : 45

100

55

c : 12 b : 13 d : 16

25 30

f : 5 e : 9

© 2007 F. Bergenti Architettura degli Elaboratori 82

14

Codifica di Huffman (10/10)

a : 45

100

55

c : 12 b : 13 d : 16

25 30

f : 5 e : 9

0 1

10

10 10

10

© 2007 F. Bergenti Architettura degli Elaboratori 83

Codifiche Lossy� Una codifica è lossless se è possibile ricostruire la stringa iniziale senza errori� Le codifiche lossy � Ammettono che la stringa ricostruita abbia

qualche errore� Utili nel caso in cui l’informazione possa comunque essere preservata� Tipicamente usate quando il destinatario è una persona� Suoni, immagini, video, ...

© 2007 F. Bergenti Architettura degli Elaboratori 84

Codificha JPEG (1/2)� Codifica lossy per immagini� Si basa su una codifica a blocchi 8x8 dell’immagine� Ogni blocco è codificato separatamente dall’altro� Viene tenuto conto anche della sensibilitàdell’occhio umano agli errori introdotti nella quantizzazione� Si possono ottenere elevati fattori di compressione

Architettura degli Elaboratori

© 2007 F. Bergenti 22

© 2007 F. Bergenti Architettura degli Elaboratori 85

Codifica JPEG (2/2)

© 2007 F. Bergenti Architettura degli Elaboratori 86

Codifica MPEG� Lo standard più diffuso nel settore della codifica audio e video è lo standard MPEG (Motion Picture Expert Group)� Nato per codificare video e il relativo audio con

qualità VHS su supporto CD� Vari standard con varie prestazioni� MPEG-1, comunemente usato per l’audio (il livello 3 viene detto comunemente MP3)� MPEG-2, comunemente usato nei DVD� MPEG-4, pensato per il Web

© 2007 F. Bergenti Architettura degli Elaboratori 87

Aritmetica del Calcolatore

Una

Pascalina

© 2007 F. Bergenti Architettura degli Elaboratori 88

Rappresentazione Posizionale� Dato un alfabeto

di b simboli, ord(.) è un ordinamento totale su

in [0, b-1]� �= { a, b, c, d } � ord(a) = 0, ord(b) = 1, ord(c) = 2, ord(d) = 3� Dato un alfabeto

di b simboliS = dn-1 dn-2 ... d1 d0 .d-1 d-2 ... d1-m d-m

val(S) =

iord(di)bi (

0)� Fissata la base, la rappresentazione posizionale è unica� A meno di zero inziali, varianti di ord, ...

Architettura degli Elaboratori

© 2007 F. Bergenti 23

© 2007 F. Bergenti Architettura degli Elaboratori 89

Conversione tra Basi� Dato un intero x in base b, trovare la sua rappresentazione in base b’� Se b o b’ valgono 10� Possiamo usare le comuni regole dell’aritmetica� Che non padroneggiamo bene per basi diverse da 10� Separiamo i casi di parte intera e parte

frazionaria� Attenziona: la conversione della parte frazionaria può non terminare� Passando dalla base 10 è possibile fare una

qualsiasi conversione (b e b’ qualsiasi)

© 2007 F. Bergenti Architettura degli Elaboratori 90

Conversione Binario/Decimale

© 2007 F. Bergenti Architettura degli Elaboratori 91

Conversione Decimale/Binario (1/4)

© 2007 F. Bergenti Architettura degli Elaboratori 92

Conversione Decimale/Binario (2/4)

Architettura degli Elaboratori

© 2007 F. Bergenti 24

© 2007 F. Bergenti Architettura degli Elaboratori 93

Conversione Decimale/Binario (3/4)

© 2007 F. Bergenti Architettura degli Elaboratori 94

Conversione Decimale/Binario (4/4)

© 2007 F. Bergenti Architettura degli Elaboratori 95

Conversione tra b e bk� Se b’=bk (k>1) possiamo fattorizzare il polinomio usato nella rappresentazione posizionale in modo conveniente� Separiamo la stringa S in gruppi di k simboli e poi convertiamo i singoli gruppi� Aggiungiamo 0 non significativi se serve� Utile per le conversioni� Binario/ottale (b=2, b’=8)� Binario/esadecimale (b=2, b’=16)

© 2007 F. Bergenti Architettura degli Elaboratori 96

Conversione Binario/Ottale

Architettura degli Elaboratori

© 2007 F. Bergenti 25

© 2007 F. Bergenti Architettura degli Elaboratori 97

Conversione Binario/Esadecimale

© 2007 F. Bergenti Architettura degli Elaboratori 98

Aritmetica in base b� Estendiamo le operazioni di somma e prodotto ad una base b qualsiasi� Per la base 10� Somma� Una cifra per volta, eventuale riporto di 1� Prodotto� Ridotto a prodotto per cifra singola� Eventuale riporto di 8� Basta trovare le “tabelline” per la base b

© 2007 F. Bergenti Architettura degli Elaboratori 99

Somma e Prodotto in Base 5

312213404

221411303

13114202

432101

000000

43210x

1312111044

121110433

11104322

1043211

432100

43210+

© 2007 F. Bergenti Architettura degli Elaboratori 100

Somma e Prodotto in Base 2� Operazioni molto semplici� Necessari molti passaggi� Un solo caso di riporto� Il prodotto si riduce a “copia e somma”� Realizzazione elettronica semplice

101

000

10x

1011

100

10+

Architettura degli Elaboratori

© 2007 F. Bergenti 26

© 2007 F. Bergenti Architettura degli Elaboratori 101

Tabella della Somma in Base 2

11111

10011

10101

01001

10110

01010

01100

00000

cirici-1biai

© 2007 F. Bergenti Architettura degli Elaboratori 102

Numeri Interi nei Calcolatori (1/2)� In un calcolatore la quantità di memoria dedicata ad un singolo numero è fissata (detta parola)� 8, 16, 32, 64, ... bit� Si possono rappresentare numeri con una quantità fissa di cifre � Numeri a precisione finita

© 2007 F. Bergenti Architettura degli Elaboratori 103

Numeri Interi nei Calcolatori (2/2)� Fissata una base b ed una lunghezza N, i naturali rappresentabili sono in [0...bN-1]� In binario, con parole di 8 bit, [0...255]� Se il risultato di un’operazione eccede il limite� Il risultato viene troncato a N simboli� Si parla di overflow

© 2007 F. Bergenti Architettura degli Elaboratori 104

Numeri Binari Negativi� Il modo più semplice è sacrificare il primo bit� Il bit di segno contiene l’informazione + (0) o -(1)� Rappresentazione modulo/segno� Con N bit, [-2N-1-1...2N-1-1]� Utilizzata in passato, ma ormai quasi del

tutto abbandonata� Lo 0 ha due rappresentazioni� Il tipo di operazione dipende anche dal segno dei termini� A+B è una sottrazione se A e B hanno segno discorde

Architettura degli Elaboratori

© 2007 F. Bergenti 27

© 2007 F. Bergenti Architettura degli Elaboratori 105

Complemento a 2 (1/3)� Per rappresentare k in una parola di N bit� Se k

0, si usa il modulo/segno� Se k<0, si usa il modulo/segno con segno a 1 e modulo pari a (2N-1-|k|)� E.g., su 5 bit� +1410=011102� -1410=100102

© 2007 F. Bergenti Architettura degli Elaboratori 106

Complemento a 2 (2/3)� In complemento a 2, il bit più significativo ha peso 2N-1� Se 0 non da contributo� Se 1 il valore è (2N-1-y) con y valore dei bit meno

significativi (y=2N-1-|k|)� Quindi, in complemento a 2 a N bit èpossibile rappresentare i numeri in

[-2N-1...2N-1-1]

© 2007 F. Bergenti Architettura degli Elaboratori 107

Complemento a 2 (3/3)� Alcune proprietà interessanti� 0 si rappresenta con 000...00� -1 si rappresenta con 111...11� Il massimo numero positivo è 011..11� Il minimo numero negativo è 100...00� Dato un numero negativo, scambiando 0 e 1 (operazione di complemento) si ottiene il suo modulo diminuito di 1� E.g., su 4 bit -510=10112→01002=410

© 2007 F. Bergenti Architettura degli Elaboratori 108

Conversione Veloce (1/2)� Dato un numero negativo -A (A>0) per trovare velocemente la sua rappresentazione con N bit � Si rappresenta A sugli N bit� Si scambiano 0 con 1� Si aggiunge 1� E.g., -1810 su 6 bit� 1810=0100102→1011012 →1011102=-1810

Architettura degli Elaboratori

© 2007 F. Bergenti 28

© 2007 F. Bergenti Architettura degli Elaboratori 109

Conversione Veloce (2/2)  Riunendo gli ultimi due passi, dato un numero negativo -A (A>0) per trovare velocemente la sua rappresentazione su Nbit ¡Si rappresenta A su N bit¡Si complementano tutti i bit a sinistra dell’1

meno significativo  E.g., -1810 su 6 bit¡1810=0100102→1011102=-1810

© 2007 F. Bergenti Architettura degli Elaboratori 110

Operazioni in Complemento a 2  Il cambiamento di segno si ottiene complementando tutti i bit a sinistra dell’1 meno significativo¡È il secondo passo della regola di conversione

veloce  Dati due numeri in complemento a 2 su Nbit, la loro somma troncata su N bit è il complemento a 2 del risultato della somma¡Sfruttiamo questo anche per la differenza, infatti

a-b=a+(-b)¡Può essere generato un overflow

© 2007 F. Bergenti Architettura degli Elaboratori 111

Somma in Complemento a 2¢ E.g., su 5 bit (senza errore)£ 710-510=(00111)2+(11011)2=1000102=210£ -510-110=(11011)2+(11111)2=1110102=-610¢ E.g., su 5 bit (con errore di overflow)£ 910+910=(01001)2+(01001)2=100102=-1410£ -910-810=(100111)2+(11000)2=1011112=-1710¢ C’è errore di overflow se e solo se i due addenti sono dello stesso segno ed il risultato è di segno opposto

© 2007 F. Bergenti Architettura degli Elaboratori 112

Rappresentazioni Meno Comuni  La rappresentazione degli interi più comune è quella in complemento a 2¡Modulo/segno è ormai abbandonato  Complemento a 1¡I numeri negativi si ottengono dal loro modulo

mediante complemento¤ -510 su 5 bit è 110102, infatti 110102→001012  Eccesso 2N-1 (per N bit)¡Il numero è trattato come positivo e poi si sottrae (sempre) 2N-1-1¤ -510 su 5 bit è 010102, infatti 010102=10=5-15

Architettura degli Elaboratori

© 2007 F. Bergenti 29

© 2007 F. Bergenti Architettura degli Elaboratori 113

Rappresentazione dei Reali¥ In una stessa applicazione è spesso necessario rappresentare numeri¦ Interi e non interi¦ Molto grandi¦ Molto piccoli¥ Fissata la lunghezza della parola, è difficile rappresentare numeri di ordini di grandezza diversi¦ Rappresentazione in virgola fissa¦ Rappresentazione in virgola mobile

© 2007 F. Bergenti Architettura degli Elaboratori 114

Rappresentazione con Virgola Fissa¥ Fissato N la lunghezza della parola ¦ Il bit più significativo indica il segno¦ Ni bit rappresentano la parte intera¦ Nf bit rappresentano la parte frazionaria (con pesi positivi, come fossero interi)¥ I valori Ni, Nf (N = 1 + Ni + Nf) sono fissati a

priori¦ Da cui nome virgola fissa¦ Ovviamente non tutti i numeri reali sono rappresentabili

© 2007 F. Bergenti Architettura degli Elaboratori 115

Rappresentazione con Virgola Mobile (1/4)§ La rappresentazione in virgola mobile (floating point) sfrutta la notazione scientifica dei numeri¨ E.g., 7100000=7.1 106§ Fissata una base b, un numero k èdescritto da <m,e> con k=mbe¨ Mantissa m¨ Esponente e

© 2007 F. Bergenti Architettura degli Elaboratori 116

Rappresentazione con Virgola Mobile (2/4)¥ Nota¦ La scelta di <m,e> è non univoca se non si aggiungono regole sulla scelta di m¦ È importante non confondere b con la base usata per la rappresentazione© Anche se spesso sono uguali¥ Tipicamente, si sceglie m (≠0) in modo che

m=±0.d1d2... con d1≠0¦ Con questa convenzione, la rappresentazione èunivoca (forma normale, con convenzioni per 0)¦ b-1 ª

|m|<1

Architettura degli Elaboratori

© 2007 F. Bergenti 30

© 2007 F. Bergenti Architettura degli Elaboratori 117

Rappresentazione con Virgola Mobile (3/4)« Nella rappresentazione con virgola mobile¬ Il bit più significativo indica il segno¬ Nm bit rappresentano il modulo della mantissa¬ Ne bit rappresentano l’esponente­ Tipicamente in eccesso 2N-1 (per codificarne il segno)

© 2007 F. Bergenti Architettura degli Elaboratori 118

Rappresentazione con Virgola Mobile (4/4)® Non tutti i reali sono rappresentabili¯ Densi vicino allo 0, meno densi verso gli estremi¬ Nm definisce quanto i valori sono densi¬ Ne definisce la dimensione dell’intervallo® Ogni operazione può richiedere una normalizzazione¯ Possibile perdita di precisione¯ Overflow, numero troppo grande¯ Underflow, numero troppo piccolo

(approssimanto con 0)

© 2007 F. Bergenti Architettura degli Elaboratori 119

Standard IEEE 754 (1/4)« Ogni produttore aveva un suo formato¬ Fine anni ’70 la IEEE (Institute of Electrical and Electronics Engineers) costituisce un comitato per standardizzare la rappresentazione floating-point¬ Tre formati­ Singola precisione (32 bit)­ Doppia precisione (64 bit) ­ Precisione estesa (80 bit)« Nel formato IEEE 754 viene scelta¬ Base 2 per mantissa¬ Notazione in eccesso per l’esponente¬ Mantissa normalizzata (tipo 1.x)

© 2007 F. Bergenti Architettura degli Elaboratori 120

Standard IEEE 754 (2/4)

Architettura degli Elaboratori

© 2007 F. Bergenti 31

© 2007 F. Bergenti Architettura degli Elaboratori 121

Standard IEEE 754 (3/4)

© 2007 F. Bergenti Architettura degli Elaboratori 122

Standard IEEE 754 (4/4)

° IEEE 754 prevede numeri normalizzati e denormalizzati° Formati speciali per identificare ± Infinito ± NaN (Not a Number, e.g., se dividiamo infinito per infinito)

© 2007 F. Bergenti Architettura degli Elaboratori 123

Livello Logico

George Boole (1815-1864)

© 2007 F. Bergenti Architettura degli Elaboratori 124

Algebra (Binaria) di Boole² Detto ³={0, 1}, studia le funzioni f: ³N→ ³M´ Introdotta da George Boole per studiare la logica (proposizionale) ed una teoria degli insiemi´ Spesso, si usano

µ

={false, true},

µ

={falso, vero}, µ={f, t},

µ

={f, v}, ...² Nota´ Una funzione f:

µN→ µM può sempre essere espressa come M funzioni f:

µN→ µ

(spesso dette funzioni Booleane)´ Essendo |

µ

|, N, M finiti, il numero di possibili f èfinito (per M=1, sono 2K, K=2N)

Architettura degli Elaboratori

© 2007 F. Bergenti 32

© 2007 F. Bergenti Architettura degli Elaboratori 125

Tavola di VeritචDescrive completamente una funzione f:

·N→ ·¸ Indica l’output generato da ogni possibile input¸ Formata da N + 1colonne e 2N righe¶ Spesso M ed N sono

troppo grandi¸ Serve una notazione più compatta¸ Espressioni Booleane

© 2007 F. Bergenti Architettura degli Elaboratori 126

Espressioni Booleane (1/3)¹ Tre operazioni sono tipicamente usate per esprimere le funzioni Booleaneº NOT (-), negazione, unaria» Complementa il suo argomentoº AND (·), congiunzione, binaria» Vale 1 solo se i due argomenti valgono 1º OR (+), disgiunzione, binaria» Vale 0 solo se i due argomenti valgono 0¹ Le operazioni si comportano º Come quelle note dall’aritmetica (circa) º Come quelle della teoria degli insiemi

© 2007 F. Bergenti Architettura degli Elaboratori 127

Espressioni Booleane (2/3)¶ Spesso viene introdotto anche¸ XOR (⊕), OR esclusivo, binario¼ XY+XY¶ Tavole di verità dei connettivi¸ In termini insiemistici: complemento, unione, intersezione, differenza simmetrica

101

000

10AND

111

100

10OR

011

100

10XOR

© 2007 F. Bergenti Architettura degli Elaboratori 128

Espressioni Booleane (3/3)

(A+B)=ABAB=A+BLeggi di De Morgan

A+AB=AA(A+B)=AAssorbimento

AB+AC=A(B+C)(A+B)(A+C)=A+BCDistributività di AND rispetto ad OR e

di OR rispetto ad AND

A+(B+C)=(A+B)+CA(BC)=(AB)CAssociatività di AND e OR

A+B=B+AAB=BACommutatività di AND e OR

A+A=1AA=0Dell’Inverso

A+A=AAA=AIdempotenza di AND e OR

1+A=10A=0Conservazione di 0 rispetto ad AND e

di 1 rispetto ad OR

0+A=A1A=ANeutralità

ORANDNome

Architettura degli Elaboratori

© 2007 F. Bergenti 33

© 2007 F. Bergenti Architettura degli Elaboratori 129

Forme Canoniche SP e PS (1/2)½ Data una qualsiasi funzione Booleana è sempre possibile esprimerla come¾ Somma di Prodotti (tra variabili e relativi complementi)¾ Prodotti di Somme (tra variabili e relativi complementi)½ Entrambe le forme non sono univoche¾ Problema di minimizzare il numero di prodotti e di somme¾ Spesso si usano anche forme non minime perché più

semplici da realizzare½ Si dicono canoniche se, mediante l’aggiunta di convenzioni, vengono rese univoche¾ Per ogni funzione Booleana esiste ed è unica la sua forma

canonica SP (o PS)

© 2007 F. Bergenti Architettura degli Elaboratori 130

Forme Canoniche SP e PS (2/2)½ Data una tavola di verità è semplice trovare le forme SP e PS equivalenti½ E.g., funzione di maggioranza¾ 1 se il numero di 1

supera il numero di 0¾ ABC+ABC+ABC+ABC¾ (A+B+C)(A+B+C) (A+B+C)(A+B+C) 1111

1011

1101

0001

1110

0010

0100

0000

RCBA

© 2007 F. Bergenti Architettura degli Elaboratori 131

Operazioni NAND e NOR½ Per sintetizzare una qualsiasi funzione Booleana èsufficiente un solo connettivo (tra)¾ NAND, X NAND Y=(XY)¾ NOR, X NOR Y=(X+Y)½ In generale, il numero di NAND/NOR è maggiore del numero di operatori NOT/AND/OR¾ X = X NAND X

= X NOR X¾ XY = (X NAND Y) NAND (X NAND Y)= (X NOR X) NOR (Y NOR Y)¾ X+Y = (X NAND X) NAND (Y NAND Y)= (X NOR Y) NOR (X NOR Y)

© 2007 F. Bergenti Architettura degli Elaboratori 132

Sommatore Binario (1/2)¿ Si consideri il problema di sintetizzare una funzione che sommi tre cifre binarie a, b, c generando anche il riporto rÀ s = abc+abc+abc+abcÀ r = ab+bc+ac¿ Questo è un “modulo” che può essere utilizzato per realizzare un sommatore binario ad N bit

11111

10011

10101

01001

10110

01010

01100

00000

rscba

Architettura degli Elaboratori

© 2007 F. Bergenti 34

© 2007 F. Bergenti Architettura degli Elaboratori 133

Sommatore Binario (2/2)Á Sommatore a 4 bit 4 sommatori ad un bit Genera à 4 usciteà Un riporto (carry bit)Á È modulare e può

essere esteso ad una lunghezza di parola qualsiasi

sommatorea0b0

0s0

r0

sommatorea1b1

c1 s1

r1

sommatorea2b2

c2 s2

r2

sommatorea3b3

c3 s3

carry

© 2007 F. Bergenti Architettura degli Elaboratori 134

Reti Logiche Combinatorieà L’elettronica implementa le funzioni BooleaneÄ Reti logiche combinatorieà Servono componenti a due stati per rappresentare le variabili Booleaneà Lo stato degli interruttoricontrolla lo stato delle lampadineà Sono un insieme funzionalmente completoÄ Implementano i tre

connettivi logici

© 2007 F. Bergenti Architettura degli Elaboratori 135

TransistorÁ Componente che realizza un interruttore controllato da un segnale elettricoÁ Lo stato dell’interruttore  Non viene impostato con un operazione

meccanica manuale Viene impostato mediante un segnale elettricoÁ Varie tecnologie realizzano diversi tipi di transistor I più usati sono i transistor (ad effetto di campo)

MOS (Metal-Oxide Semiconductor)

© 2007 F. Bergenti Architettura degli Elaboratori 136

Transistor NMOS e PMOS (1/3)

S=sourceD=drainG=gate

Architettura degli Elaboratori

© 2007 F. Bergenti 35

© 2007 F. Bergenti Architettura degli Elaboratori 137

Transistor NMOS e PMOS (2/3)Å I segnali logici sono realizzati fissando la tensione ai tre morsetti del transistorÆ 0, tensione di massa (0V)Æ 1, tensione di alimentazione (tipicamente 5V)Å La corrente fluisce da drain verso sourceÅ I tue tipi di transistor sono complementariÆ Si aprono/chiudono per tensioni opposteÆ Da cui il nome di tecnologia Complementary

MOS (CMOS)

© 2007 F. Bergenti Architettura degli Elaboratori 138

Transistor NMOS e PMOS (3/3)

Silicio (Si)

Ossido di Silicio (SiO2)

Metallo

n+ n+

G

S D

B B=Bulk, 0V fisso

Drogante con elettroni in eccesso

Canale di elettroni

Corrente

≈ 1 Çm

© 2007 F. Bergenti Architettura degli Elaboratori 139

NOT e NAND CMOS

© 2007 F. Bergenti Architettura degli Elaboratori 140

Circuiti IntegratiÅ Circuiti complessi realizzati su uno stesso chipÅ Diversi livelli di integrazioneÆ SSI, Small Scale Integrated (<50 transistor)Æ MSI, Medium Scale Integrated (< 500 transistor)Æ LSI, Large Scale Integrated

(<500k transistor)Æ VLSI, Very Large Scale Integrated (>500k transistor)

Architettura degli Elaboratori

© 2007 F. Bergenti 36

© 2007 F. Bergenti Architettura degli Elaboratori 141

Porte LogicheÈ Componenti fondamentali (atomici) dei circuiti digitaliÈ Ricevono in input un insieme di segnali elettrici (logici) e generano in output un segnale elettrico (logico)É Sono implementati mediante transistor

Porta Logica(Logic Gate)

© 2007 F. Bergenti Architettura degli Elaboratori 142

Famiglia LogicaÊ Insieme funzionalmente completo di porte logiche tra loro compatibiliË Collegabili liberamenteÊ Corrispondenza 1 a 1 tra espressioni Booleane e reti combinatorieË f = ab + bc

a

b

c

f

© 2007 F. Bergenti Architettura degli Elaboratori 143

Implementazione di una FunzioneÈ Una rete combinatoria implementa una funzione Booleana fÉ Si individua la specifica funzionale di f nei

termini di una tavola di verità o di una espressioneÉ Si cerca un’espressione equivalenteÉ Si minimizza l’espressione tenendo contoÌ Della tecnologia (famiglia logica, vincoli elettrici, ...)Ì Di un criterio di ottimizzazioneÉ Si sintetizza la rete combinatoria

© 2007 F. Bergenti Architettura degli Elaboratori 144

Esempio di Rete Combinatoria

1111

1011

1101

0001

1110

0010

0100

0000

MCBA

Architettura degli Elaboratori

© 2007 F. Bergenti 37

© 2007 F. Bergenti Architettura degli Elaboratori 145

ROMÍ ROM (Read-Only Memory) è una particolare rete combinatoria con N ingressi ed M usciteÎ Gli ingressi formano un indirizzoÏ Di solito viene letto come un numero naturaleÎ L’uscita è il valore associato

all’indirizzoÍ Una ROM implementa una qualsiasi tabella di veritàÎ Funzione f: ÐN→ ÐMÎ Spesso detta Look-Up

Table (LUT)

ROM...

O0

O1

OM-1

...

I0

I1

IN-1

© 2007 F. Bergenti Architettura degli Elaboratori 146

PLA (1/2)Í Tipicamente le ROM sono realizzate con Programmable Logic ArrayÎ Oggi non molto usate

per produzione su larga scalaÍ Fusibili realizzano (o

rompono) le varie connessioniÍ Espressioni di tipo SP

© 2007 F. Bergenti Architettura degli Elaboratori 147

PLA (2/2)Ñ L’uso di PLA (di ROM in generale) ha dei vantaggiÒ Sistematicità del progettoÒ Flessibilità e completezzaÓ Basta cambiare (o riprogrammare) la ROMÒ AffidabilitàÑ Svantaggi maggiori sonoÒ Impossibilità di ottimizzare il circuitoÒ Impossibilità di realizzare circuiti complessi

(tipicamente N ed M sono piccoli)

© 2007 F. Bergenti Architettura degli Elaboratori 148

Altri tipi di ROMÍ PROM (Programmable ROM)Î Una sola volta, non in fabbricaÍ EPROM (Erasable PROM)Î Cancellabili medialte esposizione alla luce ultraviolettaÍ EEPROM (Electrically Erasable PROM)Î Cancellabili per mezzo di impulsi elettrici Î Molto lente rispetto alle precedentiÍ FLASH (a causa l’alta velocità)Î EEPROM cancellabili a blocchiÎ Oggi, hanno velocità ed affidabilità paragonabile a quella dei dischi rigidi

Architettura degli Elaboratori

© 2007 F. Bergenti 38

© 2007 F. Bergenti Architettura degli Elaboratori 149

ComparatoreÔ Date due stringhe di N bit, l’uscita viene posta a 1 se le due stringhe sono ugualiÔ Utilizza XOR e NORÕ Implementazioni

alternative sono possibili

© 2007 F. Bergenti Architettura degli Elaboratori 150

Shifter Aritmetico

Ö Più semplice dei circuiti aritmeticiÖ Dati N bit di input, l’output è ottenuto spostando di 1 bit la stringa di input× La direzione dello spostamento dipende da C× È aritmetico perché viene riempito l’output con uno 0× Equivale a moltiplicare/dividere per 2

© 2007 F. Bergenti Architettura degli Elaboratori 151

De-/Multiplexer (1/4)Ø Un multiplexer (MUX) ha 2N input, 1 output e N input di controlloØ Le linee di controllo determinano quale dei 2N input viene inviato all’outputØ Un demultiplexer (DEMUX) invia il segnale di input ad uno dei 2N output, a seconda dei valori delle N linee di controllo

© 2007 F. Bergenti Architettura degli Elaboratori 152

De-/Multiplexer (2/4)Ø MUX e DEMUX sono usati come strutture di comunicazione

MUX

N

N

N

...

a0 a1 aK-1

I0

I1

IW-1

W=2K

DEMUX...

O0

O1

OW-1

W=2K

N O

...

I0

I1

IK-1

...

Architettura degli Elaboratori

© 2007 F. Bergenti 39

© 2007 F. Bergenti Architettura degli Elaboratori 153

De-/Multiplexer (3/4)Ù Dati N bit di controllo un DEMUX (o decoder) attiva una la linea di uscita tra le 2N

possibiliÙ “Decodifica” il valore degli N bit di inputÙ Usato per attivare uno di 2N moduliÚ Di memoriaÚ Di calcoloÚ ...

© 2007 F. Bergenti Architettura degli Elaboratori 154

De-/Multiplexer (4/4)Ù Un MUX è formato da un decoder piùÚ AND tra ogni Di e la

relativa linea del decoderÚ OR che produce l’uscitaÙ Un MUX con N input di controllo può implementare qualsiasi f funzione Booleana N-ariaÚ I valori degli N input

selezionano un Di che viene tenuto fisso al valore dell’uscita dell’i-esima riga della tabella di verità di f

© 2007 F. Bergenti Architettura degli Elaboratori 155

Full Adder (1/2)

11111

10011

10101

01001

10110

01010

01100

00000

CoSCiBA

S = ABCi+ABCi+ABCi+ABCi = (A⊕B)⊕Ci

Co = AB+BCi+ACi = AB+(A⊕B)Ci

© 2007 F. Bergenti Architettura degli Elaboratori 156

Full Adder (2/2)

Architettura degli Elaboratori

© 2007 F. Bergenti 40

© 2007 F. Bergenti Architettura degli Elaboratori 157

ALUÛ Arithmetic Logic Unit (ALU) è una rete combinatoria che compie operazioni aritmetiche e logicheÜ Operazione da eseguire sull’input (M bit)Ü Dati di input da elaborare (N bit)Ü Flag che modificano il comportamento dell’operazioneÝ Somma 1 al risultato, cambia di segno il risultato, ...Ü Output dell’elaborazione (N bit o 2N bit)Ü Flag che indicano situazioni particolariÝ Overflow, il risultato è 0, il risultato è negativo, ...Û La caratteristica più importante è che il suo comportamento dipende dai bit che codificano l’operazione

© 2007 F. Bergenti Architettura degli Elaboratori 158

ALU ad 1 bitÞ Esegue NOT, AND, OR e somma ad 1 bitÞ F sceglie l’operazioneÞ ENA e ENB (linee di enable) abilitano la lettura di Aß 0 altrimentiÞ INVA sceglie se usare A o NOT AÞ Di norma INVA = 0, ENA = ENAB = 1

© 2007 F. Bergenti Architettura degli Elaboratori 159

ALU ad 8 bit (1/2)

© 2007 F. Bergenti Architettura degli Elaboratori 160

ALU ad 8 bit (2/2)Û Ottenuta mettendo in cascata più ALU ad 1 bitÜ Può essere messa in cascata con altre ALU ad 8 bitÛ Il carry-in può essere usato come flag INCÜ Flag sull’operazione per fare A+1 o A+B+1 in un solo calcolo (se INC=1)Û È semplice ottenere due flag di uscita molto comuniÜ N, il valore del risultato è negativo (bit più significativo del risultato)Ü Z, il valore del risultato è 0 (NOR dei bit in uscita)

Architettura degli Elaboratori

© 2007 F. Bergenti 41

© 2007 F. Bergenti Architettura degli Elaboratori 161

Automi a Stati Finiti (1/2)à Macchina (o automa o agente o ...)á Dispositivo automatico in grado di interagire con l’ambiente esterno á Esibisce un comportamento (in uscita, output) a fronte di uno stimolo (in ingresso, input)à Interessiamoci di macchine con memoria

finitaá Per macchine più potenti ammettiamo memoria illimitata (ottenendo così le macchine più potenti, le Macchine di Turing)

© 2007 F. Bergenti Architettura degli Elaboratori 162

Automi a Stati Finiti (2/2)à FSM, Finite State Machineà Vista come una scatola nera, descriviamo cosa succede ad ogni passoá Legge un simbolo in ingressoâ Che appartiene ad un insieme finito Aá Produce un simbolo in uscitaâ Che appartiene ad un insieme finito Bá Cambia il proprio stato interno â La memoria è finitaâ L’insieme Q degli

stati interni è finito FSMq∈Q

input

y∈A

output

z∈B

© 2007 F. Bergenti Architettura degli Elaboratori 163

FSM Distributore di Biglietti (1/4)à Un distributore di bigliettiá Accetta solo monete grandi (MG) e monete piccole (MP)á Un biglietto viene emesso quando vengono ricevute una MP ed una MG â Non importa l’ordine di immissione delle moneteá Non viene dato resto, è necessario sempre introdurre MP e MGá Non vengono restituite le monete se non si procede all’acquisto

© 2007 F. Bergenti Architettura degli Elaboratori 164

FSM Distributore di Biglietti (2/4)à L’insieme (finito) dei simboli di ingresso èA={MP, MG}à L’insieme (finito) dei simboli di uscita èB={ancora, restituisci, emetti}à L’insieme (finito) degli stati è Q formato daá q0, non è stata inserita nessuna mometaá q1, è stata inserita una MPá q2, è stata inserita una MG

Architettura degli Elaboratori

© 2007 F. Bergenti 42

© 2007 F. Bergenti Architettura degli Elaboratori 165

FSM Distributore di Biglietti (3/4)

Tabella di Transizione

q2/restituisciq0/emettiq2

q0/emettiq1/restituisciq1

q2/ancoraq1/ancoraq0

MGMP

© 2007 F. Bergenti Architettura degli Elaboratori 166

FSM Distributore di Biglietti (4/4)

Grafo di Transizione

q1 q0 q2

MG/ancora

MP/emetti

MG/restituisci

MP/ancora

MG/emetti

MP/restituisci

© 2007 F. Bergenti Architettura degli Elaboratori 167

Automa a Stati Finiti di Mealyã Un automa a stati finiti di Mealy M è una quintuplaM = <A, B, Q, o, s>

A insieme finito di simboli di ingressoB insieme finito di simboli di uscitaQ insieme finito di simboli di statoo:AxQ→B funzione di uscitas:AxQ→Q funzione di cambiamento di statoã Esistono altre definizioni, a seconda dell’uso che si intende fare dell’automaä Riconoscitore/generatore di linguaggi, ...

© 2007 F. Bergenti Architettura degli Elaboratori 168

Automa a Stati Finiti di Mooreå Per Moore, nella definizione si pone o:Q→Bæ Hanno la stessa potenza degli automi di Mealy

q2restituisci

q1ancora

q2restituisci

q3ancora

q0emetti

MG

MG

MP

MP

MG

MGMP

MP

MPMG

Architettura degli Elaboratori

© 2007 F. Bergenti 43

© 2007 F. Bergenti Architettura degli Elaboratori 169

Implementazione degli FSMç Una volta scelta la codifica (binaria) degli elementi di A, B e Q, le funzioni o ed s sono implementabili con reti combinatorieç Serve un modo perè Memorizzare lo stato corrente (quando serve)é Le reti combinatorie non hanno memoriaè Sostituire lo stato corrente con lo stato futuro

all’arrivo un nuovo simbolo di ingresso

© 2007 F. Bergenti Architettura degli Elaboratori 170

FSM Distributore di Biglietti (1/2)ç Codifica delle 3 possibili usciteè 2 bit O0 e O1

ç Codifica dei 3 possibili statiè 2 bit S0 e S1

-11

restituisci01

emetti10

ancora00

significatoO1O0

-11

q201

q110

q000

significatoS1S0

© 2007 F. Bergenti Architettura degli Elaboratori 171

FSM Distributore di Biglietti (2/2)

----111

0101011

0010101

0100001

----110

0010010

1001100

1000000

S’1S’0O1O0S1S0I

stato futurooutputstato correnteinput

© 2007 F. Bergenti Architettura degli Elaboratori 172

Reti Logiche Sequenziali (1/3)ç Le FSM sono implementate da reti logiche sequenzialiè Le funzioni o e s sono realizzate da reti logiche

combinatorieç Problemi apertiè Serve un modo per stabilire quando lo stato futuro prende il posto dello stato correnteè Ci serve memorizzare lo stato? Se sì, come?

Architettura degli Elaboratori

© 2007 F. Bergenti 44

© 2007 F. Bergenti Architettura degli Elaboratori 173

Reti Logiche Sequenziali (2/3)ê Reti logiche sequenziali asincroneê L’ouput di s viene richiuso sull’input di s e di oê Lo stato non viene memorizzatoê Lo stato futuro prende il posto dello stato corrente appena quest’ultimo cambiaë A meno del ritardo dovuto

alla propagazione dei segnali elettriciê Difficili (ma non impossibili) da

progettare perché viene richiesto un comportamento deterministico e ripetibile

o:AxQ→B(o:S→B)

s:AxQ→Sì

input output

stato

Ritardo di propagazione

s’s

© 2007 F. Bergenti Architettura degli Elaboratori 174

c, comando dicampionamento

Reti Logiche Sequenziali (3/3)í Reti logiche sequenziali sincroneí L’ouput di s viene campionatoî Dal fronte di salita di cí Lo stato viene memorizzato e cambia solo negli istanti di campionamentoí All’istante di campionamento lo stato futuro prende il posto dello stato correnteî A meno del ritardo dovuto

alla propagazione dei segnali elettici

o:AxQ→B(o:Q→B)

s:AxQ→Qì

input output

stato

Registros’s

© 2007 F. Bergenti Architettura degli Elaboratori 175

Clock (1/3)ï Nel caso della FSM Distributore di Biglietti, il comando di campionamento viene dato all’immissione di una monetað Nel momento in cui viene rilevata la moneta, viene

generato un breve segnale elettrico (impulso)ï Tipicamente, il comando di campionamento èperiodico ð In questo caso viene detto clockð Periodo di clock: periodo di tempo minimo tra due

attivazioni successive (misurato in frazioni di secondo)ð Frequenza di clock: inverso del periodo di clock (misurato in multipli di Hz)

© 2007 F. Bergenti Architettura degli Elaboratori 176

Clock (2/3)ñ La frequenza di clock deve essere tale da assicurare che le reti logiche combinatorie siano stabili prima del prossimo campionamentoò Tipicamente, sufficientemente bassa da poter

trascurare i ritardi dovuti alla propagazione elettricañ Spesso il segnale di clock viene generato

da un oscillatore al quarzoò Frequenza molto stabile ed elevataò Economicità, robustezza ed affidabilità

Architettura degli Elaboratori

© 2007 F. Bergenti 45

© 2007 F. Bergenti Architettura degli Elaboratori 177

Clock (3/3)

ó Un generatore di clock è un circuito che emette una serie di impulsi con specifica larghezza e periodo fissoó Nei calcolatori attualiô fc

õ

1MHz ô fc

ö

10GHz

periodo

© 2007 F. Bergenti Architettura degli Elaboratori 178

Registro ad 1 bit (1/3)÷ Nell’implementazione delle reti logiche sequenziali sincrone rimane un problemaø Come realizzare il registro che contiene lo

stato?ø Non possiamo appoggiarci ad un’altra rete logica sequenziale sincrona÷ Registro ad 1 bit (latch ad 1 bit)ø Due ingressi i e

ùed un uscita oø Mantiene uno stato interno só Se

ú

=1 (store), o←s←ió Se

ú

=0 (hold), o←sLatch 1 bit(stato s)

oi

û

© 2007 F. Bergenti Architettura degli Elaboratori 179

Registro ad 1 bit (2/3)

1111

1011

0101

0001

1110

0010

1100

0000

s’=osi

ù

© 2007 F. Bergenti Architettura degli Elaboratori 180

Registro ad 1 bit (3/3)

o=s’=

ü

s +

ü

i

·

·

û

o

i ý +

s s’

Architettura degli Elaboratori

© 2007 F. Bergenti 46

© 2007 F. Bergenti Architettura degli Elaboratori 181

Segnale Impulsivo (1/2)þ Il segnale

ÿ

viene posto a 1 per il tempo necessario a far propagare il valore di i su o� L’uscita di un registro rimane insensibile alle

variazioni dell’ingresso se

=0� Il ritardo

e la breve durata di

garantiscono che non si generi un’oscillazione nel circuitoþ Il segnale

ÿ

viene detto impulso� Se è periodico è simile ad un clock� Il registro è sensibile ai valori di

, non ai suoi fronti di salita

© 2007 F. Bergenti Architettura degli Elaboratori 182

Latch S-R (1/2)� Implementazione di un registro ad 1 bit� Hold: R = S = 0 (due

stati stabili)� Set (Store 1): S = 1 porta il latch allo stato 1� Reset (Store 0): R = 1 porta il latch allo stato 0� Il circuito memorizza

qual’è stato l’ultimo S o R

© 2007 F. Bergenti Architettura degli Elaboratori 183

Latch S-R (2/2)� Se S=R=1 lo stato non è stabile� Q impredicibile� Possibile oscillazione� S=R=1 non deve mai accadere� Anche in fenomeni di

transitorio� Si potrebbe innescare un’oscillazione

© 2007 F. Bergenti Architettura degli Elaboratori 184

Latch S-R Sincrono

Architettura degli Elaboratori

© 2007 F. Bergenti 47

© 2007 F. Bergenti Architettura degli Elaboratori 185

Latch D

� Memorizza il valore che D assume mentre il clock è 1� Se D varia mentre il clock è 1, varia anche lo stato

© 2007 F. Bergenti Architettura degli Elaboratori 186

Latch e Flip-Flop (1/3)� Un latch è azionato dal livello (tipicamente 1)� È level triggered� Un flip-flop è azionato dal fronte (tipicamente di salita)� È edge triggered� La lunghezza dell’impulso di clock non è importante� Insensibile alle variazioni dei segnali tranne negli istanti di

campionamento� Per utilizzare il latch D come fosse un FF serve un piccolo circuito che sia sensibile ai fronti di clock� Che mantenga lo stato 1 per breve tempo in modo che D

possa essere considerato costante in quel periodo di tempo

© 2007 F. Bergenti Architettura degli Elaboratori 187

Latch e Flip-Flop (2/3)

© 2007 F. Bergenti Architettura degli Elaboratori 188

Latch e Flip-Flop (3/3)

(a) latch di tipo D attivato con livello 1 del clock(b) latch di tipo D attivato con livello 0 del clock(c) flip-flop di tipo D attivato dal fronte di salita del clock(d) flip-flop di tipo D attivato dal fronte di discesa del

clock

Architettura degli Elaboratori

© 2007 F. Bergenti 48

© 2007 F. Bergenti Architettura degli Elaboratori 189

Registro a N bit (1/2)� Un registro ad N bit è in grado di contenere una tra 2N combinazioni di bit Memorizza un naturale tra 0 e 2N-1

FF0 FF1 FFN-1

i0 i1 iN-1ck ...

o0 o1 on-1

© 2007 F. Bergenti Architettura degli Elaboratori 190

Registro a N bit (2/2)

alimentazione

massa

clear

preset

reset

clock

© 2007 F. Bergenti Architettura degli Elaboratori 191

Bus Interno (1/3)� Componente di trasferimento dati tra registri ad N bit all’interno di un chip 2l registri sorgente 2k registri destinazione Un unica linea di clock� È necessario individuare 1 tra gli 2l registri

sorgente 1 tra i 2k registridestinazione

© 2007 F. Bergenti Architettura degli Elaboratori 192

Bus Interno (2/3)

Architettura degli Elaboratori

© 2007 F. Bergenti 49

© 2007 F. Bergenti Architettura degli Elaboratori 193

Bus Interno (3/3) La selezione del registro sorgente avviene mediante un MUX a l ingressi di controllo La selezione del registro destinazione avviene mediante un DEMUX con kingressi� Le uscite a 0 mascherano il segnale di

clock ed inibiscono la scrittura nei registri

© 2007 F. Bergenti Architettura degli Elaboratori 194

Tipi di Bus� Il bus interno trasferisce dati tra componenti di uno stesso chip Singolo clock (a frequenza massima) Ridotta potenza� Per collegare un chip con l’esterno si usano vari bus esterni Per collegare una CPU alla memoria

centrale (attualmente con clock intorno ai 400MHz) Per collegare una CPU ai dispositivi di I/O (attualmente con clock: PCI, 33MHz, ISA 8.33MHz) Elevata potenza (ridotta velocità) Necessitano di un controllo decentralizzato (arbitraggio)

© 2007 F. Bergenti Architettura degli Elaboratori 195

Memoria� Una memoria è un dispositivo che permette di leggere/scrivere dati(di larghezza fissa) in base ad un indirizzo� Una volta scritti, i dati permangono e possono essere letti in futuro

FFFF0

0CF01

01CC2

01CC3

11EC4

...

00001000

datiindirizzo

cella di memoria

© 2007 F. Bergenti Architettura degli Elaboratori 196

Caratteristiche di una Memoria (1/2)� Dimensione della cella� Numero di bit a cui è associato un certo indirizzo� Numero di celle� Numero di diversi indirizzi che la memoria contiene� Capacità� Numero di bit complessivamente contenuti nella memoria (tipicamente misurato in multipli di byte)� Parallelismo in scrittura/lettura� Numero massimo di celle che possono essere scritte/lette contemporaneamente� Velocità di accesso in scrittura/lettura

Architettura degli Elaboratori

© 2007 F. Bergenti 50

© 2007 F. Bergenti Architettura degli Elaboratori 197

Caratteristiche di una Memoria (2/2)� ROM (Read-Only Memory)� Può essere scritta una volta sola� Ha molte varianti (PROM, EPROM, ...)� RAM (Random-Access Memory)� Il tempo richiesto per l’accesso è (circa) indipendente dall’indirizzo� Volatili (o non volatili)� Mantengono i dati solo quando sono alimentate� Rimuovibili (o non rimuovibili)� È possibile sostituirle durante l’operatività del sistema� Dicendo RAM si intende (quasi sempre) una tra� Memoria ad accesso casuale, volatile, a semiconduttore� Memoria scrivibile liberamente

© 2007 F. Bergenti Architettura degli Elaboratori 198

Memoria a Semiconduttore (1/3)� Molte categorie di supporti sono memorie a tutti gli effetti� CD, DVD, nastri, ...� Le memorie a semiconduttore sono tipicamente veloci, poco capienti, volatili, non rimuovibili� Le memorie a semiconduttore vengono� Realizzate in chip detti chip di memoria� Integrate nello stesso chip dove risiedono la ALU ed altri

componenti (memoria cache)� In ogni calcolatore c’è sempre almeno una memoria a semiconduttore detta memoria centrale� Oggi tipicamente compresa tra 0.5 Gbyte e 10 Gbyte

© 2007 F. Bergenti Architettura degli Elaboratori 199

Memoria a Semiconduttore (2/3)� Memoria 4 x 3� 8 linee di input� 3 per i dati di input� 2 per l’indirizzo� 3 per i bit di controllo� 3 per output� Bit di controllo� Chip Select (CS)� Read (RD) per distingure tra read e write� Output Enabled (OE) per abilitare l’output

© 2007 F. Bergenti Architettura degli Elaboratori 200

Memoria a Semiconduttore (3/3)� Scrittura� Il dato entra nelle linee I� L’indirizzo entra nelle linee A� Il DEMUX sceglie la riga da abilitare� CS·RD abilitano la scrittura sulla riga� Lettura� L’indirizzo entra nelle linee A� Il DEMUX sceglie la riga da abilitare� CS·RD abilitano la lettura sulla riga� CS·RD·OE abilitano le linee di uscita� Il dato esce dalle linee O� L’ultimo stadio su O è l’uscita

sul bus (buffer di uscita)

Architettura degli Elaboratori

© 2007 F. Bergenti 51

© 2007 F. Bergenti Architettura degli Elaboratori 201

Organizzazione a Moduli� Un indirizzo di memoria ad Nbit può essere spezzato in� NM bit che scelgono il

modulo di memoria� NA bit che scelgono la cella all’interno del modulo� Gli NA bit entrano in un

DEMUX che genera i controlli CS� Ad esempio � N=16, NA=4, NM=12 � 64 Kbyte di memoria in 16

moduli di 4 Kbyte ciascuno

© 2007 F. Bergenti Architettura degli Elaboratori 202

RAM a Semiconduttore� SRAM (Static RAM)� Realizzate mediante FF-D� Estremamente veloci� DRAM (Dynamic RAM)� Realizzate mediante transistor usati come condensatori� Devono essere periodicamente rinfrescate (a causa delle correnti di perdita che tendono a scaricare i condensatori)� Offrono grandi capacità (elevata integrazione) ma sono più lente delle SRAM� SDRAM (Synchronous DRAM)� SDR (Single Data Rate), dati e indirizzi controllati dallo stesso clock (133MHz)� DDR (Double Data Rate): leggono sia nel fronte di salita che in quello di discesa (333/400 MHz)

© 2007 F. Bergenti Architettura degli Elaboratori 203

Gerarchia di Memoria (1/2)� In generale vogliamo massima capacità e massima velocità al minimo costo� Le memorie a semiconduttore sono molto veloci, poco

capienti e molto costose� Le memorie di massa (dischi, CD, nastri, ...) sono molto capienti, poco veloci e poco costose� Conviene decidere dove mettere i dati in base al

loro utilizzo� Dati letti/scritti di frequente, in memorie veloci (e poco capienti)� Dati letti/scritti di rado, in memorie capienti (e lente)� Necessità di spostare i dati all’interno di una

gerarchia di memoria

© 2007 F. Bergenti Architettura degli Elaboratori 204

Gerarchia di Memoria (2/2)� Registri e cache sono integrati nello stesso chip con la ALU� Velocità massima di accesso da

parte della ALU� La memoria centrale è collegata ad alta velocità con il chip che contiene la ALU� Comunque la ALU lavora sui

registri e sulla cache� Memorie flash e dischi rigidi tendono ormai ad essere sempre più equivalenti in termini di costo e velocità� CD e DVD sono ottimi per la memorizzazione per lunghi periodi di tempo� Memorizzazione ottica Nastri

Dischi rigidicapacità

Memorie flash

Memoria centralevelocità

Cachecosto

Registri

tipo/uso

Architettura degli Elaboratori

© 2007 F. Bergenti 52

© 2007 F. Bergenti Architettura degli Elaboratori 205

Dischi Magnetici (1/3)� Alluminio con rivestimento magnetizzabile� Tempo di accesso dell’ordine dei millisecondi� Nanosecondi per i registri� Sigillati in fabbrica� Organizzati in cilindri� Tracce alla stessa

distanza dal centro� Latenza dovuta alla rotazione

© 2007 F. Bergenti Architettura degli Elaboratori 206

Dischi Magnetici (2/3)

� Ogni traccia è organizzata in settori Preambolo per il posizionamento della testina Dati (payload) Codice per la rilevazione/correzione di errori Gap tra i settori

© 2007 F. Bergenti Architettura degli Elaboratori 207

Dischi Magnetici (2/3)� L’evoluzione storica è passata per Dischi rigidi Winchester, anni ’70 Floppy disk, anni ’70 Dischi IDE (Integrated Drive Electronics) negli anni ’80 e EIDE (Extended IDE) Dischi SCSI (Small Computer System Interface), 1986, e SCSI-2, 1994 RAID (Redundant Array of Independent Disks)! Gli stessi dati vengono scritti su vari dischi (in modo

trasparente)! Consente (in modo trasparente) di rilevare/correggere eventuali errori! Maggiore affidabilità nella memorizzazione dei dati

© 2007 F. Bergenti Architettura degli Elaboratori 208

Livello Assembly

Architettura degli Elaboratori

© 2007 F. Bergenti 53

© 2007 F. Bergenti Architettura degli Elaboratori 209

Livelli di Sistema (1/3)" Dal punto di vista dell’utilizzatore (programmatore) vogliamo astrarre dai dettagli fisici del calcolatore# Offrire all’utilizzatore la stessa macchina però vista a livelli

di astrazione sempre superiori" Si realizza (al di sopra della macchina reale) una macchina virtuale astratta che abbia le funzionalitàdesiderate e che sia facile da utilizzare " L’utente interagisce con la macchina virtuale e ogni comando viene tradotto (interpretato o compilato) nei corrispondenti comandi sulla macchina fisica" Non vi sono limiti al numero e al tipo di macchine virtuali

© 2007 F. Bergenti Architettura degli Elaboratori 210

Livelli di Sistema (2/3)$ Ogni macchina astratta identifica un livello di sistema$ Ogni livello viene definito con% Medium, insieme di concetti che il

livello processa% Componenti, parti atomiche composte per realizzare il sistema% Regole di composizione che governano come le componenti possono essere assemblate% Regole di comportamento che individuano& Il comportamento dei singoli

componenti& Il comportamento del sistema in base alla sua organizzazione (architettura) Livello Elettronica Digitale

Livello Logico

Livello Microarchitettura

Livello Sistema Operativo

Livello Assembly

Livello Linguaggio Macchina

© 2007 F. Bergenti Architettura degli Elaboratori 211

Livelli di Sistema (3/3)$ Livello logico% Medium: singoli bit% Componenti: porte logiche elementari% Regole di composizione: come le porte logiche possono essere collegate% Regole di comportamento: tabelle di verità delle porte logiche e comportamento delle strutture composte (e.g., anelli di retroazione nelle reti logiche sequenziali asincrone)$ Livello elettronica digitale% Medium: segnali elettrici di corrente e tensione% Componenti: transistor, resistenze, ...% Regole di composizione: come i transistor possono essere collegati tra loro e con le resistenze, ...% Regole di comportamento: modelli fisici del comportamento dei transistor e delle strutture composte

© 2007 F. Bergenti Architettura degli Elaboratori 212

Macchina di Von Neumann" Von Neumann collaborò alla realizzazione dell’ENIAC" Inventò un architettura che èancora oggi alla base di quasi tutti i calcolatori" La macchina di Von Neumann èpensata solo per fare calcoli

Architettura degli Elaboratori

© 2007 F. Bergenti 54

© 2007 F. Bergenti Architettura degli Elaboratori 213

Livello Linguaggio Macchina (1/3)' Al livello identificato dal linguaggio macchina, il calcolatore è formato da( ALU (Arithmetic Logic Unit)( FPU (Floating Point Unit), non sempre presente( Registri( Memoria centrale( Stack' Le operazioni base sono ( Quelle offerte dalla ALU e dalla FPU) Che influenzano il contenuto dei registri( Trasferimento di dati tra registri, memoria e stack' È a tutti gli effetti una macchina di Von Neumann

© 2007 F. Bergenti Architettura degli Elaboratori 214

Livello Linguaggio Macchina (2/3)* CPU, Central Processing Unit* RS, registro di stato memorizza lo stato della CPU (flag Z, N, ...)

ALU

R1

R2

Rn

...

RS

FPUMemoriaCentrale

Stack

CPU

Bus Interno

BusEsterno

Unità di I/O

Controllo

© 2007 F. Bergenti Architettura degli Elaboratori 215

Livello Linguaggio Macchina (3/3)' A livello del linguaggio macchina, di solito( Lo stack è una porzione della memoria centrale( I bus non vengono controllati esplicitamente) Copiare il contenuto di R1 in R2 non richiede di controllare il bus in modo esplicito( I due bus principali sono realizzati mediante diversi bus) Il bus verso la memoria è realizzato mediante un bus dati ed un bus indirizzi( Lo scambio di dati con i dispositivi di I/O avviene

attraverso la memoria centrale) I dispositivi vengono controllati esplicitamente dal programmatore) I dispositivi generano segnali che il programmatore vede

© 2007 F. Bergenti Architettura degli Elaboratori 216

Memoria Centrale* Memoria a semiconduttore di tipo RAM che permette di leggere/scrivere dati (di larghezza fissa) in base ad un indirizzo+ L’accesso richiede un

tempo indipendente dall’indirizzo* Alcune zone sono riservate

per usi particolari+ E.g., buffer di l’I/O, memoria video, ...

FFFF0

0CF01

01CC2

01CC3

11EC4

...

00001000

datiindirizzo

cella di memoria

Architettura degli Elaboratori

© 2007 F. Bergenti 55

© 2007 F. Bergenti Architettura degli Elaboratori 217

Stack (1/3), Una struttura dati è detta sequenziale se i dati possono solo essere- Aggiunti (per

memorizzarli)- Rimossi (per leggerli), La cronologia delle modifiche identifica il primoe l’ultimo dato, Due politiche possibili- Code, politica FIFO (First-

In-First-Out)- Pile (o stack), politica LIFO (Last-In-First-Out)

FFFF1

0CF02

01CC3

01CC4

11EC5

datiordine

primodato

ultimo dato

© 2007 F. Bergenti Architettura degli Elaboratori 218

Stack (2/3). Le operazioni su uno stack sono/ Push, aggiungi in testa

alla pila/ Pop, rimuovi dalla testa della pila. Attenzione/ Non è possibile fare pop se la pila è vuota/ Non è possibile fare push se la pila è piena (pila limitata)

FFFF1

0CF02

01CC3

01CC4

11EC5

datiordine

testa della pila

© 2007 F. Bergenti Architettura degli Elaboratori 219

Stack (3/3), Normalmente lo stack èuna parte della memoria centrale- Spesso di tipo push-down, Se SP è l’indirizzo della testa della pila- push(X)

mem[SP--]=X- pop()

return mem[++SP], SP è detto stack pointer- Viene memorizzato in un registro dedicato

FFFF95

0CF096

01CC97

01CC98

11EC99

100

datiindirizzo

top dellostack

crescitadella pila

© 2007 F. Bergenti Architettura degli Elaboratori 220

Ciclo Fetch/Execute0 Viene letta un’istruzione dalla memoria (fetch dell’istruzione)1 L’ istruzione è codificata mediante un numero detto codice operativo1 L’indirizzo da cui leggere l’istruzione è memorizzato in un registro dedicato detto PC (Program Counter)1 L’istruzione viene memorizzata nel registro IR (Instruction Register)0 Vengono letti gli eventuali operandi dalla memoria1 Gli operandi vengono memorizzati in registri di uso generale (general purpose register)1 È l’istruzione ad indicare quanti operandi servono e in quali registri memorizzarli0 Viene eseguita l’istruzione richiesta1 Se l’istruzione produce un risultato viene memorizzato in un registro0 Se l’istruzione lo prevede, vengono scritti gli eventuali risultati nella

memoria1 È l’istruzione (o i suoi operandi) ad indicare a quale indirizzo scrivere i risultati0 Viene incrementato il PC (adeguatamente) ed il ciclo ricomincia

Architettura degli Elaboratori

© 2007 F. Bergenti 56

© 2007 F. Bergenti Architettura degli Elaboratori 221

Calcolatori RISC e CISC (1/3)2 Scegliere quante e quali istruzioni fornire al programmatore del linguaggio macchina dipende da3 Potenzialità effettive dell’hardware4 E.g., operazioni implementate nella ALU3 Vincoli intrinseci dell’hardware4 E.g., dimensioni dei registri3 Altre decisioni (di progetto) su quanto complesso realizzare

l’hardware4 Costi, utilizzi previsti del sistema, complessità del progetto, ...2 Con il termine ISA (Instruction Set Architecture) si intende l’insieme delle istruzioni del linguaggio macchina2 Tipicamente si usano due linee guida per progettare una ISA3 RISC (Riduced Instruction Set Computer)3 CISC (Complex Instruction Set Computer)

© 2007 F. Bergenti Architettura degli Elaboratori 222

Calcolatori RISC e CISC (2/3)5 Calcolatori RISC (e.g., PowerPC, ...)6 Insieme di istruzioni ridotto (pocheistruzioni)6 Le poche istruzioni offerte implementanofunzionalità molto semplici6 Le poche istruzioni offerte sono molto veloci7 L’hardware è ottimizzato per eseguire quelle poche istruzioni

(che sono anche semplici)6 A parità di tecnologia, ridurre il numero e la complessitàdelle istruzioni consente di integrare più memoria (registri e cache) nella CPU7 Minore necessità di scambiare dati con la memoria centrale

© 2007 F. Bergenti Architettura degli Elaboratori 223

Calcolatori RISC e CISC (3/3)5 In ultima analisi, scegliere tra un progetto tipo RISC o CISC dipende da quanto vogliamo realizzare mediante il software6 1 istruzione CISC ≈ 5/6 istruzione RISC6 1 istruzione RISC ≈ 10 volte più veloce di 1 istruzione

CISC6 Servono compilatori capaci di sfruttare al meglio le caratteristiche delle istruzioni (compilatori con fase di ottimizzazione del codice generato)5 Le istruzioni RISC sono pensate per6 Poter essere messe in esecuzione velocemente6 Sfruttare al meglio la pipeline interna alla CPU

© 2007 F. Bergenti Architettura degli Elaboratori 224

Pipeline e Throughput (1/2)

7 Ogni istruzione passa attraverso una serie di fasi per essere completata7 Ogni fase è implementata da moduli hardware diversi8 Possibilità di sfruttare il parallelismo sui vari moduli hardware8 E.g., periodo di clock 2ns (10 ns per istruzione), sfruttando la pipeline si

lavora a 500MIPS (Millions of Instructions Per Second) anziché 100MIPS

Architettura degli Elaboratori

© 2007 F. Bergenti 57

© 2007 F. Bergenti Architettura degli Elaboratori 225

Pipeline e Throughput (2/2)9 Due istruzioni A e B possono essere messe in pipeline se B può iniziare prima che termini A(senza causare problemi): E.g. (semplificando un po’), mem[0]= R1, mem[1]=R29 Realizzare una pipeline richiede: Istruzioni pensate per essere messe in pipeline: Struttura hardware aggiuntiva progettata appositamente9 Throughput: numero di istruzioni che iniziano nell’unità di tempo: A regime, il throughput misura la velocità di una CPU: La pipeline è pensata per aumentare il throughput

© 2007 F. Bergenti Architettura degli Elaboratori 226

Linguaggio Assembly (1/3); Quando si parla di linguaggio assembly si intende un linguaggio costituito da codici mnemonici corrispondenti alle istruzioni del linguaggio macchina; L’assembly fornisce altre facilitazioni al programmatore< Etichette simboliche per variabili e indirizzi< Strumenti per l’allocazione in memoria di costanti< Preprocessore (macro, inclusione di file, ...); Un programma detto assemblatore (assembler) traduce i sorgenti assembly in sequenze di istruzioni in linguaggio macchina< Di solito, l’assemblatore prevede la presenza di un sistema

operativo< Il codice generato (linguaggio macchina) è pensato per essere caricato e posto in esecuzione da un sistema operativo

© 2007 F. Bergenti Architettura degli Elaboratori 227

Linguaggio Assembly (2/3)9 Un programma (breve)scritto in assembly èsolitamente 2/3 volte più veloce di un equivalente scritto in C9 L’ottimizzazione dipiccole porzioni dicodice (tuning) è una tecnica per migliorare le prestazioni dei programmi9 L’assembly è spesso: L’unico linguaggio di programmazione per sistemi

industriali basati su micro-controllori: Ancora utile in applicazioni real-time

© 2007 F. Bergenti Architettura degli Elaboratori 228

Linguaggio Assembly (3/3)9 Rispetto all’uso di un linguaggio ad alto livello, sviluppare un programma in assembly: Richiede molto più tempo: È più rischioso dal punto di vista degli errori di codifica

(bug): Offre minori possibilità di riuso di codice9 In generale, si ritiene che l’uso di un linguaggio ad alto livello mediante un compilatore con una buona fase di ottimizzazione consenta di sfruttare il meglio dei due approcci: Il GCC (GNU C Compiler) ha varie fasi di ottimizzazione

che generano codice sempre più compatto ed efficiente a scapito del tempo richiesto per la compilazione

Architettura degli Elaboratori

© 2007 F. Bergenti 58

© 2007 F. Bergenti Architettura degli Elaboratori 229

Assembly IA-32= IA-32 è il linguaggio macchina utilizzato dai processori x86-compatibili a 32 bit> Intel 80386, Intel Pentium, AMD Athlon, ...= Anche se hanno lo stesso linguaggio macchina, le CPU hanno prestazioni diverse> Sono compatibili, non sono equivalenti= Verrà utilizzato il GAS (GNU Assembler) come assemblatore di riferimento> Sintassi tipica non compatibile con altri assemblatori> Utilizzabile sia con Microsoft Windows (disponibile con

MinGW) che con Linux

© 2007 F. Bergenti Architettura degli Elaboratori 230

Assemblatore e Linker (1/2)? In generale, l’assemblatore genera codice in linguaggio macchina@ Non ancora pronto per essere avviato dal sistema operativoA E.g., non è detto che sia presente un punto d’ingresso (funzione main)@ Non completo perché potrebbero mancare dei collegamenti esterni? Un file generato dall’assemblatore prende il nome di codice oggetto(della compilazione)? Dato un insieme di codici oggetto, il linker genera un codice eseguibile@ Pronto per essere avviato dal sistema operativo@ Completo di tutti i collegamentiA Tranne eventuali collegamenti che vengono risolti dal sistema operativo prima

dell’effettiva attivazione (dal modulo loader del sistema operativo)? I codici oggetto che il loader del sistema operativo collega prendono il nome di shared object (nomenclatura Unix/Linux) o DLL (Dynamic Link Library, nomenclatura Microsoft Windows)

© 2007 F. Bergenti Architettura degli Elaboratori 231

Assemblatore e Linker (2/2)

? L’assemblatore GAS viene invocato con il comando as o gcc -Sas -o <object>.o <source>.asm? Il linker GNU viene invocato con il comando ld o (più semplicemente)

gccgcc -o <executable> <object 1>.o ... <object n>.o

SourceFile

ObjectFile

ListingFile

LinkLibrary

ExecutableFile

MapFile

Output

Step 1: text editor

Step 2:assembler

Step 3:linker

Step 4:OS loader

© 2007 F. Bergenti Architettura degli Elaboratori 232

Tipicità della Sintassi GAS? La sintassi GAS (detta anche AT&T) non è compatibile con la sintassi Microsoft/Intel (usata da MASM, TASM, NASM, ...)? Per le operazioni a due operandi, la sintassi GAS prevede che venga prima indicata la sorgente e poi la destinazione@ Nella sintassi Microsoft/Intel è l’opposto? La sintassi GAS prevede che ogni costante non preceduta da $ o %sia un indirizzo di memoria@ Gli assemblatori Microsoft/Intel non adottano nessuna convenzione? La sintassi GAS, i nomi dei registri vengono preceduti da %@ Non viene richiesto dagli assemblatori con sintassi Microsoft/Intel? La sintassi GAS, le costanti vengono precedute da $@ I numeri esadecimali si indicano con il prefisso 0x (come in C)? La dimensione degli operandi nella sintassi GAS viene indicata esplicitamente nel codice operativo@ Si usano i suffissi b (8 bit), w (16 bit) e l (32 bit)@ Nella sintassi IntelMicrosoft/, i suffissi non sono richiesti

Architettura degli Elaboratori

© 2007 F. Bergenti 59

© 2007 F. Bergenti Architettura degli Elaboratori 233

Sorgente Assembly (1/4)B Un file sorgente assembly è un file di testo (ASCII) formato da una lista di statementB Ogni statement ha un formato fisso di 4 campi (tutti opzionali, in ordine fissato)B I 4 campi sono (in ordine)C Campo label, un etichetta che identifica univocamente

l’indirizzo in memoria dello statementC Campo opcode, una stringa (mnemonica) corrispondente al codice operativoC Campo operandi, gli operandi dell’istruzioneC Campo commento

© 2007 F. Bergenti Architettura degli Elaboratori 234

Sorgente Assembly (2/4)D Una label è una stringa seguita da ‘:’E La stringa inizia con una letteraE La stringa può contenere lettere, cifre e alcuni caratteri speciali (usiamo solo ‘_’)D Gli opcode sono parole chiave che

l’assemblatore riconosceE Istruzioni, che vengono tradotte nelle equivalenti del linguaggio macchinaE Direttive, che guidano l’assemblatore nella generazione del codice oggettoF Il GAS prevede che le direttive inizino con il simbolo ‘.’

© 2007 F. Bergenti Architettura degli Elaboratori 235

Sorgente Assembly (3/4)D Gli operandi possono essere di vario tipoE Costanti (operandi immediati), registri, indirizzi di memoriaE Se sono presenti due operandi, il primo è detto sorgente e il secondo destinazioneD I commenti sono fondamentali nella

programmazione assemblyE Ritenuti più importanti rispetto alla pratica di programmazione in linguaggi di alto livelloE Iniziano con un ‘#’E Tutti gli statement andrebbero commentati

© 2007 F. Bergenti Architettura degli Elaboratori 236

Sorgente Assembly (4/4)G Gli statement di un programma assembly sono divisi in sezioniH Testo del programmaH DatiH Sezioni con lo stesso nome

vengono fuse dal linkerG Spesso conviene definire delle costantiH Che scompaiono nel codice

oggettoG Il punto d’ingresso (entry point) è l’etichetta globale _mainH main se il GCC è versione

superiore alla 4

.global _main

.equ FINE_STRINGA 0

.datav_byte: .byte 0xFFv_word: .word 0xFFFFv_int: .int 0xFFFFFFFFvettore: .space 100stringa: .asciz “123\n”

.text_main:

...

ret # fine procedura _main

Architettura degli Elaboratori

© 2007 F. Bergenti 60

© 2007 F. Bergenti Architettura degli Elaboratori 237

Modello della Memoria IA-32 (1/3)I IA-32 ha due tipi di modello di memoria segmented e flatJ Segmented, la memoria è divisa in 16k segmenti

di 4 Gbyte l’unoJ Flat, la memoria è un unico segmento di 4 GbyteI Tipicamente, i sistemi operativi più comuni (Microsoft Windows e Linux) utilizzano solo il modello flat (indirizzi a 32 bit)J Offre il vantaggio che un indirizzo può essere

memorizzato completamente in un registroJ Il GAS si riferisce implicitamente al modello flat

© 2007 F. Bergenti Architettura degli Elaboratori 238

Modello della Memoria IA-32 (2/3)K I tipi dato di riferimento di IA-32 sono byte (8 bit), word (16 bit) e double word (32 bit)K ByteL 8 bit che iniziano a qualsiasi indirizzoL Numerati da 0 a 7, il bit meno significativo è il bit 0K WordL 2 byte che iniziano a qualsiasi indirizzoL Numerati da 0 a 15, il bit meno significativo è il bit 0L L’indirizzo del byte meno significativo coincide con l’indirizzo della word K Double wordL 4 byte che iniziano a qualsiasi indirizzoL Numerati da 0 a 31, il bit meno significativo è il bit 0L L’indirizzo del byte meno significativo coincide con l’indirizzo della double wordK IA-32 è un’architettura little endian, i byte meno significativi sono ad un indirizzo inferiore di quelli più significativiL Altre CPU (e.g., PowerPC) sono big endianK IA-32 è ottimizzato per word allineate ad indirizzi pari e per double word allineate ad indirizzi divisibili per 4L Anche se non viene richiesto che l’allineamento sia rispettato

© 2007 F. Bergenti Architettura degli Elaboratori 239

Modello della Memoria IA-32 (3/3)

© 2007 F. Bergenti Architettura degli Elaboratori 240

Memoria e Codice Sorgente

.global _main

.equ FINE_STRINGA 0

.datav_byte: .byte 0xFFvettore: .space 10stringa: .asciz “123\n”

.text_main:

...

ret # fine procedura _main

??Base+16_main

0Base+15

stringa

vettore

v_byte

etichetta

10 (\n)Base+14

51 (3)Base+13

50 (2)Base+12

49 (1)Base+11

??Base+10

...

??Base+2

??Base+1

FFBase

dato (byte)indirizzo

Architettura degli Elaboratori

© 2007 F. Bergenti 61

© 2007 F. Bergenti Architettura degli Elaboratori 241

Tipi Dato IA-32M Varie operazioni di IA-32 lavorano su tipi dato diversiN Interi: byte, word o double word con segno. Rappresentati in complemento a 2. Il bit di segno è il più significativo (0 positivo, 1 negativo)N Ordinali (naturali): interi senza segnoN Indirizzi vicini: indirizzo logico di 32 bit contenente un offset all’interno di un segmento. È il tipo di indirizzo usato nel modello di memoria flatN Indirizzi lontani: indirizzo logico di 48 bit contenente 16 bit per individuare un segmento e 32 bit per individuare un offset all’interno di un segmento. Viene utilizzato nel modello di memoria segmentedN Stringhe (di byte): sequenza continua di byte (da 0 a 4 Gbyte)N Altri che non consideriamo (BCD, ...)

© 2007 F. Bergenti Architettura degli Elaboratori 242

Registri IA-32 (1/2)

© 2007 F. Bergenti Architettura degli Elaboratori 243

Registri IA-32 (2/2)M IA-32 contiene 8 registri a 32 bitN EAX, EBX, ECX, EDX, EBP, ESP, ESI e EDIN Per compatibilità con le architetture Intel a 8/16 bit, la parola bassa di ogni registro può essere indirizzata in modo esplicitoO AX, BX, CX, DX, BP, SP, SI e DIN I singoli byte dei registri a 16 bit AX, BX, CX e DX possono essere indirizzati esplicitamenteO Byte alti: AH, BH, CH e DHO Byte bassi: AL, BL, CL e DLM Alcune istruzioni prevedono che gli operandi siano in

particolari registriN Ottimizza il numero e l’espressività dei codici operativiN Supporta la retro-compatibilità con le architetture Intel a 8/16 bit

© 2007 F. Bergenti Architettura degli Elaboratori 244

Registri IA-32 DedicatiP EIP (Instruction pointer) contiene l’indirizzo della prossima istruzione da eseguireQ Viene incrementato automaticamente durante il fetch delle istruzioniQ Modificato dalle istruzioni di saltoQ I programmi non lo modificano esplicitamenteP EFLAGS (Extended Flags) contiene i bit di stato della CPUQ I bit principali sono i cosiddetti condition codeQ Questi bit vengono scritti ad ogni ciclo dalla ALU e riflettono il risultato

dell’operazione più recenteQ I condition code (flag) più comuni sonoR CF (bit 0): 1 quando il risultato ha determinato riporto (carry)R PF (bit 2): 1 quando il risultato ha un numero pari di 1R AF (bit 4): 1 quando il risultato ha determinato riporto intermedio sul bit 3 (utile in codifica BCD, Binary Coded Decimal)R ZF (bit 6): 1 quando il risultato è zeroR SF (bit 7): bit segno, 1 quando il risultato è negativoR OF (bit 11): 1 quando il risultato ha causato overflow con operazioni in aritmetica intera con segno (complemento a 2)

Architettura degli Elaboratori

© 2007 F. Bergenti 62

© 2007 F. Bergenti Architettura degli Elaboratori 245

Registri di Segmento IA-32S IA-32 prevede 6 registri di segmento usati per identificare i 6 segmenti di memoria in uso da un programmaT CS, DS, SS, ES, FS e GSS In particolareT CS contiene l’indirizzo del segmento di codice (di testo)

attualeT DS contiene l’indirizzo del segmento dati attualeT SS contiene l’indirizzo del segmento usato per lo stack T ES, FS e GS contengono indirizzi di segmento usati dal programma per propri scopiS In modalità di indirizzamento flat, il programmatore

non usa mai esplicitamente questi registri

© 2007 F. Bergenti Architettura degli Elaboratori 246

Modalità di Indirizzamento IA-32U Gran parte delle istruzioni assembly consentono di copiare dati nei registri e nella memoriaU Le modalità di reperimento dei dati da copiare sono dette modalità di indirizzamentoV Le varie modalità di indirizzamento indicano i modi in cui la CPU può

reperire gli operandi delle istruzioniV Un operando può specificare cose diverseW Un registro, una costante, un indirizzo di memoria, un indirizzo di memoria al quale sommare (implicitamente) un offset, ...U Consideriamo l’istruzione movl SRC,DST che viene utilizzata per

copiare una double word da SRCa DSTmovl $0x10,%eax # immediato (eax=0x10)movl 0x100,%eax # diretto o assoluto (eax=mem[0x100] )movl %ebx,%eax # di un registro (eax=ebx)movl (%ebx),%eax # indiretto (eax=mem[ebx])movl -2(%ecx),%eax # indiretto con indice (eax=mem[e cx-2])

© 2007 F. Bergenti Architettura degli Elaboratori 247

Indirizzamento ImmediatoS L’operando è un valore costanteS La lunghezza del valore costante (1, 2, o 4 byte) dipende dal tipo di operazione e dai registri coinvoltimovb $10,%al # bytemovb $0xFF,%ah # bytemovw $1000,%ax # wordmovl $0x10FFEEEE,%eax # double wordS Per caricare la costante 0 in un registro è preferibile usare xorl %eax,%eaxT Questa operazione non richiede il caricamento di nessun

operando dalla memoria

© 2007 F. Bergenti Architettura degli Elaboratori 248

Indirizzamento Diretto (o Assoluto)X L’operando specifica un indirizzo di memoriamovl 0x100,%eax # double word movw 0x100,%ax # wordmovb 0x100,%al # bytemovl %eax,0x100 # double word movw %ax,0x100 # wordmovb %al,0x100 # byteX Attenzione: IA-32 è little endian e quindi il byte basso è il primo memorizzato a partire dall’indirizzo indicato

Architettura degli Elaboratori

© 2007 F. Bergenti 63

© 2007 F. Bergenti Architettura degli Elaboratori 249

Indirizzamento Mediante RegistriY Indirizzamento di un registroUn registro può essere usato per contenere un dato da scrivere o per ricevere un dato in scritturamovb %al,%ahY Indirizzamento indirettoL’operando che è letto o scritto in memoria all’indirizzo specificato dal contenuto di un altro registromovl %eax,(%ecx)movl (0x100),%eaxY Indirizzamento indiretto con indiceL’indirizzo di memoria è determinato a partire da un valore costante a cui viene sommato il contenuto di un registro (usato come indice)movl %eax,vettore(%ecx)movl %eax,vettore(%ebx,%ecx,4)

© 2007 F. Bergenti Architettura degli Elaboratori 250

Istruzioni Assembly IA-32Y IA-32 è un’architettura CISC ed è dotata di molte istruzioniZ Copia e spostamento di valori da/verso la memoria ed i registriZ Aritmetica interaZ Operazioni logiche e di spostamento di bitZ Istruzioni di salto in-/condizionatoZ Manipolazione di stringheZ Aritmetica in virgola mobileZ MMX (Multi-Media eXtension)Z Supporto al sistema operativoZ Controllo dell’I/OZ ...Y Ogni istruzione, può essere utilizzata in modo diverso a secondadelle modalità d’indirizzamentoZ Esistono però delle limitazioni che impediscono l’utilizzo di certi registri

con certe istruzioni

© 2007 F. Bergenti Architettura degli Elaboratori 251

movX [ La sintassi GAS prevede\ Lunghezza

esplicita (movb, ...)\ % e $ negli operandi[ Non esiste una

mov tra due celle di memoria

© 2007 F. Bergenti Architettura degli Elaboratori 252

Salti In-/Condizionati] Le istruzioni di test e salto vengono utilizzate per realizzare un salto ad un’etichetta specificata^ Incondizionato, il salto avviene sempre^ Condizionato, il salto avviene solo in certe

condizioni[ Le condizioni sono verificate sulla base dei flag di stato della CPU (flag SF, ZF, ...)] I salti condizionati sono utilizzati per

implementare i costrutti while e for dei linguaggi ad alto livello

Architettura degli Elaboratori

© 2007 F. Bergenti 64

© 2007 F. Bergenti Architettura degli Elaboratori 253

testX e cmpX_ testX X,YEsegue l’AND di X ed Y. Il risultato non viene memorizzato ma viene utilizzato per impostare i flag SF, ZF e PF` SF viene impostato al valore del bit più significativo del risultato` ZF viene impostato a 1 se il risultato è 0` PF viene impostato a 1 se il risultato ha un numero pari di 1_ cmpX X,YEsegue Y-X . Il risultato non viene memorizzato ma viene utilizzato per impostare i flag CF, SF, ZF, PF, OF e AF` CF viene impostato a 1 se il risultato ha determinato un riporto` AF viene impostato a 1 se il risultato ha determinato riporto

intermedio sul bit 3 ` OF viene impostato a 1 se il risultato ha causato overflow con operazioni in aritmetica intera con segno (complemento a 2)

© 2007 F. Bergenti Architettura degli Elaboratori 254

jmp e jCC (1/2)a jmp ADDREsegue un salto incondizionato all’indirizzo ADDR. Il salto viene eseguito caricando in EIP il valore ADDR (relativo o assoluto)jmp fine # indirizzo relativojmp *(%edx) # indirizzo assolutoa jCC ADDRSalta all’indirizzo ADDRse la condizione espressa dal condition code CCè veracmpl %eax,%ecxje addr # salta se %eax = %ecxcmpl %eax,%ecxjl addr # salta se %ecx < %eax (unsigned)cmpl %eax,%ecxjle addr # salta se %ecx <= %eax (unsigned)

© 2007 F. Bergenti Architettura degli Elaboratori 255

jmp e jCC (2/2)

© 2007 F. Bergenti Architettura degli Elaboratori 256

cmovCC, jcxz e jecxz_ cmovCCX SRC,DSTCome movXma la copia viene eseguita solo se il condition code CCè vera cmpw %ax,%bxcmovzw %cx,%dx # se ZF=1 (%ax=%bx) %cx=%dx_ jcxz e jecxz usano i registri %cx ed %ecx come condizione per i saltijcxz ADDR # salta ad ADDR se %cx=0jecxz ADDR # salta ad ADDR se %ecx=0ADDRè un indirizzo relativo ad 8 bit (se l’indirizzo si trova distante dal punto di salto l’assemblatore segnala un errore)

Architettura degli Elaboratori

© 2007 F. Bergenti 65

© 2007 F. Bergenti Architettura degli Elaboratori 257

loop e loopCCb loop ADDRUn’istruzione compatta e ottimizzata per l’esecuzione di cicli che utilizza %ecx come contatore%ecx viene decrementato di un’unità e viene confrontato con 0; se diverso salta ad ADDRADDRpuò essere solo un indirizzo relativo a 8 bitb loopCC ADDRContinua a saltare ad ADDRmentre %ecx è diverso da 0 e la condizione CCè veraDue condizioni posso causare l’uscita dal ciclo (è sufficiente che se ne verifichi una)c %ecx vale 0c CCfalsa (CCpuò essere E, Z, NE, NZ sul flag ZF)

© 2007 F. Bergenti Architettura degli Elaboratori 258

xchgX e lead xchgX X,Y

Scambia il contenuto di X e Y in un’unica operazionexchgl %eax,%ebxd lea SRC,DSTCarica in DST(normalmente un registro a 32 bit) l’indirizzo di SRC(un riferimento in memoria)lea vettore,%eaxlea (0x10456de4),%eaxlea 10(,%ebx,2),%eax

© 2007 F. Bergenti Architettura degli Elaboratori 259

addX e subXd addX SRC,DSTEsegue la somma di DSTe SRC; il risultato è posto in DSTIn base al risultato sono impostati i flag: OF, SF, ZF, AF, CF e PFd subX SRC,DSTEsegue la sottrazione DST-SRCe memorizza il risultato in DSTIn base al risultato sono impostati i flag: OF, SF, ZF, AF, CF e PF

© 2007 F. Bergenti Architettura degli Elaboratori 260

mulX

e mulX SRCEsegue una moltiplicazione senza segnoSi comporta in modo diverso a seconda della dimensione dell’operando SRCf Se l’operando è a 8 bit, la moltiplicazione è eseguita tra %al e SRCe il risultato

copiato in %axf Se l’operando è a 16 bit, %axviene moltiplicato per SRCe il risultato è memorizzato in %dx:%ax (in %dxsono contenuti i 16 bit più significativi e in %ax i 16 bit meno significativi)f Se l’operando è a 32 bit %eax viene moltiplicato per SRCe si fa uso di %edx per memorizzare il bit più significativi del risultato (che è a 64 bit)e Attenzione: non è possibile usare un operando immediato per SRC

Architettura degli Elaboratori

© 2007 F. Bergenti 66

© 2007 F. Bergenti Architettura degli Elaboratori 261

divX

g divX SRCEsegue una divisione senza segnoSi comporta in modo diverso a seconda della dimensione dell’operando SRCh Se l’operando è a 8 bit, la divisione è eseguita tra %axe SRCe il quoziente è in %al

e il resto in %ahh Se l’operando è a 16 bit, %dx:%ax viene diviso per SRCe il quoziente è in %ax, mentre il resto è in %dxh Se l’operando è a 32 bit %edx:eax viene diviso per SRCe si fa uso di %eax per il quoziente e di %edx per il restog Attenzione: SRC viene generato un errore (eccezione run-time)

© 2007 F. Bergenti Architettura degli Elaboratori 262

imulX e idivXi imulX esegue una moltiplicazione intera con segno (gli operandi sono in complemento a 2)i imulX prevede due formati principaliimulX SRCimulX SRC,DST # DST=DST*SRCNel primo caso il funzionamento è analogo a mulX(per quanto riguarda i registri utilizzati)Nel secondo caso SRCpuò essere anche un valore immediatoi idivX esegue una divisione intera con segno in modo analogo a divX

© 2007 F. Bergenti Architettura degli Elaboratori 263

incX e decXj incX DSTIncrementa di 1 il valore specificato da DST(senza alterare il flag CF)Attenzione: se DSTha raggiunto il valore massimo l’istruzione di incremento causa overflow senza che CF o OF vengano impostatiL’unico flag utilizzabile per verificare l’overflow è ZFj decX DSTDecrementa di 1 il valore specificato da DST (senza alterare il flag CF)Attenzione: per verificare undeflow (traboccamento sotto lo zero) può essere utilizzato il flag di segno SF

© 2007 F. Bergenti Architettura degli Elaboratori 264

Istruzioni Logichek notX DSTComplementa il valore di DSTe lo scrive in DSTk andX/orX/xorX SRC,DSTAND/OR/XOR tra SRCe DSTe il risultato viene sovrascritto in DSTk salX/sarX N,DSTShift aritmetico a sinistra/destra in DSTdi un numero di bit specificato da N (compreso tra 0 e 31)N può essere un valore immediato a 8 bit oppure il registro %clNel caso di salX , per ogni shift di 1 posizione il bit meno significativo assume valore 0, mentre il bit più significativo finisce in CFNel caso di sarX , per ogni shift di 1 posizione, il bit meno significativo fuorisce e finisce in CF, mentre il bit più significativo MSB estende il segno (stesso valore del precedente MSB)k shlX/shrX N,DSTShift logico a sinistra/destra in DSTdi un numero di bit specificato da N (compreso tra 0 e 31)N può essere un valore immediato a 8 bit oppure il registro %clshlX opera in modo identico a salXshrX a differenza di sarX non estende il bit di segno ma pone a 0 l’MSB entrante

Architettura degli Elaboratori

© 2007 F. Bergenti 67

© 2007 F. Bergenti Architettura degli Elaboratori 265

Stack in IA-32l IA-32 prevede stack multipli, ognuno in un segmento separato di memorial Il registro ESP (Extended Stack Pointer) individua la cima dello stackl Lo stack è push-down ed è manipolato dam Istruzioni di push e di popm Chiamate a procedura (e relativo ritorno)m Interruptl EBP (Extended Base Pointer) è un registro chiamato frame base pointer ed è il più utile per manipolare direttamente lo stackm Contiene l’indirizzo base dello stack della procedura correntem Viene modificato solo all’ingresso ed all’uscita da una proceduram L’accesso in lettura (con offset costante) è ottimizzato

© 2007 F. Bergenti Architettura degli Elaboratori 266

pushX e popXn La gestione dello stack in IA-32 prevede solo dati a 32 bit o 16 bito È sempre preferibile tenere lo stack allineato a 32 bitn pushX SRCPone il valore SRCsulla cima dello stackpushl %eaxn popX DSTRimuove il valore alla cima dello stack e lo salva in DSTpopl %eax

© 2007 F. Bergenti Architettura degli Elaboratori 267

call e ret (1/2)

© 2007 F. Bergenti Architettura degli Elaboratori 268

call e ret (2/2)p call ADDRProsegue l’esecuzione dall’indirizzo ADDRPrima di eseguire il salto memorizza il valore di %eip (che punta all’istruzione successiva a call ) in cima allo stack (il valore di %esp cambia a seguito di call e sulla cima dello stack viene caricata una double word equivalente a %eip)p retQuando una procedura termina (con ret ), un’istruzione tipo popl %eip causa il ritorno all’istruzione successiva al punto in cui è stata chiamata la proceduraq Attenzione: non è mai possibile manipolare %eip direttamentep Usando call e ret è possibile realizzare delle procedure utilizzando i registri (o lo stack) per passare parametri ed i valori di ritornoq In assembly, non ci sono differenze tra procedure e funzioni

Architettura degli Elaboratori

© 2007 F. Bergenti 68

© 2007 F. Bergenti Architettura degli Elaboratori 269

Procedure e Funzionir call e ret da soli non bastano nei casi realis Servono delle convenzioni sul passaggio dei parametri e sui valori di ritornor È importante essere inter-operabili con procedure

scritte con linguaggi di alto livellos Poter chiamare/poter essere chiamatis Ogni compilatore può decidere di adottare specifiche convenzioni (spesso i compilatori Pascal e C adottano convenzioni diverse)s Di solito (ma praticamente sempre in ambiente Linux o Microsoft Windows) si adottano le convenzioni del C

© 2007 F. Bergenti Architettura degli Elaboratori 270

Stack Frame (1/2)t Area di stack (anche detta record di attivazione) che viene creata al momento della chiamata ad una procedura e contieneu Indirizzo di ritornou Parametri attuali passati alla procedurau Registri salvati con lo scopo di ripristinarli all’uscita della procedurau Variabili locali alla procedurat Viene creato come segueu Il chiamante mette i parametri attuali in cima allo stack e chiama la

procedura (con call )u L’uso di call mette in cima allo stack l’indirizzo di ritornou La procedura chiamata salva %ebp nello stack e imposta %ebp e %espu Se servono variabili locali, viene sottratto ad %esp lo spazio necessariot Viene distrutto all’uscita dalla procedurau La procedura chiamata ripristina %esp (con %ebp), quindi ripristina %ebp e ritorna (con ret )u Il chiamante trova il risultato della procedura (funzione) in %eax e toglie i parametri dallo stack (sommando una costante ad %esp)

© 2007 F. Bergenti Architettura degli Elaboratori 271

Stack Frame (2/2)

ret addr

ebpEBP

ESP

local variables

[EBP+4]

[EBP+8]

[EBP-4]

parameters

saved registers ebp

ebp

ebp

ESP

EBP

© 2007 F. Bergenti Architettura degli Elaboratori 272

Chiamata ad una Procedura

pushl $2 # secondo argomentopushl $1 # primo argomentocall somma # chiamata a int somma(a,b)addl $8, %esp # allinea lo stack

# (2 argomenti)movl %eax, ... # usa il risultato

1

2EBP

[EBP-4]

[EBP-8]

Preambolo

Post-ambolo

ESP

A causa dei due pushldei parametri

Architettura degli Elaboratori

© 2007 F. Bergenti 69

© 2007 F. Bergenti Architettura degli Elaboratori 273

Implementazione di una Procedura

somma:pushl %ebpmovl %esp, %ebp

movl 12(%ebp),%eaxaddl 8(%ebp),%eax

popl %ebpret

EBP

indirizzo ret

1

2

EBP=ESP

[EBP+12]

[EBP+8]

[EBP+4]

Preambolo

Post-ambolo

© 2007 F. Bergenti Architettura degli Elaboratori 274

Variabili Localiv Le variabili locali ad una procedura sono create nello stack frame appena sotto %ebpv Si riserva lo spazio sottraendo la loro dimensione complessiva (in byte) a %espprocedura:

pushl %ebp

movl %esp,%ebp

subl %8,%esp

movl $1,-4(%ebp)

movl $2,-8(%ebp)

Due variabili intere (8 byte)

Sono inizializzate a run-time

© 2007 F. Bergenti Architettura degli Elaboratori 275

enter e leave

procedura:# 8 byte per le

variabili locali

enter 8.

.

.

leave

ret

procedura:pushl %ebp

movl %esp,%ebp

# 8 byte per le variabili locali

subl $8,%esp

.

.

.

movl %ebp,%esppopl %ebp

ret

© 2007 F. Bergenti Architettura degli Elaboratori 276

Manipolazione di Stringhew Le stringhe sono vettori di byte e IA-32 mette a disposizione una serie di istruzioni ottimizzate per la loro manipolazione x Indipendentemente dalla codifica ASCII, trattano gli

elementi come bytex Utilizzano due registri dedicati ESI (Extended Source Index) e EDI (Extended Destination Index) utilizzati come indirizzo dell’elemento corrente nella stringa sorgente o destinazionew Non vengono comunemente usate dai compilatori

dei linguaggi di programmazione ad alto livello

Architettura degli Elaboratori

© 2007 F. Bergenti 70

© 2007 F. Bergenti Architettura degli Elaboratori 277

Istruzioni Floating-Pointy IA-32 introduce registri aggiuntivi dedicati all’unità floating-pointz Anche se accessibili singolarmente, vengono trattati come uno stacky In base alle loro funzionalità, le operazioni floating-point possono essere raggruppate inz Trasferimento dati: carica (FLD), salva (FST), ...z Operazioni: somma (FADD), sottrazione (FSUB), moltiplicazione (FMUL), divisione

(FDIV), radice quadrata (FSQRT), ...z Confronto: non è possibile confrontare con cmpX valori floating point, sono quindi necessarie operazioni di confronto dedicate (FCOM, ...)z Funzioni transcendenti: seno (FSIN), coseno (FCOS), logaritmo (FYL2X), esponenziale (F2XM1), ...z Caricamento di costanti note: quali 0, 1, {, e, ... nei registri senza dover caricarne il valore dalla memoriaz Controllo dell’FPU: inizializzazione (FINIT), sincronizzazione, ...y Tutte le operazioni aritmetiche floating point sono eseguite in formato doppia

precisione estesa IEEE 754 (80 bit)z Se i risultati devono essere scritti in variabili o in memoria in formato più corto viene eseguita una conversione

© 2007 F. Bergenti Architettura degli Elaboratori 278

MMX| MMX (Multi-Media eXtension) nasce a partire dal Pentium Pro e viene incorporato in tutti i processori Intel successivi| Un potente meccanismo che consente di utilizzare il processore come macchina SIMD (Single Instruction Multiple Data)} Eseguire in parallelo la stessa operazione su più dati} E.g., attraverso una sola istruzione MMX è possibile

eseguire in parallelo 4 somme su parole di 2 byte| MMX opera solo su aritmetica intera ed introduce 8 nuovi registri a 64 bit

© 2007 F. Bergenti Architettura degli Elaboratori 279

SSE~ A partire dal Pentium III è stato introdotto SSE (Streaming SIMD Extensions) � Aggiunge 8 nuovi registri a 128 bit� Sui nuovi registri è possibile eseguire operazioni SIMD su floating point

in singola precisione� Estende anche le funzionalità MMX� ..~ A partire dal Pentium 4 (nel 2001) è stato introdotto SSE2� Consente di eseguire operazioni SIMD su floating point in doppiaprecisione� Estende ulteriormente MMX� ...~ Le istruzioni SSE3 sono state introdotte agli inizi del 2004 con il

Pentium 4� SSE3 aggiunge 13 nuove istruzioni rispetto a SSE2� ...