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
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...