Verso il mondo dei bit [1]

Transcript

Verso il mondo dei bit [1]
Verso il mondo dei bit
[1]
In questa fase iniziale del corso dobbiamo tentare di avvicinarci
alla comprensione del mondo binario, che è l’ambiente
esclusivo di lavoro del computer, per poterci rendere conto
delle sue peculiarità operative.
Un mondo binario è un insieme di oggetti in cui tutto è
conosciuto/riconosciuto/classificato/memorizzato
ecc.
mediante (mutuamente) esclusiva assegnazione ad una di due
classi di oggetti.
La coppia di etichette utilizzate per distinguere le due classi e l’appartenenza degli
oggetti alle stesse è, di solito, SI’/NO, VERO/FALSO, 0/1, BIANCO/NERO,
ALTO/BASSO ecc.; si può chiaramente utilizzare qualunque coppia di termini
risulti didatticamente efficace ed appropriata.
Per motivi che risulteranno chiari in seguito noi utilizzeremo le
etichette 0 e 1.
1
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[2]
Questo ambiente binario viene comunemente chiamato anche
digitale (o numerico), e anche noi non faremo distinzioni
(anche se, a rigore, potrebbe esistere un digitale ternario, quaternario
ecc., ma tuttavia l’informatica attuale lavora esclusivamente sul binario,
come dice la parola BIT = BInary digiT ).
Dall’elettronica (che si articola in “analogica” e “digitale”, a seconda che si
occupi di segnali continui o discreti) mutueremo anche il termine
analogico , quasi sempre utilizzato per indicare ciò che NON è digitale.
Vedremo più avanti di chiarire meglio il significato.
Passando all’ idraulica, con un esempio immediatamente comprensibile, un
normale rubinetto controlla il flusso dell’acqua istituendo un rapporto di
analogia tra l’aumento di un angolo in un dato verso (la rotazione della
manopola o lo spostamento di una leva) e l’aumento del flusso di acqua;
invertendo la direzione si ha l’effetto opposto di diminuzione.
2
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[3]
Inoltre il controllo è continuo e progressivo, non ci sono salti nell’azione di
apertura/chiusura: potremmo scherzosamente invocare il paradosso di
Zenone, per cui tra una posizione della leva e la successiva ce ne sono
infinite altre …
: insomma potremmo definire questo rubinetto un
rubinetto analogico.
Proseguendo nella finzione potremmo pensare ad un rubinetto digitale, cioè,
naturalmente, ad un rubinetto con due sole possibilità: APERTO/CHIUSO.
Un rubinetto digitale potrebbe avere una manopola/leva identica a quella
del collega analogico, solo che il funzionamento sarebbe del tutto
differente: metà del percorso sarebbe ininfluente, poi in un punto del
percorso della manopola il flusso passerebbe improvvisamente dal NIENTE
al TUTTO e continuerebbe nel nuovo stato per tutta la restante metà del
percorso; naturalmente succederebbe l’inverso nel percorso di ritorno.
Un simile funzionamento sarebbe piuttosto disastroso per l’uomo, mentre
invece un rubinetto simile, naturalmente elettronico, sta alla base di tutto
il funzionamento dei computer.
3
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[4]
Vediamo come: un rubinetto digitale ha un ambito operativo alquanto
ridotto, dato che ammette solo due stati, APERTO e CHIUSO.
Un rubinetto digitale che invece di controllare il flusso dell’acqua controlli un
flusso di elettroni ha un nome preciso: INTERRUTTORE: anch’esso,
naturalmente, ammette solo due stati, APERTO e CHIUSO.
Curiosamente, ma si tratta solo di questioni semantiche, con un rubinetto aperto
l’acqua passa, ma con un interruttore aperto la corrente NON passa, e viceversa.
Se con un solo rubinetto possiamo fare ben poco, proviamo a collegarne DUE, e
teniamo presente che in un microprocessore attuale, come scopriremo più avanti,
troviamo centinaia di milioni di interruttori elettronici …
Due rubinetti, o interruttori, possono essere collegati in DUE modi differenti (in SERIE
e in PARALLELO), che presentano naturalmente caratteristiche di funzionamento
differenti, in funzione dello stato (aperto/chiuso) di ciascuno dei due: in totale
abbiamo QUATTRO stati possibili di combinazione di ingresso: 0/0, 0/1,1/0,1/1.
4
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[5]
COLLEGAMENTO in SERIE [1]
Si parla di collegamento in serie quando l’uscita di un rubinetto/interruttore è
collegata con l’ingresso dell’altro; in questo caso l’ingresso del primo
rubinetto/interruttore costituirà l’ingresso iniziale del sistema e l’uscita del
secondo costituirà l’uscita finale del sistema. Vediamo i quattro possibili
casi e l’uscita corrispondente al comportamento del sistema, che
considereremo come un superinterruttore:
1° chiuso – 2° chiuso
 l’acqua NON passa = CHIUSO
1° aperto – 2° chiuso
 l’acqua NON passa = CHIUSO
1° chiuso – 2° aperto
 l’acqua NON passa = CHIUSO
1° aperto – 2° aperto
 l’acqua passa = APERTO
5
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[6]
COLLEGAMENTO in SERIE [2]
I risultati che abbiamo ottenuto possono essere tabulati in vari modi, dato che,
come vedremo successivamente, sono importanti anche in logica, ma ora,
visto che stiamo operando in un mondo binario, decidiamo di cambiare
etichette e di utilizzare 0 (= chiuso) e 1 (= aperto); inoltre utilizzeremo il
simbolo ∩ per indicare il connettore seriale (il collegamento in serie):
0∩0 = 0
1∩0 = 0
0∩1 = 0
1∩1 = 1
Ora osservate bene la tabellina dell’operazione binaria: vi ricorda
qualcosa di familiare ?
6
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[7]
COLLEGAMENTO in SERIE [3]
Senza dubbio avrete riconosciuto nei risultati il comportamento, familiare fino
dalle scuole elementari, della moltiplicazione aritmetica. E infatti possiamo
tranquillamente sostituire al simbolo ∩ il più comune segno della
moltiplicazione. Tra l’altro possiamo già da ora ricordare che il simbolo ∩
viene anche chiamato ‘moltiplicatore logico’ o ‘operatore AND’ , per i suoi
utilizzi nella logica binaria.
Possiamo allora concludere che anche i rubinetti sanno contare, o quantomeno
che si possono utilizzare i rubinetti al posto del pallottoliere ?
E’ decisamente troppo presto per arrivare a qualunque conclusione, quindi
intanto occupiamoci dell’altro tipo di collegamento, quello in parallelo.
7
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[8]
COLLEGAMENTO in PARALLELO [1]
Parliamo di collegamento in parallelo quando gli ingressi dei dispositivi
(rubinetti/interruttori) sono collegati assieme, e così pure le uscite sono
collegate assieme. In questo sistema ciascun elemento darà il suo contributo
all’uscita finale, ma nessuno potrà bloccare da solo il flusso d’uscita finale,
come invece avveniva nel seriale. Vediamo anche qui il comportamento del
sistema:
1° chiuso – 2° chiuso
1° aperto – 2° chiuso
1° chiuso – 2° aperto
1° aperto – 2° aperto
8
 l’acqua NON passa = CHIUSO
 l’acqua passa = APERTO
 l’acqua passa = APERTO
 l’acqua passa = APERTO
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[9]
COLLEGAMENTO in PARALLELO [2]
Analogamente a quanto abbiamo fatto prima con il connettore seriale
procediamo a tabulare i risultati del collegamento in parallelo utilizzando
questa volta il simbolo connettivo U :
0U0 = 0
1U0 = 1
0U1 = 1
1U1 = 1
Anche stavolta proviamo a vedere se ritroviamo nei risultati una
qualche somiglianza con operazioni aritmetiche familiari.
9
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[10]
COLLEGAMENTO in PARALLELO [3]
Notiamo, in effetti, una forte ma apparentemente non completa somiglianza
con l’operazione di addizione aritmetica. Non “tornano i conti” soltanto con
l’ultima operazione, in cui troviamo che 1+1=1, mentre ci aspetteremmo 2.
Tuttavia dovremmo ricordare che nel mondo binario abbiamo a disposizione
soltanto 0 e 1, per cui il 2 non è (ancora) rappresentabile.
Questa operazione è chiamata anche, in logica, operatore OR ; esiste anche
un operatore XOR, o OR esclusivo, che dà risultati identici ad OR nei primi
tre casi, mentre nell’ultimo si ha che 1+1=0 .
Vedremo meglio questi operatori più avanti; per ora ci basti considerare che la
non rappresentabilità del numero 2 è collegata con il problema del riporto
aritmetico: se vogliamo rappresentare altri numeri oltre a 0 e 1 avremo
bisogno di un sistema di notazione più articolato, con ulteriori convenzioni
che ci permettano di assegnare anche altri, differenti valori alle cifre 0 e 1.
10
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[11]
I NUMERI [1]
Sappiamo che i numeri sono delle entità aritmetiche astratte, delle classi
logiche, che abbisognano di una qualche rappresentazione per poter essere
umanamente gestibili.
Il problema della rappresentazione dei numeri ha trovato svariate soluzioni
nella storia dell’umanità; citeremo soltanto quella adottata dai romani, che
conosciamo dalle elementari.
Si tratta di un sistema in cui alcuni numeri fondamentali hanno un simbolo fisso
corrispondente (cifra), mentre tutti gli altri vengono costruiti per somma e
sottrazione delle cifre prefissate.
La regola generale è che, procedendo da sinistra verso destra, i valori da sommare
vengono disposti dal più alto al più basso; se qualche cifra di valore inferiore si trova
a precederne una di valore superiore, la cifra inferiore viene sottratta
11
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[12]
I NUMERI [2]
La notazione romana presenta i pesanti difetti di non avere una rappresentazione
estensibile a numeri grandi, di ignorare lo zero e di consentire più rappresentazioni
differenti per lo stesso numero. Si fa comunemente l’esempio del numero 999, che
può essere correttamente rappresentato nella notazione romana in ben cinque
modi:
CMXCIX
LMVLIV
XMIX
VMIV
IM
= (1000-100)+(100-10)+ (10-1) = (900+90+9)
= (1000-50)+(50-5)+ (5-1) = (950+45+4)
= (1000-10)+(10-1) = (990+9)
= (1000-5)+(5-1) = (995+4)
= (1000-1)
NOTA: I fogli elettronici Microsoft EXCEL e CALC di OpenOffice mettono a disposizione la funzione ROMANO(), che
provvede a trasformare un numero in rappresentazione decimale nella corrispondente romana.
12
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[13]
I NUMERI : LA NOTAZIONE POSIZIONALE [1]
La notazione che usiamo correntemente è invece del tipo posizionale, in quanto numera
le posizioni delle cifre a partire da destra verso sinistra, ed assegna ad ognuna di
queste posizioni un valore fisso, detto peso, per cui si parla anche di posizioni pesate.
La notazione che utilizziamo è chiamata anche polinomiale, in quanto, proprio come in
un polinomio, le posizioni successive verso sinistra rappresentano le potenze
crescenti di un ‘x’, che viene chiamato base.
Il nostro sistema di notazione è chiamato decimale proprio perché la base scelta è il
numero dieci; di conseguenza le prime posizioni da destra verso sinistra avranno
questi pesi:
100 = 1 (il peso delle unità)
101 = 10 (il peso delle decine)
102 = 100 (il peso delle centinaia)
103 = 1000 (il peso delle migliaia)
104 = 10.000 (il peso delle decine di migliaia)
e così via…
13
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[14]
I NUMERI : LA NOTAZIONE POSIZIONALE [2]
Ma non è finita! Le varie posizioni pesate ospitano dei simboli, le cifre, che
rappresentano il risultato della moltiplicazione del loro valore naturale (da 0
a 9) per il peso assegnato alla posizione occupata; le cosiddette cifre
vengono anche chiamate coefficienti polinomiali.
Ad esempio il numero ‘centoventisette’ , scritto in notazione decimale ‘127’ , è il
risultato dei seguenti conteggi :
(7x100) + (2x101) + (1x102) ,
che le nostre routine mentali effettuano senza
apparente sforzo, almeno per un numero ridotto di cifre; quando si supera la decina
di cifre, diventa arduo anche solo individuare la grandezza del numero. Ci si aiuta con
il punto separatore dei gruppi di tre cifre.
La corrispondente notazione polinomiale sarebbe x2+2x+7, per x=10.
14
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[15]
I NUMERI : LA NOTAZIONE POSIZIONALE [3]
La notazione posizionale, come abbiamo visto, a differenza di quella romana, utilizza sia
addizioni che moltiplicazioni, è la somma di vari prodotti di coefficienti per il peso
della posizione occupata.
Questo però implica che, se anche una posizione intermedia non dovesse risultare
occupata, ci debba comunque essere un segnaposto per mantenere la posizione,
altrimenti non sarebbe possibile calcolare la corretta successione dei pesi. E’ proprio
questa la funzione dello zero: il coefficiente zero, moltiplicato per il peso della
relativa posizione, ne annulla il valore, per cui alla somma finale non fornisce alcun
contributo, però nel contempo mantiene immutata e salva la corretta successione
dei pesi.
Ricordiamo infine di non confondere mai ‘cifra’ con ‘numero’ , il rappresentante con il
rappresentato. Un numero può essere rappresentato in molti modi differenti senza
che la sua natura e le sue proprietà vengano mutate.
15
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[16]
I NUMERI : LA NOTAZIONE POSIZIONALE [4]
La notazione posizionale viene utilizzata anche con una base non necessariamente
decimale, ma che viene scelta secondo esigenze di funzionalità ed efficienza
operativa: in informatica si usano comunemente le notazioni binaria (in base 2),
ottale (in base 8, attualmente desueta) ed esadecimale (in base 16).
Teoricamente si potrebbe utilizzare qualunque numero come base di numerazione
posizionale; in realtà però non dobbiamo dimenticare che, scelta una base, ci
occorrono altrettanti simboli che fungano da cifre. Ora, se la cosa è semplicissima per
le notazioni con base inferiore a 10, visto che sono già disponibili, si complica invece
sempre più per le basi superiori. La convenzione spesso seguita è quella di adottare
come cifre prima le lettere maiuscole dell’alfabeto, nel numero strettamente
necessario, e poi quelle minuscole.
Così la notazione esadecimale utilizza le cifre da 0 a 9, poi rappresenta il 10 con A, l’11
con B, il 12 con C, il 13 con D, il 14 con E, il 15 con F.
Utilizzando sia le cifre da 0 a 9 sia le lettere maiuscole dell’alfabeto latino si raggiunge al
massimo la base 36; aggiungendo anche le minuscole si può arrivare alla base 62
(10+26+26). Ma per fare che???
16
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[17]
I NUMERI : LE BASI (o RADICI) nella NOTAZIONE POSIZIONALE [1]
Che il discorso sull’utilizzazione di notazioni posizionali con base (o radice)
differente da 10 non sia un discorso meramente accademico o di curiosità è
provato anche dalla disponibilità in Calc (OpenOffice) della funzione base(),
che appunto mostra la rappresentazione di un numero nelle varie basi, da 2
a 36.
Inoltre, tra le varie possibilità, daremo un’occhiata a dei programmi liberamente
disponibili sul web, che offrono analoghe possibilità:
• http://tblanck.free.fr/soft.htm
•
•
17
(Base2Base 1.1;NumEdit 3.0 (editor multibasico)
http://www.geocities.com/imbroglioinc/
(Radix 1.0)
http://www.jonelo.de/java/nc/index.html
(Numerical Chameleon 1.6.0)
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[18]
I NUMERI : LE BASI (o RADICI) nella NOTAZIONE POSIZIONALE [2]
Mentre nell’esperienza comune diamo per scontato che se vediamo una serie di
cifre queste rappresentino un numero in notazione decimale, nel discorso
tecnico informatico è più frequente che i numeri siano espressi in base
binaria o esadecimale. Dovremo quindi affrontare un assaggio di questi tipi
di notazione, cercando di superare, con la ragione, quell’effetto di
straniamento causato dallo sperimentare di persona che i nostri
automatismi aritmetici, che tanto ci servono nella vita comune, qui non ci
sovvengono più, anzi ci conducono a risultati palesemente errati.
La vera, fedele notazione che ci permette di conoscere senza ambiguità la
situazione interna del microprocessore è naturalmente quella BINARIA, in
cui ai due possibili stati elettrici di un componente elettronico viene fatto
corrispondere un simbolo 0 oppure un simbolo 1.
18
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[19]
I NUMERI : LA NOTAZIONE POSIZIONALE BINARIA [1]
Naturalmente la notazione binaria non si discosta dalla struttura polinomiale
che abbiamo già illustrato: l’unica differenza sarà che, lavorando in base 2, i
pesi delle varie posizioni, a partire da sinistra, saranno le successive potenze
del due, e quindi, ad esempio:
28
256
27
128
26
64
25
32
24
16
23
8
22
4
21
2
20
1
A fronte di questa semplicità di notazione (0/1), che ci permette comunque di
rappresentare qualsiasi numero, sta la difficoltà umana di distinguere,
interpretare o memorizzare sequenze che risultino più lunghe di 7/8 cifre (la
famosa legge psicosperimentale del sette …), per cui l’approccio umano
risulta spesso particolarmente penoso.
19
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[20]
I NUMERI : LA NOTAZIONE POSIZIONALE BINARIA [2]
Comunque dovremo quantomeno occuparci delle rappresentazione binaria
all’interno di un byte (o ottetto, cioè sequenza di otto bit), che è di solito
l’unità minima di rappresentazione . Si usa anche, per ragioni di comodità
connesse con la successiva rappresentazione esadecimale, suddividere il
byte in due parti di 4 bit, dette nibble:
0000 binario = 0 decimale
00102 = 2+0 =
01002 = 4+0+0 = 410
01102 = 4+2+0 = 610
10002 = 8+0+0+0 =
10102 = 8+0+2+0 =
11002 = 8+4+0+0 =
11102 = 8+4+2+0 =
20
210
810
1010
1210
1410
00012 =
110
00112 = 2+1 =
310
01012 = 4+0+1=
510
01112 = 4+2+1=
710
10012 = 8+0+0+1 = 910
1011b = 8+0+2+1 = 1110
1101b = 8+4+0+1 = 1310
1111b = 8+4+2+1 = 1510
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[21]
I CONTEGGI BINARI E L’HARDWARE [1]
Abbiamo visto che determinate, semplicissime configurazioni hardware sono in
grado di sommare un bit. Se ora affianchiamo quattro di questi sommatori e
interpretiamo il bit di uscita di ciascuno secondo le regole posizionali
dovremmo ottenere il risultato della somma di 4+4 bit. E’ corretta questa
affermazione? Proviamo una somma:
0100 +
0010 =
--------0110
4 dec. +
2 dec. =
---6 dec.
Sembrerebbe funzionare tutto a dovere … ma è presto per cantare vittoria.
Proviamo un’altra somma.
21
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[22]
I CONTEGGI BINARI E L’HARDWARE [3]
.
0101 +
5+
1010 +
10 +
0011 =
3=
1001 =
9=
0111
7 !!!
1011
11 !!!
Qui i conteggi sono un fallimento completo … Cosa c’è che non funziona? C’è
che invece dell’operatore additivo OR dobbiamo utilizzare l’operatore
additivo XOR (uguale ad OR tranne nel caso di 1+1, dove dà come risultato
0). Inoltre dobbiamo trovare la maniera di tener conto dei riporti, sempre
che si possano aggiungere eventuali bit a sinistra, in caso di necessità.
Riproviamo con le nuove regole:
0101 +
5+
1010 +
10 +
0011 +
3=
1001 =
9=
rip. 1110 =
riporto 1
1000
8
10011
19
Ora l’aritmetica è salva, ma l’ultimo risultato richiede 5 bit!
22
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[23]
I CONTEGGI BINARI E L’HARDWARE [4]
Chi fosse interessato può trovare sul web parecchio materiale interessante
sulla storia del computer, che in pochi decenni si è sviluppato in maniera
incredibile, passando dall’utilizzo di ruote ed ingranaggi (calcolatore
meccanico) allo sfruttamento dei relè, allora utilizzati soprattutto in
telefonia (calcolatore elettromeccanico), per arrivare infine al calcolatore
elettronico, che prima utilizzò le valvole elettroniche (termoioniche), poi i
transistor singoli, poi i transistor direttamente costruiti nei circuiti integrati
(chip), con un aumento vertiginoso del loro numero negli attuali
microprocessori, di varie centinaia di milioni fino ad oltre un miliardo di
transistor integrati!
Il punto essenziale che dobbiamo considerare è che, nonostante le diversità
anche enormi di questi componenti, TUTTI LAVORANO SOSTANZIALMENTE
COME INTERRUTTORI, o RUBINETTI DIGITALI!
23
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[24]
E’ COMODO IL BINARIO ?
Per binario intenderemo, in maniera sintetica, la rappresentazione numerica in
base due. Abbiamo visto che consiste in una rappresentazione biunivoca,
quindi del tutto attendibile, della situazione dei componenti elettronici
digitali del computer (microprocessore, memorie ecc.); è però innegabile
che risulti poco adatta alla controparte umana, che trova molte difficoltà
nel seguire le lunghe concatenazioni di zeri e di uni. Ad esempio, le parole
“informatica giuridica”, così si leggerebbero in binario (codifica ASCII):
01101001011011100110011001101111011100100110110101100
001011101000110100101100011011000010010000001100111
011010010111010101110010011010010110010001101001011
0001101100001.
Decisamente non sembra una lettura agevole … comunque chi si voglia divertire
può provare il programma ‘txt2bin.exe’.
24
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[25]
ALTRE RAPPRESENTAZIONI ?
Perché allora non utilizzare il decimale, visto che, avendolo appreso fino dalle
elementari, non faremmo nessuna fatica? Invece ne faremmo, e tanta,
purtroppo! Perché ogni volta che, a partire da un numero decimale,
avessimo bisogno di ricostruire la situazione binaria dovremmo ricorrere alla
calcolatrice, oppure procedere a numerose operazioni aritmetiche. Per
esempio, dato il decimale 103, dovremmo calcolare le varie potenze del due
contenute nel numero, prima di poterlo rappresentare in binario; così
101= 64+32+4+2+1 = 01100111 (potete controllare con pmaBinary) ; nulla di
impossibile, specialmente per i masochisti informatici, però piuttosto
pesante …
In realtà c’è poi anche un’ulteriore problema, che in certe situazioni può essere
di notevole intralcio: abbiamo visto, nella conversione dei nibble in
decimale, che alcuni risultati comportano UNA cifra (da 0 a 9), ma poi, dal 10
al 15, occorrono DUE cifre.
25
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[26]
LA RAPPRESENTAZIONE ESADECIMALE [1]
Quello che ci farebbe comodo è trovare una rappresentazione come quella
decimale, ma ancora più economica, che facesse corrispondere UNA sola
cifra alle QUATTRO del nibble (o magari alle OTTO del byte …).
Visto che il nibble conta da 0 a 15 (16 numeri), il candidato ideale è
naturalmente la rappresentazione esadecimale, la favorita dagli informatici.
Dato poi che la base è una potenza di due, il passaggio al binario, in caso di
necessità, è immediato, basta avere in mente la tabellina dei nibble!
Poiché però abbiamo bisogno di sedici simboli, e le cifre che utilizziamo sono
soltanto dieci (0-9), per convenzione unanimemente accettata utilizzeremo
le prime sei lettere dell’alfabeto (A-F, maiuscole o minuscole, non fa
differenza).
26
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[27]
LA RAPPRESENTAZIONE ESADECIMALE [2]
Ecco allora la tabellina di conversione binario-esadecimale:
0000 = 0 hex
0001 = 1 hex
0010 = 2 hex
0011 = 3 hex
0100 = 4 hex
0101 = 5 hex
0110 = 6 hex
0111 = 7 hex
1000 = 8 hex
1001 = 9 hex
1010 = A hex
1011 = B hex
1100 = C hex
1101 = D hex
1110 = E hex
1111 = F hex
Come vedete, quattro cifre binarie vengono condensate in una sola cifra
esadecimale (avete considerato che 16 = 24 ?)
27
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[27bis]
LA RAPPRESENTAZIONE ESADECIMALE [3]
A questo punto, se ricordiamo che il nibble rappresenta la metà di un byte, sarà
immediato concludere che per rappresentare un byte in esadecimale
occorreranno DUE cifre. E’ proprio così, e infatti tutti i possibili numeri
rappresentabili con un BYTE (da 0 a 255, dato che 256 = 28) saranno scritti in
esadecimale tra 00 e FF.
Potremo controllare su una calcolatrice adatta (anche quella di Windows può
servire) alcune corrispondenze e fare qualche esercizio.
L’ultima considerazione e curiosità potrebbe essere questa: se per
rappresentare un byte in esadecimale occorrono DUE cifre, non potremmo
trovare una base in cui basti UNA cifra sola?
La base c’è, e naturalmente è 256, e tale sistema talvolta viene utilizzato, in
effetti … ma qual è la contropartita ? Per essere fruibile dovremmo imparare
a memoria il corrispondente valore di 256 diversi simboli!
Se qualcuno vuole provarci …
28
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[28]
L’ EDITOR ESADECIMALE [1]
E’ uno strumento prezioso perché consente di analizzare la
sequenza di bit/byte che compone qualunque file, ed
eventualmente
di
modificarla,
effettuando
una
rappresentazione digitale fedele dell’ oggetto memorizzato.
Offre di solito due viste in finestre affiancate, due rappresentazioni
diverse della stessa sequenza di byte:
• la prima rappresenta ogni byte in esadecimale, utilizzando
quindi DUE cifre hex per ogni byte;
• la seconda interpreta ogni byte rappresentandone il
corrispondente carattere secondo il codice ANSI (Windows)
oppure ASCII. Quando non esiste nel codice un carattere corrispondente viene
visualizzato un quadratino vuoto, o un puntino ecc.
29
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[29]
L’ EDITOR ESADECIMALE [2]
Inoltre la formattazione consentita dall’editor hex è naturalmente assai diversa
da quella cui siamo abituati con gli editor testuali: la rappresentazione
esadecimale prosegue ininterrottamente salvo gli spazi di separazione dei
byte e gli incolonnamenti, ogni byte è numerato a partire dall’inizio del file
(0 o 1, a scelta); non si parlerà chiaramente di paragrafi, di pagine o altro, ma i
riferimenti di spostamento si baseranno sugli indirizzi, cioè sul numero progressivo di
ciascun byte.
Utilizzeremo due programmi freeware, tra i tantissimi disponibili:
• XVI32 v.2.51 , editor esadecimale semplice ma completo:
http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm
• NumEdit v.3.00 , editor multibase, che ha la possibilità di rappresentazione
non solo esadecimale, ma in una qualunque base tra 2 e 256:
http://tblanck.free.fr/soft.htm
30
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[30]
L’ EDITOR ESADECIMALE [3]
Possiamo ora iniziare a lavorare con XVI32. Curiamo di aver aperto un nuovo
foglio, di essere in modalità di inserzione e nella finestra dei caratteri:
possiamo ora digitare qualche parola, esattamente come se lavorassimo con
un word processor.
Ma è proprio così? A parte la novità che, per ogni carattere inserito, possiamo
vedere il codice corrispondente in esadecimale, come facciamo se vogliamo
andare a capo? E la lunghezza della riga, come facciamo a determinarla? E se
vogliamo sottolineare qualche parola, o evidenziarla con il grassetto, o con il
corsivo, o cambiare il font del carattere, come si fa?
Vedremo che non è facile, soprattutto perché stiamo utilizzando uno strumento
in modo improprio, per lavori che non gli competono.
Ma intanto possiamo salvare il lavoro su file, poi scrivere la stessa frase su un
altro file con Notepad, poi confrontarli con XVI32.
31
a.a. 2013/2014 1° sem.
<[email protected]>
Verso il mondo dei bit
[31]
L’ EDITOR ESADECIMALE [4]
Poi proviamo, utilizzando un word processor, a costruire e salvare in tre
modalità diverse uno stesso file di testo che contenga almeno una frase,
nella quale ci saremo sbizzarriti a intervenire sulla formattazione di ogni
carattere, cambiando la grandezza, gli stili, i font, i colori ecc. ; uno lo
salveremo normalmente (ad es. come ‘doc’ se utilizziamo Word), un altro
come file di testo codificato ANSI, e un altro con codifica Unicode.
Successivamente ci occuperemo di prendere nota della lunghezza dei tre file, di
riaprirli con il word processor e di constatare le differenze ottenute nella
presentazione di un file che all’inizio era unico.
Come ulteriore mossa apriremo i tre file con l’editor esadecimale e cercheremo
di spiegarci le ragioni delle differenze, sulla base di quanto avremo
osservato.
Si noti che le procedure laboratoriali possono essere solo accennate sulle
dispense e non descritte passo passo, come a lezione.
32
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [1]
Le periferiche di input [1]
Abbiamo cominciato a conoscere l’ambiente di lavoro del microprocessore ed il suo
linguaggio, decisamente poco adatto ed ergonomico dal punto di vista umano. Ora
occupiamoci degli strumenti utili per il colloquio, ossia delle periferiche che
rendono più agevole e ‘user friendly’ il dare ordini e fornire dati da elaborare al
computer.
Nelle prime fasi di interazione con l’elaboratore (anni ’40-50) l’immissione dei dati
avveniva in modo diretto, in parte attraverso interruttori e in parte attraverso
schede o nastri perforati; inutile suggerire che si trattava sempre di linguaggio
binario…
Si è poi arrivati alla tastiera, strumento decisamente più ergonomico, mano a mano
che l’aumento delle preziosissime risorse di elaborazione potevano consentire di
stornarne una frazione da dedicare alla gestione dei tasti e alla loro codifica in dati
utilizzabili dal computer.
33
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [2]
Le periferiche di input [2]: la tastiera
L’idea della tastiera prende naturalmente origine e modello dalla macchina per
scrivere e dalla telescrivente; la disposizione delle lettere sulla tastiera (layout)
può variare in funzione delle necessità grafiche delle varie lingue, anche se in
origine si tenne conto unicamente della situazione della lingua inglese/americana.
Difatti inizialmente sia il layout della tastiera sia il codice utilizzato per la conversione
(‘American Standard Code for Information Interchange’, donde l’ acronimo ASCII)
tenevano conto solo delle 26 lettere dell’alfabeto internazionale, in versione
minuscola e maiuscola, delle cifre decimali, dei segni di punteggiatura e di pochi
altri simboli di uso comune.
Il codice ASCII in origine era un codice a 7 bit che, utilizzato su un byte lasciava un bit
disponibile per altri utilizzi (per esempio un controllo di parità, come vedremo più
avanti); possiamo consultare la tabella, ad esempio, al seguente link:
http://www.lookuptables.com/ .
Come si vede, un quarto della tabella è occupato da ‘metacaratteri’ cioè dati inerenti
la disposizione dei caratteri nel testo e le modalità di trasmissione, eredità delle
telescriventi; si veda anche, al proposito:
http://en.wikipedia.org/wiki/Teletype
34
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [3]
Le periferiche di input [3]: la tastiera
Il secondo quarto della tabella è occupato dalle cifre decimali e da vari
simboli matematici e segni di punteggiatura; il terzo quarto è occupato in
gran parte dalle lettere alfabetiche maiuscole, ed il quarto dalle lettere
minuscole.
Dal punto di vista della lingua italiana risulta penalizzante la mancanza delle
lettere accentate, così come non c’è praticamente una lingua europea che
non lamenti l’assenza di qualche lettera del proprio alfabeto: d’altra parte
le possibilità offerte dai 7 bit erano ormai completamente esaurite, per cui
l’unico ampliamento possibile era quello di passare ad 8 bit, guadagnando
così altri 128 caratteri.
Vennero così costruite le tabelle ASCII estese, con una scelta aggiuntiva di
caratteri e simboli mancanti (codici da 128 a 255 dec.); naturalmente
vennero accontentate le esigenze di alcune lingue e scontentati altri
sistemi linguistici, per cui sorsero numerose differenti versioni di tabelle
estese.
35
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [4]
Le periferiche di input [4]: la tastiera
Questa scelta di passare ad 8 bit andò inoltre a confliggere con certi protocolli
Internet ormai consolidati, specialmente quelli per la posta elettronica,
nei quali era ammesso solo l’utilizzo di 7 bit significanti per ogni byte,
tanto che ancor oggi , se non si provvede con adeguate codifiche ulteriori
(es. base 64), le nostre lettere accentate non vengono correttamente
trasmesse.
Le varie estensioni sono codificate nelle tabelle ISO-8859-x, in cui alla x
vengono sostituiti alcuni numeri indicativi dell’estensione; ad es. l’1 è la
codifica ANSI,con i caratteri utili per le lingue dell’Europa occidentale, la 2
per l’Europa orientale, la 5 contiene le lettere cirilliche, la 6 le arabe, e così
via.
Attualmente ho sempre maggior diffusione la codifica UNICODE, di cui
parleremo in seguito, utilizzata da Windows, che permette di codificare i
caratteri di quasi tutte le lingue del mondo.
36
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [5]
Le periferiche di input [5]: la tastiera
Le tastiere attuali dispongono più o meno di un centinaio di tasti,
chiaramente insufficienti per una rappresentazione uno a uno dei caratteri
disponibili in una codifica a 256 possibilità.
Quali possibilità di input vengono normalmente offerte, per l’inserimento di
caratteri non presenti sulla tastiera?
La più comune e intuitiva è il ricorso alla mappa caratteri (charmap), che
mostra sullo schermo le varie possibilità disponibili e da cui è facile con un
clic del mouse selezionare e copiare il carattere che ci interessa.
La seconda è più rapida, e però implica la conoscenza del codice ANSI
corrispondente al carattere cercato; occorre premere ALT e il codice del
carattere, preceduto da 0, sul tastierino numerico; cosi, ad esempio,
ALT+0126 ci darà il segno del tilde (~).
37
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [6]
Le periferiche di input [6]: la tastiera
Vediamo ora qualche cenno sul funzionamento della tastiera: i singoli tasti
agiscono semplicemente come interruttori, attivando un contatto elettrico
ad ogni pressione meccanica. Tuttavia il risultato di tale contatto non
arriva direttamente al processore, altrimenti dovremmo avere un bus di
un centinaio di fili indipendenti, mentre il realtà il collegamento è limitato
a pochissimi fili. Quindi viene operata un prima elaborazione dei dati dei
contatti attivi da parte di un circuito integrato di tastiera, mentre i vari
contatti sono trattati come una matrice di punti.
La cosa importante da tenere a mente è che il processore di tastiera invia alla
CPU dei dati che NON si riferiscono al carattere inciso sul tasto, ma degli
scan code che indicano semplicemente la posizione ordinata del tasto
sulla tastiera, a partire dall’alto e proseguendo da sinistra a destra.
38
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [7]
Le periferiche di input [7]: la tastiera
Questo tipo di ordinamento è ancora valido, ma si riferisce alla tastiera originaria, non
a quella estesa. Aggiungendosi altri tasti non è stata però modificata la
numerazione originaria, per cui nelle tastiere attuali si può notare qualche salto
improvviso nella sequenza degli scan code.
Possiamo sperimentare quanto affermato sopra utilizzando il programmino
‘kbtasto.exe’ che, per ogni tasto premuto che abbia associato uno scan code
(quindi non SHIFT, CTRL, ALT ecc.), fornisce appunto il valore dello scan code e il valore
che il sistema operativo assegna in base alla tabella di codifica ASCII al tasto
premuto, cioè il codice carattere.
Vedremo che ‘ESC’ ha s.c. 1, ‘1’ ha s.c. 2, ecc. ; possiamo anche notare che le
modifiche con SHIFT, CTRL, ALT cambiano il codice carattere mentre mantengono
lo stesso scan code, come del resto ci aspettavamo, dato che il tasto non cambia.
39
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [8]
Le periferiche di input [8]: la tastiera
A questo punto è di estrema importanza considerare che il microprocessore
non elabora nessun carattere, almeno nella forma grafica in cui noi ce lo
rappresentiamo; elabora dei byte, riconducibili sì a dei caratteri in base ad
una tabella di codifica, ma che per il microprocessore non hanno un
particolare significato diverso dagli altri byte. Durante tutta l’elaborazione
ed anche in sede di memorizzazione ci sono soltanto dei byte.
Soltanto quando ci sia la necessità di una visualizzazione a beneficio
dell’occhio umano i byte si tramutano in una rappresentazione visuale di
caratteri. Perché questo avvenga occorre la intermediazione di una
interfaccia visuale, come ad es. una scheda video connessa ad un monitor,
oppure di una stampante.
40
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [9]
Le periferiche di output [1]: il monitor
Non dimentichiamo che anche l’uscita (output), nei primi computer, avveniva
attraverso schede o nastri perforati, e successivamente con telescriventi.
Ora siamo talmente abituati alla presenza del monitor che questa interfaccia
di per sé risulta indizio di attività informatica e di un computer collegato.
Perché però si arrivi alla visualizzazione di un carattere a partire da un
codice fornito alla scheda video dal microprocessore occorrono alcuni
passi fondamentali.
Occorre innanzitutto che ci sia accordo sulla codifica dei caratteri, cioè che la
tabella di codifica sia la stessa utilizzata in input; occorre poi che siano
presenti le istruzioni per disegnare il carattere richiesto, sia quelle relative
al grafema (la lettera alfabetica da riprodurre) sia quella relative alle
informazioni accessorie (grandezza, stili ecc.).
41
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [10]
Le periferiche di output [2]: il monitor
Le istruzioni cui abbiamo accennato sopra sono presenti nei file detti font,
che contengono una serie ordinata di istruzioni su come rappresentare i
vari caratteri, ordinati appunto secondo il numero di codice assegnato
dalla tabella caratteri.
I font sono file con nomi che spesso si rifanno ai nomi di caratteri utilizzati
nelle tipografie, che riproducono con notevole somiglianza; l’aspetto del
carattere (il modo con cui un grafema viene riprodotto nelle sue
caratteristiche di disegno grafico) viene detto glifo; ad esempio due ‘a’
della stessa grandezza e stile, ma una proveniente dal font Arial e l’altra
dal font Times New Roman, differiscono nel glifo, per tutta una serie di
particolari grafici ben descritti nei manuali di tipografia.
42
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [11]
Le periferiche di output [3]: il monitor
I font disponibili, sia perché allegati al sistema operativo, sia perché free
oppure a pagamento, sono decine e decine di migliaia; è facile, se si usano
font strani o poco noti, che chi riceve un testo che li utilizza non li possa
riprodurre fedelmente, perché non dispone dei font necessari. In questi
casi il word processor generalmente cerca di utilizzare font simili, della
stessa famiglia, sempre se disponibili; altrimenti può arrivare a dichiarare
di non riuscire a visualizzare il file da aprire.
La scheda grafica possiede dei font di default, da utilizzare in caso di bisogno,
quando, non essendo ancora caricato il sistema operativo, non può ancora
attingere ai font disponibili; vediamo questi font quando appaiono dei
messaggi in caratteri simili a quelli delle macchine da scrivere, bianco su
schermo nero, in caso di problemi all’avviamento del computer.
43
a.a. 2013/2014 1° sem.
<[email protected]>
A colloquio con l’alieno [12]
Le periferiche di output [4]: il monitor
Può anche avvenire che un carattere non sia visualizzato non perché manca il
font corrispondente, ma perché manca la definizione di quello specifico
carattere; questo avviene normalmente nel caso dei primi 32 caratteri
della codifica ASCII (i cosiddetti caratteri non stampabili) oppure nei font
UNICODE, che, riguardando decine di migliaia di caratteri, avrebbero
dimensioni enormi se dovessero contenere tutte le descrizioni, per cui
contengono in genere soltanto i caratteri delle lingue ritenute di maggiore
utilizzo.
Si può provare a consultare charmap con il font Arial Unicode MS per rendersi
conto delle scelte eseguite: si troverà comunque una varietà di caratteri
imponente, che ci darà qualche indizio sulle difficoltà affrontate dal
progetto del Consorzio Unicode www.unicode.org per arrivare ad una
simile unificazione dei caratteri delle lingue di tutto il mondo.
44
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [1]
I primi esperimenti condotti utilizzando l’editor esadecimale (che spesso
abbrevieremo in Hexed) dovrebbero servire a renderci consapevoli del
fatto che una identica rappresentazione testuale sullo schermo può
derivare da sequenze di bit differentissime.
File che rappresentano lo stesso identico testo (possiamo sperimentare file
con estensioni txt, doc, rtf, pdf, htm, ecc.) hanno pesi (lunghezza in byte)
assai diversi, soprattutto in relazione ai metadati contenuti e alle diverse
istruzioni per la rappresentazione visuale dei caratteri, ma occorre tener
conto anche del tipo di codifica (in ASCII a ciascun byte corrisponde un
carattere, ma nella codifica UNICODE di base occorrono DUE byte per ciascun
carattere).
Comunque la lezione importantissima da ricavare, ai fini della nostra ricerca
sul documento informatico, è che, data una rappresentazione testuale su
schermo, NON E’ POSSIBILE ricavare direttamente (cioè senza l’analisi con
l’hexed) la sottostante sequenza di bit (il file) che la genera.
45
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [2]
Questo evidentemente perché il passaggio verso la rappresentazione dei
caratteri sullo schermo è condizionato, come abbiamo visto, da almeno
due snodi fondamentali:
• La tabella di codifica, per cui ad un elemento di un dato insieme numerico
(0/127; 0/255 ecc.) viene assegnata la rappresentazione di un determinato
grafema;
• Il font utilizzato, che fa corrispondere a ciascun grafema una della
pressoché illimitate possibilità di rappresentazione grafico-visuale (glifo).
Inoltre, nel caso che il testo in questione sia stato introdotto via tastiera, è anche il
caso di considerare possibili modifiche a livello di layout o di scan code.
46
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [3]
Un effetto assai convincente della potenza del secondo snodo si ottiene
sostituendo ad un font di utilizzo comune un altro font non basato su
grafemi ma su iconemi (assegniamo questa definizione a quelle
rappresentazioni grafiche in cui riconosciamo un motivo, una struttura, anche se
non necessariamente sappiamo associarle ad una entità alfabetica o ideografica,
o comunque ad un significato simbolico) .
Possiamo provare a selezionare del testo in lingua italiana ed a mutarne il font
utilizzando, ad esempio, i font Wingdings, o Dingbats , oppure, meglio ancora,
Webdings.


Di cosa stiamo parlando ???
47
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [4]
In questo caso abbiamo una rappresentazione, che, in qualche modo,
nasconde il rappresentato, o quantomeno utilizza in maniera inconsueta
l’associazione con il rappresentante. Non si tratta certamente di
crittografia, anche se produce un certo effetto di straniamento al nostro
sistema percettivo, e ci induce a sospettare qualche gioco enigmistico.
Un utilizzo, sia pure improprio, del codice Braille (che evidentemente è un
codice tattile, non certo visivo) ce lo possiamo permettere solo se
abbiamo installato il font specifico (brailleita.ttf disponibile tra i tools) :


48
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [5]
IL CODICE BRAILLE
Si tratta di un codice tattile, binario, a punti in rilievo SI’/NO su una matrice
rettangolare 2x3, per un totale di sei bit (vengono utilizzate anche matrici
di 2x4, cioè otto bit). Le combinazioni di punti sì/no realizzabili sono
evidentemente 26 , ossia 64.
Sappiamo già che con questo numero non possiamo gestire tutti i caratteri
che servirebbero, ma tuttavia, con qualche rinuncia e qualche soluzione
di ripiego, arriviamo a una codifica nazionale soddisfacente; viene
proposta tra il materiale didattico la tabella della codifica Braille specifica
italiana.
Inoltre per gli interessati viene fornito anche un programmino che simula
sulla tastiera del computer il funzionamento della barra Braille, facendo
corrispondere alle tre coppie della matrice di punti, a partire dall’alto
verso il basso, i tasti F | J, D | K, S | L .
49
a.a. 2013/2014 1° sem.
<[email protected]>
Rappresentazioni [6]
IL CODICE MORSE
Citiamo, sia pure di passaggio, anche il codice Morse, che, come sappiamo, è
un codice tendenzialmente acustico (radioamatori), anche se viene
comunque trascritto graficamente con linee e punti.
Chi volesse approfondire l’argomento, tra i tanti siti disponibili, può consultare, ad es.
http://www.arpnet.it/air/morse.htm , che consente di tradurre un testo in Morse
e di ascoltare il risultato.
Molto interessante anche il programma Winmorse2.exe, disponibile tra il materiale
didattico, che salva il testo di input, una volta codificato in Morse, su un file di
testo, o anche su file audio.
Ma ora, dopo queste rappresentazioni e codifiche che ci hanno portato a sfiorare
temi crittografici, è giunto il momento di occuparci veramente della crittografia,
sia pure entro i limiti compatibili con gli strumenti matematici fornitici dalla
scuola secondaria.
50
a.a. 2013/2014 1° sem.
<[email protected]>
Ritorniamo ai bit
• Abbiamo visto che il microprocessore lavora a livello di bit, e
quindi potremmo chiederci quali operazioni aritmetiche siano
compatibili con un universo binario (modulo 2).
• Gli operatori non sono molti, e li distingueremo tra unari
(monadici) e binari (duali) , a seconda che i parametri di
ingresso (bit) siano uno oppure due, mentre l’uscita sarà
costituita naturalmente da un solo bit.
• Inoltre ogni operazione può essere vista sotto un aspetto
puramente aritmetico oppure logico (valori di verità nella logica
binaria di Boole, o booleana).
51
a.a. 2013/2014 1° sem.
<[email protected]>
La negazione
• Negazione è un termine logico, mentre in aritmetica di può
parlare di inversione (mod 2), o di complemento.
• L’operatore NOT è unario, accetta in ingresso un bit e lo
restituisce invertito (negato) in uscita:
NOT (0)  1
NOT (1)  0
• L’operazione può essere considerata anche a livello di byte ,
nel qual caso viene invertito ciascuno degli otto bit che
compongono il byte in ingresso:
NOT (0101 1001)  1010 0110
A questo punto si può ricordare come lavora la funzione crittografica di EdXor : Format
 Flip.
52
a.a. 2013/2014 1° sem.
<[email protected]>
L‘addizione tra bit
• Come sappiamo dall’aritmetica, l’addizione è un’operazione
che riceve in ingresso due parametri (addendi) e ne restituisce
uno (somma).
• L’addizione tra bit segue esattamente le stesse regole,
ricordando però che si lavora con l’aritmetica modulare, in
modulo 2 (viene anche detta ‘addizione senza riporto’): ecco le
quattro possibilità:
–
–
–
–
53
0+0
0+1
1+0
1+1
0
1
1
0
(102 senza riporto)
a.a. 2013/2014 1° sem.
<[email protected]>
L‘operatore additivo XOR
• L’operatore duale che esegue l’addizione mod 2 è chiamato
XOR, da eXclusive OR, con riferimento alla logica booliana, in
cui i valori VERO/FALSO sono facilmente rappresentabili con 1
e 0 del calcolo binario.
Logicamente è assimilabile al connettivo “O/OPPURE” del
linguaggio naturale, quando serve a congiungere due
affermazioni
mutuamente escludentisi (AUT/AUT):
l’enunciato risultante è vero quando è vera SOLO una delle
affermazioni che lo compongono ( “o mangi questa minestra…
“).
54
a.a. 2013/2014 1° sem.
<[email protected]>
XOR ed i bytes
• Anche qui è utile considerare l’estensione al byte
dell’operatore XOR, ed osservare con attenzione i risultati:
1010 0101 (A5)
XOR
1101 0011 (D3) 0111 0110 (76)
XOR
1101 0011 (D3)  1010 0101 (A5)
55
a.a. 2013/2014 1° sem.
<[email protected]>
XOR e la crittografia
• Il risultato evidenziato nella slide precedente è di
fondamentale importanza in crittografia, perché mostra che
con due applicazioni dello stesso byte in XOR si arriva di
nuovo alla situazione iniziale.
• Questo significa che uno dei due operandi può fungere da
chiave di codifica, e successivamente, anche di decodifica
(chiave simmetrica)
• Ora ci si può esercitare con EdXor (Format  Xor ) per
controllare il funzionamento dell’operatore XOR, anche nei
casi con chiave 0000 0000 o 1111 1111.
• E’ anche utile provare la calcolatrice ‘pmaBinary’, più comoda
di quella di Windows per questi esercizi.
56
a.a. 2013/2014 1° sem.
<[email protected]>
L’operatore additivo OR
• Effettua, come XOR, l’addizione binaria, ma tenendo conto del
riporto:
0 OR 0  0
0 OR 1  1
1 OR 0  1
1 OR 1  1 (1+1  0 + 1(riporto)  1)
Riceve in ingresso due bit, li confronta e restituisce in output 1 se almeno un bit in
ingresso è 1. Logicamente è anche assimilabile al connettivo “O/OPPURE”
del linguaggio naturale, quando serve a congiungere due affermazioni non
mutuamente escludentisi: l’enunciato risultante è vero quando è vera
almeno una (ma anche tutte e due) delle affermazioni che lo compongono
(“… o piove o tira vento…”)
57
a.a. 2013/2014 1° sem.
<[email protected]>
L’operatore moltiplicativo AND
• Effettua la moltiplicazione binaria, del tutto identica
a quella cui siamo abituati:
0 AND 0  0
0 AND 1  0
1 AND 0  0
1 AND 1  1
Logicamente è anche assimilabile al connettivo “E” del
linguaggio naturale, quando serve a congiungere due
affermazioni: l’enunciato risultante è vero soltanto se sono
vere ambedue le affermazioni che lo compongono.
58
a.a. 2013/2014 1° sem.
<[email protected]>
Riporto o no? [1]
• Si ha riporto quando il risultato di un’operazione aritmetica
richiede di collocare una o più cifre in eccedenza rispetto a
quelle assegnate: il problema non c’è in genere col foglio di
carta, si presenta invece di norma nelle situazioni in cui è
necessario predefinire il numero di cifre da assegnare ad una
rappresentazione.
• E’ il caso tipico dei contatori domestici, ad es. , o dei contagiri,
ecc. in cui quando tutte le cifre disponibili sono arrivate a 9, il
passo successivo provoca l’azzeramento.
• In informatica si presenta con tutte le strutture a formato
fisso, ad es. byte, word, double word ecc.
59
a.a. 2013/2014 1° sem.
<[email protected]>
Riporto o no? [2]
• Ad esempio il byte 1111 1111 rappresenta il numero 255: se vogliamo
rappresentare 255+1 l’intero byte verrà azzerato, e ci sarà il riporto di 1,
che potremo decidere di scartare o di memorizzare altrove, a seconda
delle esigenze di programmazione. Si parla, in questi casi, di overflow ,
ossia di superamento delle capacità massime di rappresentazione per una
data
struttura.
•
Queste osservazioni ci servono per affrontare un altro gruppo di
operatori, i cosiddetti operatori di SHIFT, che agiscono sul piano
orizzontale. sintagmatico, e si distinguono in:
– operatori di SHIFT propri, che trascurano l’informazione di riporto
– operatori ROTATE (di rotazione) che recuperano il riporto attraverso un
meccanismo appunto di rotazione dei bit uscenti che li fa ripresentare in
entrata, come vedremo subito.
60
a.a. 2013/2014 1° sem.
<[email protected]>
LShift - RShift
• Sono operatori cosiddetti di “scorrimento”, nel senso che fanno scorrere di
n posizioni, verso sinistra o verso destra, una determinata configurazione
di bit in ingresso. Hanno quindi un duplice input: un dato (la
configurazione di bit), e un metadato (quante volte ripetere l’operazione di
scorrimento di un posto). Le posizioni lasciate libere dallo scorrimento
vengono coperte con zeri.
Lshift n, b…
Fa scorrere a sinistra (left) di n posizioni una determinata sequenza di bit (b…).
Ad es., se applichiamo tale operatore ad un byte (10101010), otterremo quanto
segue:
LSHIFT 102 (1010 1010)= 1010 1000
(viene applicato due volte (102 ) l’operatore LSHIFT)
1° PASSO [0101 0100] (esce il primo bit a sinistra ed entra un bit 0 a destra)
2° PASSO [1010 1000] (esce il primo bit a sinistra ed entra un bit 0 a destra)
61
a.a. 2013/2014 1° sem.
<[email protected]>
RShift
Rshift n, b…
Fa scorrere a destra (right) di n posizioni.
Ad es., se applichiamo l’operatore ad un byte, otterremo quanto
segue:
RSHIFT 102 (1010 1010) = 0010 1010
1° PASSO [0101 0101] (esce il primo bit a destra ed entra un bit
0 a sinistra)
2° PASSO [0010 1010] (esce il primo bit a destra ed entra un bit
0 a sinistra)
62
a.a. 2013/2014 1° sem.
<[email protected]>
Shift in crittografia
• Gli operatori di Shift sono spesso usati in crittografia per
“rimescolare le carte”, confondendo le posizioni e quindi i
valori posizionali dei bit.
• Vengono anche utilizzati per ottenere rapidamente
moltiplicazioni/divisioni per potenze di 2 : come sia possibile
lo si capisce pensando che ogni bit, ad ogni spostamento
verso sinistra di una posizione, raddoppia il proprio valore,
così come lo dimezza spostandosi verso destra. Analogamente si
pensi alla notazione decimale: uno spostamento a sinistra moltiplica per 10, a
destra divide per 10.
• La calcolatrice PmaCalc può essere utilmente utilizzata per controllare
quanto sopra affermato.
63
a.a. 2013/2014 1° sem.
<[email protected]>
Rotate/Roll
Operatori di rotazione
• Solo un accenno agli operatori di rotazione LROT e RROT, che
agiscono come gli operatori di SHIFT, e però, a differenza di
questi, recuperano i bit usciti dalle estremità del byte, come
se ruotassero in un anello.
• Es.: LROT 1 (1000 0010) = 0000 0101 . Il bit uscito all’estrema sinistra
rientra nella posizione di estrema destra.
• Es.: RROT 1 (1000 0001) = 1100 0000 . Il bit uscito all’estrema destra
rientra nella posizione di estrema sinistra.
• Possiamo pensare all’azione degli operatori di rotazione anche come ad
una permutazione , in cui gli otto bit del byte cambiano posto ma
mantengono il loro valore: il byte assume quindi una configurazione
differente.
64
a.a. 2013/2014 1° sem.
<[email protected]>

Documenti analoghi

MAILING LIST 2014 di INFORMATICA GIURIDICA

MAILING LIST 2014 di INFORMATICA GIURIDICA http://ig.unipv.it/2014/ig/XVI32.exe : utilizzato a lezione durante le esercitazioni laboratoriali, si dimostra un tool versatile ed efficace, grazie anche alla sua semplicità. http://ig.unipv.it/2...

Dettagli