1 - UNISA

Transcript

1 - UNISA
Il linguaggio dei computer:
rappresentazione in binario e algoritmi di
conversione
26 settembre 2016
Architettura degli Elaboratori
L’ Architettura (informatica) è l’insieme dei criteri in base
ai quali è progettato e realizzato un sistema informatico.
L’ Elaboratore (o calcolatore, o computer) è una
macchina in grado di eseguire autonomamente
sequenze di operazioni logiche-aritmetiche sui dati in
ingresso (input) e restituire i risultati di tali operazioni
in uscita (output)
Modello di calcolo
Achitettura Harward
La memoria è suddivisa in:
Memoria dati e
Memoria istruzioni
Studieremo il processore MIPS
• Un processore vero (vedi Appendice E)
• Sarà il nostro esempio di riferimento
per studiare i principi di progettazione
di un processore
Architettura Harward Modificata (Pipeline)
Studieremo UN processore particolare, ma per astrarre
concetti fondamentali della architettura degli elaboratori
Wikipedia dice….
• L'architettura MIPS (acronimo dell’inglese Microprocessor
without Interlocked Pipeline Stages) è un’architettura informatica per
microprocessori RISC sviluppata dalla MIPS Computer Systems Inc. (oggi MIPS
Technologies Inc.).
• Nel 1981 il professore John L. Hennessy della Stanford University avviò un
gruppo di ricerca sulle architetture RISC. Le ricerche del team di sviluppo
portarono allo sviluppo della prima generazione di processori MIPS.
• Il MIPS è utilizzato nel campo dei computer SGI, e ha trovato grossa diffusione
nell'ambito dei sistemi embedded, dei devices di Windows CE e nei router di
Cisco.
• Le console Nintendo64, Sony PlayStation, SonyPlayStation2 e Sony PlayStation
Portable utilizzano processori MIPS.
• Il disegno dell'architettura e del set di istruzioni è semplice e lineare e viene
spesso utilizzato come caso di studio nei corsi universitari indirizzati allo studio
delle architetture dei processori. L'architettura dei processori MIPS ha
influenzato le architetture di molti altri processori RISC tra i quali si segnala la
famiglia DEC Alpha.
Un altro MIPS……
MIPS
Nel videogioco Super Mario 64, il coniglio
si chiama Mips, con riferimento al
processore MIPS del Nintendo 64!
Specie:
Coniglio
Debutto in:
Super Mario 64 (1997)
Ultima
apparizione:
Mario Party 3 (cammeo)
(2001)
MIPS è un coniglio apparso nei sotterranei del castello della Principessa Peach in Super Mario 64.
Quando Mario gli si avvicina, MIPS scappa e se il giocatore riesce ad acchiapparlo gli dona una Superstella.
Dopo aver raccolto una cinquantina di Superstelle, MIPS ricompare nei sotterranei e dona al giocatore un'altra Superstella.
In Super Mario 64 DS, al post di MIPS compaiono diversi conigli che donano al giocatore delle chiavi necessarie per
sbloccare nuovi minigiochi. Insieme a Mario, MIPS è il primo personaggio ad essere stato creato all'interno del gioco.
Inizialmente MIPS venne utilizzato per testare le capacità del Nintendo 64, ma alla fine è stato inserito all'interno del gioco
per volere degli sviluppatori. In Mario Party 3, MIPS fa un cammeo nel tabellone Woody Woods.
Il nostro obiettivo finale
Una versione semplificata del processore MIPS. Lo schema contiene
l’unità di controllo, il modulo aritmetico (ALU), la memoria
Contenuti del corso
Il corso si propone di introdurre l’architettura dei calcolatori ed i principi che
sono alla base della loro progettazione. Verranno presentate struttura e
funzionalità dell’architettura di un calcolatore moderno.
Principali argomenti trattati durante il corso:
1) rappresentazione dell'informazione: - rappresentazione degli interi e
algoritmi di conversione per interi (dec-bin, bin-dec)) - rappresentazione e
aritmetica in complemento a due - rappresentazione in virgola mobile codifica ASCII
2) logica digitale: - algebra booleana - reti combinatorie e ALU - elementi di
memorizzazione: flip-flop, register file e moduli combinatori
3) linguaggio assembler di una macchina RISC
4) implementazione della unità di elaborazione
5) misura delle prestazioni, miglioramento delle prestazioni mediante pipeline
e gerarchie di memoria
Il linguaggio dei computer
Linguaggio dei computer
I computer «parlano» in binario:
Spento, acceso (dei circuiti elettrici)
ON, OFF
1,
0 bit = binary digit
Rappresentazione in binario
Cosa possiamo rappresentare in binario?
Numeri (interi, col segno, con la virgola)
Parole (codificando le lettere)
Istruzioni
Programma
«Informazione»
Idea fondamentale su cui sono costruiti i calcolatori:
programmi e dati rappresentati da numeri
Rappresentazione in binario
Quali/ quanti interi posso rappresentare con una sequenza di n bit?
n=1
0
1
n=2
n=3
0
0
1
1
0 00 = 0
0 01 = 1
0 10 = 2
0 11 = 3
1 00 = 4
1 01 = 5
1 10 = 6
1 11 = 7
0=0
1=1
0=2
1=3
n=4
0 000 = 0
0 001 = 1
0 010 = 2
0 011
0 100 .
0 101 .
0 110 .
0 111 .
1 000 .
1 001 .
.
1 010
1 011
1 100
1 101 = 13
1 110 = 14
1 111 = 15
Rappresentazione con n bit
Con n bit è possibile rappresentare
tutti i 2n interi compresi fra 0 e 2n-1
Perché?
Prova
Se con k bit posso rappresentare p sequenze distinte,
con k+1 bit posso rappresentare 2p sequenze distinte
1 bit
2 bit
3 bit
2 sequenze distinte
4 sequenze distinte
8 sequenze distinte
4 bit
16 sequenze distinte
.
.
.
k bit
.
.
.
2k sequenze distinte
Si formalizza con una prova per induzione.
Rappresentazione in binario
n=1
0
1
n=2
n=3
0
0
1
1
0 00 = 0
0 01 = 1
0 10 = 2
0 11 = 3
1 00 = 4
1 01 = 5
1 10 = 6
1 11 = 7
0=0
1=1
0=2
1=3
Ma perché 101 in binario rappresenta 5
e 1101 = 13?
n=4
0 000 = 0
0 001 = 1
0 010 = 2
0 011
0 100 .
0 101 .
0 110 .
0 111 .
1 000 .
1 001 .
.
1 010
1 011
1 100
1 101 = 13
1 110 = 14
1 111 = 15
Notazione decimale
… o notazione araba:
7 5 2 = 7  102 + 5  101 + 2  100
Ogni cifra ha un peso diverso secondo la posizione
che occupa:
7 centinaia
5 decine
2 unità
E’ una notazione posizionale
Notazione binaria
1 0 1 = 1  22 + 0  21 + 1  20 = 5
1 1 0 1 = 1  23 +1  22 + 0  21 + 1  20 = 13
Ogni cifra ha un peso diverso secondo la
posizione che occupa
E’ una notazione posizionale
Ambiguità
Per distinguere le due rappresentazioni:
(101)2 = (5) 10
(1101)2 = (13) 10
(1011)2 = (11) 10
Da binario a decimale
N = (10110101)2
N = 1  27 + 0  26 + 1  25 + 1  24 + 0  23 + 1  22 + 0  21 + 1  20
N  2 7  25  2 4  2 2  2 0 
 128  32  16  4  1  181
Da decimale in binario
N = (181)10
Cerco la più grande potenza di 2 contenuta in 181:
181 = 128 + 53 = 27 + 53
53 = 32 + 21 = 25 + 21
21 = 16 + 5 = 24 + 5
5 = 4+1 = 22+1
1 = 20
181 = 27+ 25+24 +22 + 20
20=1
21=2
22=4
23=8
24=16
25=32
26=64
27=128
28=256
181 = (10110101) 2
Nota: esiste un unico modo di esprimere un intero come somma di
potenze distinte di 2
Vedremo altri «algoritmi» per i passaggi da decimale in binario e
viceversa
Notazione posizionale (in base b generica)
La notazione posizionale è definita solo per 2 e 10?
Potremmo definirla per 8?
(1 0 1) 10 = 1  102 + 0  101 + 1  100
(1 0 1) 2 = 1  22 + 0  21 + 1  20 = (5) 10
(1 0 1) 8 = 1  82 + 0  81 + 1  80 = ( 65 ) 10
(1 1 0 1) 10 = 1  103 + 1  102 + 0  101 + 1  100
(1 1 0 1) 2 = 1  23 +1  22 + 0  21 + 1  20 = (13) 10
(1 1 0 1) 8 = 1  83 +1  82 + 0  81 + 1  80 = ( 577 ) 10
Notazione binaria per numeri naturali
In base 2.
I simboli ammessi sono 0,1.
Una sequenza / stringa di 0 e 1, di lunghezza n
an-1 an-2 …a1 a0
con ai  {0, 1} per i = 0, 1, …, n-1
rappresenta l’intero N:
N = (an-1 an-2 … a1 a0 )2 =
= an-1  2n-1 + an-2 2n-2 + … + a1 21 + a0 20
In notazione compatta:
n 1
i
N   ai 2
i 0
Notazione posizionale (in base b generica)
In base b.
I simboli ammessi sono 0,1, … , b-1.
Una sequenza / stringa di 0, 1, … , b-1, di lunghezza n
an-1 an-2 …a1 a0
con ai  {0, 1, … , b-1} per i = 0, 1, …, n-1
rappresenta l’intero N:
N = (an-1 an-2 … a1 a0 )b =
= an-1  bn-1 + an-2 bn-2 + … + a1 b1 + a0 b0
n 1
In notazione compatta:
i
N   ai b
i 0
Esempi
(234)10
2  102  3  10  4  23410
(234)8
2  82  3  8  4  15610
(234)16
2  162  3  16  4  56410
(101)10
1  102  0  10  1  10110
(101)8
1  82  0  8  1  6510
(101)2
1  22  0  2  1  510
Esercizio
• Da cosa sono caratterizzati i numeri pari in binario?
(11010)2 è pari?
• Dimostrare nel modo più formale, preciso e convincente
la vostra affermazione.
Algoritmi di conversione binario
decimale
• Da binario a decimale: moltiplico ogni cifra per
l’opportuna potenza di 2 e poi sommo
• Da decimale a binario: esprimo il numero come
somma di potenze di 2, partendo dalla più grande
potenza di 2 minore del numero
Esistono altri «algoritmi» per convertire un numero dalla
rappresentazione binaria alla decimale e viceversa.
Bisogna conoscere più metodi di soluzione! Per scegliere il
più adatto, veloce, …. Mai accontentarsi!
Algoritmi di conversione
Problema della conversione da binario a decimale
Dati: n bit an-1, an-2, … , a1, a0
Risultato: l’intero N tale che N = (an-1 an-2…a1a0)2
Algoritmo = procedimento di calcolo che risolve il
problema con una sequenza finita di passi elementari
Problema della conversione da decimale a binario
Dati: un intero N
Risultato: n bit an-1, an-2 , … , a1, a0 tali che
N = (an-1 an-2…a1a0)2
Verso un algoritmo di conversione da b=10
b = 10
N = (3752) 10
n=4
(3 7 5 2) 10 = 3  103 + 7  102 + 5  101 + 2  100
oppure lo possiamo ottenere così, leggendo la stringa da sinistra verso destra
(immaginate di non sapere quante cifre saranno):
3
3  10 + 7 = 37
37  10 + 5 = 375
375  10 + 2 = 3752
S3 =
S2 =
S1 =
S0 =
3
37
375
3752 = N
3752
3 7 52
3752
3752
Idea:
3 7 5 2 = 3  103 + 7  102 + 5  10 + 2 =
= (3  102 + 7  10 + 5 )  10 + 2 =
= ( (3  10 + 7)  10 + 5 )  10 + 2 =
= ( ( (3)  10 + 7)  10 + 5 )  10 + 2
Verso un algoritmo di conversione da b=2
b=2
N = (1101) 2
n=4
(1 1 0 1) 2 = 1  23 + 1  22 + 0  21 + 1  20
oppure lo possiamo ottenere così:
Idea:
1
12+1=3
32+0=6
6  2 + 1 = 13
S3 =
S2 =
S1 =
S0 =
1
3
6
13 = N
1101
1101
1101
1101
1 1 0 1 = 1  23 + 1  22 + 0  2 + 1 =
= (1  22 + 1  2+ 0 )  2 + 1 =
= ( (1  2 + 1)  2 + 0 )  2 + 1 =
= ( ( (1)  2 + 1)  2 + 0 )  2 + 1
Verso un algoritmo di conversione da b=2
N = (an-1 an-2…a1a0)2
N = an-12n-1+ an-22n-2+ …+ a12+ a0
= (an-12n-2+ an-22n-3+ …+ a22 + a1) 2 + a0
S0 = S1 2 + a0
= ( (an-12n-3+ an-12n-4+ …+ a2) 2 + a1) 2 + a0
S1 = S2 2 + a1
…..
…..
= ((… (an-12+ an-2) 2 + … + a2) 2 + a1)2 + a0
= ((… ( (an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0
S2 = S3 2 + a2
…..
Sn-2 = Sn-1 2 + an-2
Sn-1 = an-1
Algoritmo di conversione: binario in decimale
MSD=cifra più significativa
N = (an-1 an-2…a1a0)2
LSD=cifra meno significativa
N = ((… ( ( an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0
N= S0 = S1 2 + a0
S1 = S2 2 + a1
S2 = S3 2 + a2
…..
Sn-2 = Sn-1 2 + an-2
Sn-1 = an-1
Dal
basso
verso
l’alto:
da an-1
a a0 ;
da MSD
a LSD
Sn-1 = an-1
Sn-2 = an-2 + 2Sn-1
Sn-3 = an-3 + 2Sn-2
…..
Si = ai + 2Si+1
…..
S0 = a0+2S1
S0 =N
Sn-1 = an-1
Sn-2 = an-2+2Sn-1
Sn-3 = an-3+2Sn-2
…..
Si = ai+2Si+1
…..
S0 =N
Esempio 1
N = (a7 a6 a5 a4 a3 a2 a1a0)2
(1 0 1 1 0 1 0 1)2
S7 = a7 = 1
S6 = a6+2S7 = 0 + 2 = 2
S5 = a5+2S6 = 1 + 4 = 5
S4 = a4+2S5 = 1 + 10 = 11
S3 = a3+2S4 = 0 + 22 = 22
S2 = a2+2S3 = 1 + 44 = 45
S1 = a1+2S2 = 0 + 90 = 90
S0 = a0+2S1 = 1 + 180 = 181
n=8
Esempio 2
(11101001)2
n=8
S7 = a7 = 1
S6 = a6+2S7 = 1 + 2 = 3
S5 = a5+2S6 = 1 + 6 = 7
S4 = a4+2S5 = 0 + 14 = 14
S3 = a3+2S4 = 1 + 28 = 29
S2 = a2+2S3 = 0 + 58 = 58
S1 = a1+2S2 = 0 + 116 = 116
S0 = a0+2S1 = 1 + 232 = 233
Esempio 3
(11111111)2
n=8
S7 = a7 = 1
S6 = a6+2S7 = 1 + 2 = 3
S5 = a5+2S6 = 1 + 6 = 7
S4 = a4+2S5 = 1 + 14 = 15
S3 = a3+2S4 = 1 + 30 = 31
S2 = a2+2S3 = 1 + 62 = 63
S1 = a1+2S2 = 1 + 126 = 127
S0 = a0+2S1 = 1 + 254 = 255
Algoritmo di conversione: decimale in binario
N = (an-1 an-2…a1a0 )2
Dato: N. Risultato: an-1 , an-2 , …, a1 , a0 con ai = 0 o 1
Procedura inversa: dall’alto verso il basso da a0 ad an-1;
da LSD a MSD
a0 ed S1 sono rispettivamente il resto e il
N= S0 = S1 2 +a0
quoziente della divisione di N= S0 per 2.
S1 = S2 2 + a1
S2 = S3 2 + a2
……
Si = Si+1 2 + ai
……
Sn-2 = Sn-1 2 + an-2
Sn-1 = an-1
….
ai ed Si+1 sono rispettivamente il resto e
il quoziente della divisione di Si per 2.
….
Fino ad ottenere un Si =0.
Algoritmo delle divisioni successive
Esempio 1 (decimale in binario)
N=152
S0 = N = a0+2 S1
S1 = a1 + 2 S2
S2 = a2 + 2 S3
…..
Si = ai + 2 Si+1
…..
Sn-1 = an-1
N = (an-1 an-2…a1a0)2
S0 = a0+2S1 = 0 + 276 = 152
S1 = a1+2S2 = 0 + 2  38 = 76
S2 = a2+2S3 = 0 + 2  19 = 38
S3 = a3+2S4 = 1 + 2  9 = 19
S4 = a4+2S5 = 1 + 2  4 = 9
S5 = a5+2S6 = 0 + 2  2 = 4
152 : 2 = 76 con resto 0
S6 = a6+2S7 = 0 + 2  1 = 2
2 : 2 = 1 con resto 0
S7 = a7+2S8 = 1 + 2  0 =1
1 : 2 = 0 con resto 1
N = (10011000)2
76 : 2 = 38 con resto 0
38 : 2 = 19 con resto 0
19 : 2 = 9 con resto 1
9 : 2 = 4 con resto 1
4 : 2 = 2 con resto 0
STOP
Riepilogo
• Rappresentazione binaria con n bit
• Algoritmi di conversione bin->dec e dec->bin
[P] parr. 1.1, 1.2, 1.3.1