Il linguaggio dei computer: rappresentazione in binario e algoritmi di conversione 20 settembre 2017
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)
Dal libro [P] 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
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 posso rappresentare con una sequenza di n bit? n = 1 n = 2 n = 3 n = 4 0 0 = 0 0 0 1 = 1 1 1 0 = 2 1 1 = 3 0 0 0 0 1 1 1 1 00 = 0 01 = 1 10 = 2 11 = 3 00 = 4 01 = 5 10 = 6 11 = 7 Osserva: Se con k bit posso rappresentare p sequenze distinte, con k+1 bit posso rappresentare 2p sequenze distinte 0000 = 0 0001 = 1 0010 = 2 0011 0100. 0101. 0110. 0111. 1000. 1001.. 1010 1011 1100 1101 = 13 1110 = 14 1111 = 15
Rappresentazione con n bit Sarà fondamentale in varie scelte della nostra architettura Con n bit è possibile rappresentare tutti i 2 n interi compresi fra 0 e 2 n -1 Perché?
Prova Se con k bit posso rappresentare p sequenze distinte, con k+1 bit posso rappresentare 2p sequenze distinte 1 bit 2= 2 1 sequenze distinte 2 bit 4 = 2 2 sequenze distinte 3 bit 8 = 2 3 sequenze distinte 4 bit 16 = 2 4 sequenze distinte... k bit... 2 k sequenze distinte Si formalizza con una prova per induzione. Osservando che 2 2 k = 2 k+1
Rappresentazione in binario n = 1 n = 2 n = 3 n = 4 0000 = 0 0001 = 1 0010 = 2 0 00 = 0 0011 0 01 = 1 0100. 0 0 = 0 0 10 = 2 0101. 0 0 1 = 1 0 11 = 3 0110. 111 1 1 0 = 2 1 00 = 4 0. 1 1 = 3 1 01 = 5 1000. 1001. 1 10 = 6. 1010 1 11 = 7 1011 1100 1101 = 13 1110 = 14 1111 = 15 Ma perché 101 in binario rappresenta 5 e 1101 = 13?
o notazione araba: Notazione decimale 7 5 2 = 7 10 2 + 5 10 1 + 2 10 0 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 2 2 + 0 2 1 + 1 2 0 = 5 1 1 0 1 = 1 2 3 +1 2 2 + 0 2 1 + 1 2 0 = 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 2 7 + 0 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0 N 2 7 2 5 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 = 2 7 + 53 53 = 32 + 21 = 2 5 + 21 21 = 16 + 5 = 2 4 + 5 5 = 4+1 = 2 2 +1 1 = 2 0 181 = 2 7 + 2 5 +2 4 +2 2 + 2 0 2 0 =1 2 1 =2 2 2 =4 2 3 =8 2 4 =16 2 5 =32 2 6 =64 2 7 =128 2 8 =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 10 2 + 0 10 1 + 1 10 0 (1 0 1) 2 = 1 2 2 + 0 2 1 + 1 2 0 = (5) 10 (1 0 1) 8 = 1 8 2 + 0 8 1 + 1 8 0 = ( 65 ) 10 (1 1 0 1) 10 = 1 10 3 + 1 10 2 + 0 10 1 + 1 10 0 (1 1 0 1) 2 = 1 2 3 +1 2 2 + 0 2 1 + 1 2 0 = (13) 10 (1 1 0 1) 8 = 1 8 3 +1 8 2 + 0 8 1 + 1 8 0 = ( 577 ) 10
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 1 a 0 Dove a 7, a 6,, a 1, a 0 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 a i. Esempio: 35082847 a 7 =3, a 6 =5, a 5 =0, a 4 =8, a 3 =2, a 2 =8, a 1 =4, a 0 =7 Una sequenza di lunghezza n la indicheremo così: a n-1 a n-2 a 1 a 0
Notazione binaria per numeri naturali In base 2. I simboli ammessi sono 0,1. Una sequenza / stringa di 0 e 1, di lunghezza n con a i {0, 1} per i = 0, 1,, n-1 rappresenta l intero N: a n-1 a n-2 a 1 a 0 N = (a n-1 a n-2 a 1 a 0 ) 2 = = a n-1 2 n-1 + a n-2 2 n-2 + + a 1 2 1 + a 0 2 0 In notazione compatta: N n 1 i 0 a i 2 i
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 a n-1 a n-2 a 1 a 0 con a i {0, 1,, b-1} per i = 0, 1,, n-1 rappresenta l intero N: N = (a n-1 a n-2 a 1 a 0 ) b = = a n-1 b n-1 + a n-2 b n-2 + + a 1 b 1 + a 0 b 0 In notazione compatta: N n 1 i 0 a i i b
Esempi (234) 10 (234) 8 2 2 10 3 10 4 2 2 8 3 8 4 156 234 10 10 (234) 16 2 2 16 3 16 4 564 10 (101) 10 (101) 8 2 1 10 0 10 1 2 1 8 0 8 1 65 101 10 10 (101) 2 2 1 2 0 2 1 5 10
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 a n-1, a n-2,, a 1, a 0 Risultato: l intero N tale che N = (a n-1 a n-2 a 1 a 0 ) 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 a n-1, a n-2,, a 1, a 0 tali che N = (a n-1 a n-2 a 1 a 0 ) 2
Verso un algoritmo di conversione da b=10 b = 10 N = (3752) 10 n = 4 (3 7 5 2) 10 = 3 10 3 + 7 10 2 + 5 10 1 + 2 10 0 oppure lo possiamo ottenere così, leggendo la stringa da sinistra verso destra (immaginate di non sapere quante cifre saranno): 3 3 7 5 2 3 10 + 7 = 37 3 7 52 37 10 + 5 = 375 3 7 5 2 375 10 + 2 = 3752 3 7 5 2 S 3 = 3 S 2 = 37 S 1 = 375 S 0 = 3752 = N Idea: 3 7 5 2 = 3 10 3 + 7 10 2 + 5 10 + 2 = = (3 10 2 + 7 10 + 5 ) 10 + 2 = = ( (3 10 + 7) 10 + 5 ) 10 + 2 = = ( ( (3) 10 + 7) 10 + 5 ) 10 + 2
b = 2 Verso un algoritmo di conversione da b=2 N = (1101) 2 n = 4 (1 1 0 1) 2 = 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 oppure lo possiamo ottenere così: 1 1 1 0 1 1 2 + 1 = 3 1 1 0 1 3 2 + 0 = 6 1 1 0 1 6 2 + 1 = 13 1 1 0 1 S 3 = 1 S 2 = 3 S 1 = 6 S 0 = 13 = N Idea: 1 1 0 1 = 1 2 3 + 1 2 2 + 0 2 + 1 = = (1 2 2 + 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 = (a n-1 a n-2 a 1 a 0 ) 2 N = a n-1 2 n-1 + a n-2 2 n-2 + + a 1 2+ a 0 = (a n-1 2 n-2 + a n-2 2 n-3 + + a 2 2 + a 1 ) 2 + a 0 = ( (a n-1 2 n-3 + a n-1 2 n-4 + + a 2 ) 2 + a 1 ) 2 + a 0.... = (( (a n-1 2+ a n-2 ) 2 + + a 2 ) 2 + a 1 )2 + a 0 S 0 = S 1 2 + a 0 S 1 = S 2 2 + a 1 S 2 = S 3 2 + a 2.. S n-2 = S n-1 2 + a n-2 = (( ( (a n-1 ) 2+ a n-2 ) 2 + + a 2 ) 2 + a 1 )2 + a 0 S n-1 = a n-1
Algoritmo di conversione: binario in decimale MSD=cifra più significativa N = (a n-1 a n-2 a 1 a 0 ) 2 N = (( ( ( a n-1 ) 2+ a n-2 ) 2 + + a 2 ) 2 + a 1 )2 + a 0 LSD=cifra meno significativa N= S 0 = S 1 2 + a 0 S n-1 = a n-1 S 1 = S 2 2 + a 1 S 2 = S 3 2 + a 2.. S n-2 = S n-1 2 + a n-2 S n-1 = a n-1 Dal basso verso l alto: da a n-1 a a 0 ; da MSD a LSD S n-2 = a n-2 + 2S n-1 S n-3 = a n-3 + 2S n-2.. S i = a i + 2S i+1.. S 0 = a 0 +2S 1 S 0 =N
Esempio 1 S n-1 = a n-1 S n-2 = a n-2 +2S n-1 S n-3 = a n-3 +2S n-2.. S i = a i +2S i+1.. S 0 =N N = (a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 ) 2 n=8 (1 0 1 1 0 1 0 1) 2 S 7 = a 7 = 1 S 6 = a 6 +2S 7 = 0 + 2 = 2 S 5 = a 5 +2S 6 = 1 + 4 = 5 S 4 = a 4 +2S 5 = 1 + 10 = 11 S 3 = a 3 +2S 4 = 0 + 22 = 22 S 2 = a 2 +2S 3 = 1 + 44 = 45 S 1 = a 1 +2S 2 = 0 + 90 = 90 S 0 = a 0 +2S 1 = 1 + 180 = 181
Esempio 2 (11101001) 2 n=8 S 7 = a 7 = 1 S 6 = a 6 +2S 7 = 1 + 2 = 3 S 5 = a 5 +2S 6 = 1 + 6 = 7 S 4 = a 4 +2S 5 = 0 + 14 = 14 S 3 = a 3 +2S 4 = 1 + 28 = 29 S 2 = a 2 +2S 3 = 0 + 58 = 58 S 1 = a 1 +2S 2 = 0 + 116 = 116 S 0 = a 0 +2S 1 = 1 + 232 = 233
Esempio 3 (11111111) 2 n=8 S 7 = a 7 = 1 S 6 = a 6 +2S 7 = 1 + 2 = 3 S 5 = a 5 +2S 6 = 1 + 6 = 7 S 4 = a 4 +2S 5 = 1 + 14 = 15 S 3 = a 3 +2S 4 = 1 + 30 = 31 S 2 = a 2 +2S 3 = 1 + 62 = 63 S 1 = a 1 +2S 2 = 1 + 126 = 127 S 0 = a 0 +2S 1 = 1 + 254 = 255
Algoritmo di conversione: decimale in binario N = (a n-1 a n-2 a 1 a 0 ) 2 Dato: N. Risultato: a n-1, a n-2,, a 1, a 0 con a i = 0 o 1 Procedura inversa: dall alto verso il basso da a 0 ad a n-1 ; da LSD a MSD N= S 0 = S 1 2 +a 0 a 0 ed S 1 sono rispettivamente il resto e il quoziente della divisione di N= S S 1 = S 2 2 + a 0 per 2. 1 S 2 = S 3 2 + a 2 S i = S i+1 2 + a i S n-2 = S n-1 2 + a n-2 S n-1 = a n-1. a i ed S i+1 sono rispettivamente il resto e il quoziente della divisione di S i per 2.. Fino ad ottenere un S i =0. Algoritmo delle divisioni successive
Esempio 1 (decimale in binario) N=152 S 0 = N = a 0 +2 S 1 S 1 = a 1 + 2 S 2 S 2 = a 2 + 2 S 3.. S i = a i + 2 S i+1.. S n-1 = a n-1 N = (a n-1 a n-2 a 1 a 0 ) 2 S 0 = a 0 +2S 1 = 0 + 2 76 = 152 S 1 = a 1 +2S 2 = 0 + 2 38 = 76 S 2 = a 2 +2S 3 = 0 + 2 19 = 38 S 3 = a 3 +2S 4 = 1 + 2 9 = 19 S 4 = a 4 +2S 5 = 1 + 2 4 = 9 S 5 = a 5 +2S 6 = 0 + 2 2 = 4 S 6 = a 6 +2S 7 = 0 + 2 1 = 2 S 7 = a 7 +2S 8 = 1 + 2 0 =1 N = (10011000) 2 152 : 2 = 76 con resto 0 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 2 : 2 = 1 con resto 0 1 : 2 = 0 con resto 1 STOP
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
Oggi pomeriggio ricevimento 14-16 Domani San Matteo: università chiusa! (avete più tempo per studiare e pensare agli esercizi!)