Sei sulla pagina 1di 37

Il linguaggio dei computer:

rappresentazione in binario e
algoritmi di conversione
23 settembre 2020
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

Dal libro [P]


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
Il nostro obiettivo finale
Alla fine del corso saprete come funziona una versione semplificata del processore MIPS

Dal libro [PH]


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 positivi ( 0) posso rappresentare con una
sequenza di n bit?
n=1 n=2 n=3 n=4
0 000 = 0
0 001 = 1
0 010 = 2
0 00 = 0 0 011
0 01 = 1 0 100 .
0 0=0 0 10 = 2 0 101 .
0 0 1=1 0 11 = 3 0 110 .
1 0=2 1 00 = 4 0 111 .
1 1 000 .
1 1=3 1 01 = 5
1 001 .
1 10 = 6 1 010
.
1 11 = 7 1 011
Osserva: Se con k bit posso 1 100
rappresentare p sequenze distinte, con 1 101 = 13
1 110 = 14
k+1 bit posso rappresentare 2p 1 111 = 15
sequenze distinte
Rappresentazione con n bit
Sarà fondamentale in varie scelte della nostra architettura

Con n bit è possibile rappresentare


tutti i 2n interi compresi fra 0 e 2n-1

Perché?
Intuizione per una prova
Con n bit è possibile rappresentare 2n interi
Ricorda: Se con k bit posso rappresentare p sequenze distinte,
con k+1 bit posso rappresentare 2p sequenze distinte
1 bit 2= 21 sequenze distinte: ok
2 bit 4 = 22 sequenze distinte
3 bit 8 = 23 sequenze distinte
4 bit 16 = 24 sequenze distinte
. .
. .
. .

k bit 2k sequenze distinte


k+1 bit 2 2k = 2k+1 sequenze distinte
Si formalizza con una «prova per induzione».
Rappresentazione in binario
n=1 n=2 n=3 n=4
0 000 = 0
0 001 = 1
0 010 = 2
0 00 = 0 0 011
0 01 = 1 0 100 .
00=0 0 10 = 2 0 101 .
0 01=1 0 11 = 3 0 110 .
1 0=2 1 00 = 4 0 111 .
1 1 000 .
1 1=3 1 01 = 5
1 001 .
1 10 = 6 1 010
.
1 11 = 7 1 011
Perché ho scelto questo ordine/ associazione? 1 100
Come capisco che 1 101 = 13
1 110 = 14
101 in binario rappresenta 5 e che 1 111 = 15
13 si rappresenta con 1101?
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

7 6 5 4 3 2 1 0
N = (1 0 1 1 0 1 0 1)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
20=1
N = (181)10 21=2
Devo esprimere N come somma di potenze distinte di 2.
22=4
Cerco la più grande potenza di 2 contenuta in 181:
23=8
181 = 128 + 53 = 27 + 53
24=16
53 = 32 + 21 = 25 + 21
25=32
21 = 16 + 5 = 24 + 5
26=64
5 = 4+1 = 22+1
27=128
1 = 20
28=256
181 = 27+ 25+24 +22 + 20

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
Da decimale in binario
20=1
N = (181)10 21=2
Devo esprimere N come somma di potenze di 2.
Cerco la più grande potenza di 2 contenuta in 181: 22=4
181 = 128 + 53 = 27 + 53 23=8
53 = 32 + 21 = 25 + 21 24=16
21 = 16 + 5 = 24 + 5 25=32
5 = 4+1 = 22+1
26=64
1 = 20
27=128
181 = 27+ 25+24 +22 + 20 28=256
181 = (10110101) 2

Nota: Poiché 181 = 27+ 25+24 +22 + 20, per rappresentare 181 in binario
sono necessari almeno 8 bit. Però:
181 = 0  210 + 0  29 + 0  28 + 1  27 + 0  26 + 1  25 + 1  24 + 0  23
+ 1  22 + 0  21 + 1  20
Quindi 181 = (00010110101) 2 con 11 bit
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
Verso una definizione generale: Sequenze
Come indicare una generica sequenza (o stringa) di lunghezza n?
Come indicare una generica sequenza di lunghezza 8?

a 7 a 6 a 5 a 4 a 3 a 2 a 1a 0
Dove a7, a6 , … , a1, a0 sono gli elementi della sequenza, in ordine;
il relativo indice indica (appunto) la posizione all’interno della sequenza.
Gli indici sono i = 0, 1, …, 6, 7. Gli elementi sono ai.

Esempio: 35082847
a7 =3, a6 =5, a5 =0, a4 =8, a3 =2, a2 =8, a1 =4, a0 =7

Una sequenza di lunghezza n la indicheremo così:


an-1 an-2 …a1 a0
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

n −1
In notazione compatta: N =  ai 2i
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: N =  ai bi
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
(234)2 = ?

(101)10 1  102 + 0  10 + 1 = 10110


(101)8 1  82 + 0  8 + 1 = 6510

(101)2 1  22 + 0  2 + 1 = 510
Esercizi
• Da cosa sono caratterizzati i numeri pari in binario?
(11010)2 è pari?

Dimostrare nel modo più formale, preciso e convincente


la vostra affermazione.

• Da cosa sono caratterizzati i numeri multipli di 4 in binario?


(11010)2 è multiplo di 4?

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 o uguale 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 (con 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 3752 Perché?
3  10 + 7 = 37 3 7 52
3 7 5 2 = 3  103 + 7  102 + 5  10 + 2 =
37  10 + 5 = 375 3752
375  10 + 2 = 3752 3752 = (3  102 + 7  10 + 5 )  10 + 2 =
= ( (3  10 + 7)  10 + 5 )  10 + 2 =
S3 = 3
S2 = 37 = ( ( (3)  10 + 7)  10 + 5 )  10 + 2
S1 = 375
S0 = 3752 = N
Verso un algoritmo di conversione (con 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ì:


Perché?
1 1101
1 1 0 1 = 1  23 + 1  22 + 0  2 + 1 =
12+1=3 1101
32+0=6 1101 = (1  22 + 1  2+ 0 )  2 + 1 =
6  2 + 1 = 13 1101 = ( (1  2 + 1)  2 + 0 )  2 + 1 =

S3 = 1 = ( ( (1)  2 + 1)  2 + 0 )  2 + 1
S2 = 3
S1 = 6
S0 = 13 = N
Verso un algoritmo di conversione (con 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

….. S2 = S3 2 + a2
….. …..

= ((… (an-12+ an-2) 2 + … + a2) 2 + a1)2 + a0 Sn-2 = Sn-1 2 + an-2

= ((… ( (an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0 Sn-1 = an-1


Algoritmo di conversione: binario in decimale
MSD=cifra più significativa
LSD=cifra meno significativa
N = (an-1 an-2…a1a0)2

N = ((… ( ( an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0

N= S0 = S1 2 + a0 Sn-1 = an-1
S1 = S2 2 + a1 Sn-2 = an-2 + 2Sn-1
Dal Sn-3 = an-3 + 2Sn-2
S2 = S3 2 + a2 basso
verso …..
….. l’alto:
da an-1 Si = ai + 2Si+1
Sn-2 = Sn-1 2 + an-2 a a0 ; …..
da MSD S0 =N
S0 = a0+2S1
Sn-1 = an-1 a LSD
Sn-1 = an-1
Esempio 1
Sn-2 = an-2+2Sn-1 N = (a7 a6 a5 a4 a3 a2 a1a0)2 n=8
Sn-3 = an-3+2Sn-2
….. (1 0 1 1 0 1 0 1)2
Si = ai+2Si+1
S7 = a7 = 1
….. S6 = a6+2S7 = 0 + 2 = 2
S0 =N 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
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
Esercizi (continua)
• Quanti bit sono necessari per rappresentare
18?
• Quanti bit sono necessari per rappresentare
un intero n?
Riepilogo
• Rappresentazione binaria con n bit
• Algoritmi di conversione bin->dec e dec->bin
[P] parr. 1.1, 1.2, 1.3.1

Potrebbero piacerti anche