Architettura degli elaboratori 2012/2013 - dit.unitn.itpalopoli/courses/Arch/ArchEs1.pdf ·...
Transcript of Architettura degli elaboratori 2012/2013 - dit.unitn.itpalopoli/courses/Arch/ArchEs1.pdf ·...
Architettura degli elaboratori 2012/2013Rappresentazione ed aritmetica binaria di base
Michele �Jazzinghen� Bianchi1
1Dipartimento di Ingegneria e Scienze dell'Informazione
Universtià degli Studi di Trento
21 Febbraio 2013
1 of 27
Introduzione
� Contatti: [email protected]
� Sito web con i materiali: http://disi.unitn.it/~bianchi
� Ricevimento: scrivetemi una mail, così ci mettiamo d'accordo.
� Domande o parti poco chiare: Ovviamente sono qui per questo, quindichiedete pure, altrimenti mandatemi le domande via mail, alle qualirisponderò all'inizio della lezione successiva
2 of 27
IntroduzioneExtra
� Sulla mia pagina è presente una Quick Start Guide per quanto riguarda laseconda parte del corso. Vi potrebbe essere utile leggerla subito, così se cisono casini metto a posto
� Aggiungerò dei link a delle risorse online utili per il corso, dateciun'occhiata ogni tanto. So che vi sentite dire questa cosa spesso, ma ameservono hit per prendere soldi nel mio caso vi potrebbe essere utile, vistoche non ci sono ancora tutti i contenuti.
3 of 27
Storia
� Sistemi unari (dita, tacche, ideogrammi)
� Sistemi di numerazione additivi (Romani, Egizi)
� Sistemi letterali (e.g. Sixty nine, Soixante dix-neuf, Settantanove)
� Notazioni posizionali (Babilonesi [base60], Hindu-Arabic [base10])
4 of 27
Basi informatiche
� Base-2 (Binario): rappresentazione grezza delle linee logiche
� Base-8 (Ottale): rappresentazione di 3 bit (deprecato)
� Base-16 (Esadecimale): rappresentazione 4 bit (e.g. Colori per CSS)
5 of 27
De�nizioni di base
� Bit [0,1]: stato di una linea logica
� Byte [0,255]: 8 bit assieme (e.g. 1 carattere ASCII)
� Word [0,2bits − 1]: numero variabile di byte a seconda del sistema (e.g.�oat da 4byte)
6 of 27
� Integer (8, 16, 32, 64 bit)� Unsigned: Da 0 a 2bit − 1� Signed: Da −2bit−1 a 2bit−1 − 1
� Float� Single: 1.175494351e−38 a 3.402823466e38
� Double: 2.2250738585072014e−308 a 1.7976931348623158e308
� Quad (There is no kill like overkill): 3.362e−4932 a 1.20e4932
N.B.
Per iniziare lavoreremo con i numeri naturali (interi positivi) a 8 bit. Ovveroda 0 a 255, come se stessimo giocando a Final Fantasy VII.
7 of 27
Strutture complesse
� Testo: Sequenza di byte o, nel caso di sistemi moderni, di word da 8 a 32bit (UTF-8)
� Immagini: Bitmap a profondità variabile (1, 8, 16, 24, 32 bit)� 1 bit: Bianco e Nero� 8 bit: 256 colori (NES! MSX2! :D Glorious Retrogaming)� 16 bit: 65536 colori (SNES, Windows 95)� 24 bit: 16 milioni di colori (Circa tutto adesso)� 32 bit: 16 milioni di colori + Alpha Channel
� Audio: Dati stereo codi�cati tramite Pulse Code Modulation (PCM)1
1Dannato PCM!8 of 27
Conversione base-10 a base-2Valore di un numero base-10
Un numero in base-10 è formato da unità, decine, centinaia, migl... blah blah.In pratica è la somma di multipli di potenze di 10, partendo da 100 = 1Quindi, se prendiamo un numero tipo il 8550016410 avremo:
9 of 27
Conversione base-10 a base-2Valore di un numero base-2
Alla stessa maniera un numero base-2 è formato da unità, due, quattro, ottoed avanti così per potenze di 2.La conversione, quindi, da base-2 a base-10 è molto semplice, basta sommarele potenze di 2 rappresentate dagli 1 e avremo così il numero in base-10.
10 of 27
Conversione base-10 a base-2
Ci sono due metodi per farlo:
� Divisione e Modulo: Continuare a dividere per due e mantenere il resto
� Sottrazione: Testare se il numero è contenuto in un multiplo di due, se sìve lo segnate da parte e poi lo sottraete dal numero e continuate così
11 of 27
Conversione base-10 a base-2Divisione e modulo
� Più facilmente implementabile
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;while n>0 do
s = (n mod 2) + s;n = n div 2;
end
9710 =??
n s
9748 124 0112 0016 00013 000011 1000010 1100001
9710 = 11000012
12 of 27
Conversione base-10 a base-2Divisione e modulo
� Più facilmente implementabile
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;while n>0 do
s = (n mod 2) + s;n = n div 2;
end
9710 =??
n s
9748 124 0112 0016 00013 000011 1000010 1100001
9710 = 11000012
12 of 27
Conversione base-10 a base-2Divisione e modulo
� Più facilmente implementabile
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;while n>0 do
s = (n mod 2) + s;n = n div 2;
end
9710 =??
n s
9748 124 0112 0016 00013 000011 1000010 1100001
9710 = 11000012
12 of 27
Conversione base-10 a base-2Sottrazione
� Terribile se usato con numeri grandi
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;i = massima potenza di due contenuta in n;repeat
if i ≤ n then
s = s + �1�;n = n - i;
else
s = s + �0�;end
i = i div 2;
until i=0 ;
11710 =??
n i s
117 6453 32 121 16 115 8 1115 4 11101 2 111011 1 1110100 0 1110101
11710 = 11101012
13 of 27
Conversione base-10 a base-2Sottrazione
� Terribile se usato con numeri grandi
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;i = massima potenza di due contenuta in n;repeat
if i ≤ n then
s = s + �1�;n = n - i;
else
s = s + �0�;end
i = i div 2;
until i=0 ;
11710 =??
n i s
117 6453 32 121 16 115 8 1115 4 11101 2 111011 1 1110100 0 1110101
11710 = 11101012
13 of 27
Conversione base-10 a base-2Sottrazione
� Terribile se usato con numeri grandi
Data: n: Numero base-10 da convertireResult: s: Numero convertito in base-2s = stringa vuota;i = massima potenza di due contenuta in n;repeat
if i ≤ n then
s = s + �1�;n = n - i;
else
s = s + �0�;end
i = i div 2;
until i=0 ;
11710 =??
n i s
117 6453 32 121 16 115 8 1115 4 11101 2 111011 1 1110100 0 1110101
11710 = 11101012
13 of 27
Somma di naturaliUn'introduzione, prima
A B Carry C Carry
0 0 0 0 01 0 0 1 00 1 0 1 01 1 0 0 10 0 1 1 01 0 1 0 10 1 1 0 11 1 1 1 1
A + B + Carry = C + Carry
14 of 27
Somma di naturaliEsempio
11710 + 9710 = 11101012 + 11000012 = ?
1 1 1 0 1 0 1 +1 1 0 0 0 0 1 =
1 1 0 1 0 1 1 0
110101102 = 21410
15 of 27
Somma di naturaliEsempio
11710 + 9710 = 11101012 + 11000012 = ?
1 1 1 0 1 0 1 +1 1 0 0 0 0 1 =
1 1 0 1 0 1 1 0
110101102 = 21410
15 of 27
Somma di naturaliEsempio
11710 + 9710 = 11101012 + 11000012 = ?
1 1 1 0 1 0 1 +1 1 0 0 0 0 1 =
1 1 0 1 0 1 1 0
110101102 = 21410
15 of 27
Sottrazione di naturaliOperazione di base e �Il prestito�
Come nella somma si va da destra a sinistra seguendo delle regole banali:
A 0 1 1 0
B 0 0 1 1
A-B 0 1 0 1
Nell'ultimo caso bisogna scorrere a sinistra �nchè non si trova un 1,invertendo il valore di tutte le cifre incontrate, 1 compreso.
10..0→ 01..1
16 of 27
Sottrazione di naturaliEsempio
21410 − 11710 = 110101102 − 11101012 = ?
1 1 0 1 0 1 1 0 -1 1 1 0 1 0 1 =
1 1 0 0 0 0 1
11000012 = 9710
17 of 27
Sottrazione di naturaliEsempio
21410 − 11710 = 110101102 − 11101012 = ?
1 1 0 1 0 1 1 0 -1 1 1 0 1 0 1 =
1 1 0 0 0 0 1
11000012 = 9710
17 of 27
Sottrazione di naturaliEsempio
21410 − 11710 = 110101102 − 11101012 = ?
1 1 0 1 0 1 1 0 -1 1 1 0 1 0 1 =
1 1 0 0 0 0 1
11000012 = 9710
17 of 27
Moltiplicazione di naturaliMoltiplicazione (e divisione) per potenze di due
Ok, se dobbiamo moltiplicare un numero base-10 per 10 dobbiamo...
Aggiungere uno 0 a destra.
18 of 27
Moltiplicazione di naturaliMoltiplicazione (e divisione) per potenze di due
Ok, se dobbiamo moltiplicare un numero base-10 per 10 dobbiamo...
Aggiungere uno 0 a destra.
18 of 27
Moltiplicazione di naturaliMoltiplicazione (e divisione) per potenze di due, cont.
Nel caso dei numeri base-2, aggiungere uno 0 a destra signi�ca moltiplicare ilnumero per 2, mentre eliminando la prima cifra a desra signi�ca dividere per 2.
Questa operazione è chiamata shifting, utilizzata spesso dai compilatori perottimizzare la moltiplicazione.
19 of 27
Moltiplicazione di naturaliMoltiplicazione tra due Naturali
Moltiplicare due numeri base-2 naturali altro non è che l'applicazione dishifting multipli e poi della somma sui risultati degli shifting.
Alla �ne non è di�erente dalla moltiplicazione in base-10, solo che è piùsemplice perché o bisogna sommare uno dei due moltiplicatori shiftati o nulla.
20 of 27
Moltiplicazione di naturaliEsempio
1310x1710 = 11012x100012 = ?
1 1 0 1 x1 0 0 0 1 =
1 1 0 1 +- +
- +- +
1 1 0 1
1 1 0 1 1 1 0 1
110111012 = 22110
21 of 27
Moltiplicazione di naturaliEsempio
1310x1710 = 11012x100012 = ?
1 1 0 1 x1 0 0 0 1 =
1 1 0 1 +- +
- +- +
1 1 0 1
1 1 0 1 1 1 0 1
110111012 = 22110
21 of 27
Moltiplicazione di naturaliEsempio
1310x1710 = 11012x100012 = ?
1 1 0 1 x1 0 0 0 1 =
1 1 0 1 +- +
- +- +
1 1 0 1
1 1 0 1 1 1 0 1
110111012 = 22110
21 of 27
Error CheckingOver�ow/Under�ow
Fino ad ora abbiamo sempre fatto calcoli pensando diavere cifre in�nite a nostra disposizone....Purtroppo, la realtà ci impone dei limiti di spazio,dettati dall'architettura di basso livello del calcolatore.A causa di questo si possono rischiare errori dasemplicemente stupidi a catastro�ci.
Tipo quello che è successo all'Ariane 5 501, missileGeostationary Transfer Orbit (GTO), progettato dallaAstrium per l'ESA. A causa di un errore di conversionee di mancato controllo degli Over�ow la casa diproduzione ha bruciato 370M$ in circa 40 secondi.
22 of 27
Error CheckingOver�ow/Under�ow
Fino ad ora abbiamo sempre fatto calcoli pensando diavere cifre in�nite a nostra disposizone....Purtroppo, la realtà ci impone dei limiti di spazio,dettati dall'architettura di basso livello del calcolatore.A causa di questo si possono rischiare errori dasemplicemente stupidi a catastro�ci.
Tipo quello che è successo all'Ariane 5 501, missileGeostationary Transfer Orbit (GTO), progettato dallaAstrium per l'ESA. A causa di un errore di conversionee di mancato controllo degli Over�ow la casa diproduzione ha bruciato 370M$ in circa 40 secondi.
22 of 27
Error CheckingOver�ow/Under�ow cont.
Possiamo immaginare i numeri in base-2 con una quantità limitata di cifrecome se fossero posti intorno ad una ruota:
23 of 27
Error CheckingOver�ow/Under�ow cont.
Nel caso precedente il numero è formato al massimo da 3 cifre binarie, quindi,se noi provassimo a calcolare 1112 + 12 il risultato dovrebbe essere 10002, soloche non abbiamo abbastanza cifre per contenere tutte le informazioni.Il risultato sarà quindi 0002. In pratica, 710 + 110 = 010.
Fortunatamente le ALU contengono delle �ag che indicano se è avvenuto unover�ow (o un under�ow) durante un'operazione aritmetica.
24 of 27
Error CheckingOver�ow/Under�ow cont.
Nel caso precedente il numero è formato al massimo da 3 cifre binarie, quindi,se noi provassimo a calcolare 1112 + 12 il risultato dovrebbe essere 10002, soloche non abbiamo abbastanza cifre per contenere tutte le informazioni.Il risultato sarà quindi 0002. In pratica, 710 + 110 = 010.
Fortunatamente le ALU contengono delle �ag che indicano se è avvenuto unover�ow (o un under�ow) durante un'operazione aritmetica.
24 of 27
Aggiungere il segno agli interi
Il supporto per i numeri negativi è stato aggiunto in vari modi2:
� Segno-e-Modulo: Un bit fa da segno, gli altri sono il valore del numero
� Complemento ad 1: Per avere il numero negativo invertiamo tutti i bit.
� Complemento a 2: Facciamo il complemento ad 1 e poi sommiamo 1.
2I quali dimezzano il numero massimo rappresentabile25 of 27
Aggiungere il segno agli interiRappresentazione in Segno-e-Modulo
� Più vicino (Anzi, esattamente IL) al metodo usato per la rappresentazionedei negativi nei �oat
� Permette l'esistenza di due 0: +0 e −0� Richiede una logica più complessa per venir implementato.
26 of 27
Aggiungere il segno agli interiComplemento a 2
Il complemento ad 1 è migliore del Segno-e-Modulo per gli interi, ma haancora dei problemi, tipo il doppio 0 oppure il fatto che è macchinoso a causadell'o�set di −1 dei numeri negativi.Per questo è stato inventato il complemento a 2:
� Solo uno 0
� Trasparente per somma, sottrazione e moltiplicazione
� Per questo molto più facilmente implementabile a livello hardware
27 of 27