Assembly/Rappresentazione dati: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Grop (discussione | contributi)
Nuova pagina: ==Introduzione== Probabilmente il più grande ostacolo che la maggior parte dei principianti incontra quando prova ad imparare l’Assembly è l’uso comune del sistema binario ed esa...
 
Grop (discussione | contributi)
Nessun oggetto della modifica
Riga 16:
Oppure:<br/>
'''100 + 20 + 3 + 0.4 + 0.05 + 0.006'''<br/>
 
==Il sistema di numerazione binario==
I computer moderni (tra cui i PC IBM) operano usando la logica binaria. Il computer rappresenta i valori utilizzando due voltaggi (generalmente 0v e 5v), due voltaggi perché, ogni bit rappresenta un passaggio di corrente all’interno del computer. Con due voltaggi possiamo rappresentare due valori differenti. Questi possono essere qualunque valori diversi, ma per convenzione si utilizzano i valori 0 e 1. Questi due valori, ''casualmente'', corrispondono alle due cifre usate nel sistema binario.
 
==Come funziona il sistema binario==
Il sistema binario lavora esattamente come quello decimale, con due eccezioni: il binario accetta solo le cifre 0 e 1 (diversamente dal decimale le cui cifre vanno dallo 0 al 9), e il binario utilizza per rappresentare i numeri, potenze di 2 anziché di 10. E’ quindi molto facile trasformare cifre binarie in decimale. Per ciascun “1” nel numero binario, sommare 2<sup>n</sup> dove “n” è la posizione della cifra partendo da destra. Per esempio, il valore binario 11001010<sub>2</sub> rappresenta:<br/>
'''1 * 27 + 1 * 26 + 0 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20'''<br/>
=<br/>
'''128 + 64 + 8 + 2'''<br/>
=<br/>
'''20210'''<br/>
Convertire da binario a decimale è più difficile. Si devono trovare le potenze di due, che sommate, producono il risultato decimale. Consideriamo il valore decimale 1359:<br/>
* 2<sup>10</sup> = 1024, 2<sup>11</sup> = 2048. Quindi 1024 è la potenza di due più grande minore di 1359. Sottraiamo 1024 da 1359 e scriviamo a sinistra del valore binario “1”. Risultati: binario = “1” decimale = 1359 – 1024 = 335.
* La seconda potenza di due minore di 1359 è 2<sup>9</sup>. Siccome 2<sup>9</sup> è maggiore di 355 (2<sup>9</sup> = 512) scriviamo 0 alla seconda cifra del numero binario. Risultati: binario = “10” decimale = ancora 335
* La successiva potenza è 2<sup>8</sup> (256), ed è minore di 335. Eseguiamo la sottrazione 335 – 256 = 79 e aggiungiamo 1 al valore binario. Risultati: binario = “101” decimale = 79
* 128 (2<sup>7</sup>) è maggiore di 79, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “1010” decimale = ancora 79
* 64 (2<sup>6</sup>) è minore di 79, quindi aggiungiamo 1 al binario e il decimale diventa 79 – 64 = 15. Risultati: binario = “10101” decimale = 15
* 32 (2<sup>5</sup>) è maggiore di 15, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “101010” decimale = 15
* 16 (2<sup>4</sup>) è maggiore di 15, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “1010100” decimale = 15
* 8 (2<sup>3</sup>) è minore di 15, quindi aggiungiamo 1 al binario e il decimale diventa 15 – 8 = 7. Risultati: binario = “10101001” decimale = 7
* 4 (2<sup>2</sup>) è minore di 7, quindi aggiungiamo 1 al binario e il decimale diventa 7 – 4 = 3. Risultati: binario = “101010011” decimale = 3
* 2 (2<sup>1</sup>) è minore di 4, quindi aggiungiamo 1 al binario e il decimale diventa 4 – 2 = 2. Risultati: binario = “1010100111” decimale = 2
* 1 (2<sup>0</sup>) è minore di 2, quindi aggiungiamo 1 al binario e il decimale diventa 2 – 1 = 1. Risultati: binario = “1010100111” decimale = 1
* Se il numero decimale di partenza è pari aggiungere 0 al binario “10101001110”, nel nostro caso è dispari quindi diventa “10101001111” aggiungendo un 1 al binario.
Il sistema binario ha poca importanza negli HLLs, ma nell’Assembly è ovunque.
 
==Sistema di numerazione esadecimale==
Un gran problema con il sistema binario è la lunghezza. Per rappresentare il valore 202<sub>10</sup> abbiamo bisogno di 8 cifre. Con il sistema decimale invece abbiamo bisogno di solo 3 cifre decimali e, quindi, con il sistema decimale, possiamo rappresentare numeri molto complessi con un minor numero di cifre, più compatti. Quando si lavora con numeri complessi, il sistema binario diventa subito poco facile da usare. Sfortunatamente, i computer pensano solo in binario, quindi, la maggior parte delle volte è utile usare il binario. Anche se possiamo convertire decimali in binari e viceversa, la conversione è un operazione insignificante. Il sistema esadecimale (base 16) risolve questo problema. Il sistema esadecimale ci offre due funzionalità che stavamo cercando: i suoi numeri sono molto compatti, e sono semplici da convertire in binari e viceversa. Per questo motivo, molti computer utilizzano anche il sistema esadecimale. Siccome la base del sistema esadecimale è 16, ciascuna cifra esadecimale, ogni numero a sinistra della virgola rappresenta un valore moltiplicato per una potenza di 16. Per esempio, il numero 123416 è uguale a:<br/>
1 * 16<sup>3</sup> + 2 * 16<sup>2</sup> + 3 * 16<sup>1</sup> + 4 * 16<sup>0</sup><br/>
Oppure:<br/>
4096 + 512 + 48 + 4 = 466010<br/>
Ogni cifra esadecimale può rappresentare uno dei sedici valori tra 0<sub>10</sub> e 15<sub>10</sub>. Siccome esistono solo 10 cifre decimali, abbiamo bisogno di inventare 6 cifre addizionali per rappresentare i valori da 10<sub>10</sub> a 15<sub>10</sub>. Così abbiamo creato altri simboli per queste cifre, usiamo le lettere da A a F. Questi sono esempi di numeri esadecimale validi:
<table style="width: 100%;">
<tr>
<td>123416</td><td>DEAD16</td><td>BEEF16</td><td>0AFB16</td><td>FEED16</td><td>DEAF16</td>
</tr>
</table>
Siccome abbiamo spesso bisogno di inserire numeri esadecimale nei computer, abbiamo bisogno di meccanismi diversi per rappresentare i numeri esadecimale. Dopotutto, i computer non possono capire che base stiamo usando dal valore. Si usa questa convenzione:
* Tutti i numeri (qualunque sia la base), cominciano con una cifra decimale. (nel caso il numero dovesse cominciare con una lettera, si antepone "0" per non alterare il valore del numero)
* Tutti i numeri esadecimali finiscono con la lettera “h”, per esempio 0B7A4h.
* Tutti i numeri binari finiscono con la lettera “b”, per esempio 10001011b
* Tutti i numeri decimali '''dovrebbero''' terminare con “t” o “d”, generalmente d, per esempio 125d. Quest'ultima regola è opzionale. La maggior parte degli assemblatori, se non trovano l'identificatore, rendono il numero come decimale
Esempi di numeri esadecimali validi:
<table style="width: 100%;">
<tr>
<td>1234h</td><td>0DEADh</td><td>0BEEDh</td><td>0AFBh</td><td>0FEEDh</td><td>0DEAFh</td>
</tr>
</table>
Come puoi notare, I numeri esadecimali sono compatti e facili da leggere. Inoltre, si possono convertire facilmente in binario e decimale. Guarda questa tabella:
 
Binary Hexadecimal
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
 
Questa tabella fornisce tutte le informazioni di cui hai bisogno per convertire un esadecimale in binario e viceversa.
Per convertire un numero esadecimale in binario, devi semplicemente sostituire ogni cifra con il suo corrispondente binario. Per esempio, per convertire 0ABCDh in binario, dobbiamo semplicemente scambiare ogni cifra con il suo corrispondente nella tabella:
0 A B C D
0000 1010 1011 1100 1101
<br/>
Il risultato della conversione è: 0ABCDh = 1010101111001101b. Da qui possiamo trasformarlo semplicemente in decimale.<br/>
Per convertire un numero binario in esadecimale è altrettanto facile. Il primo passo è riempire l’estrema sinistra di 0 finche il numero di cifre non sarà divisibile per 4. Per esempio 1011001010b (10 cifre), deve diventare 001011001010 (12 cifre, divisibile per 4). Il prossimo passo e separare le cifre in gruppi di 4 bits. Quindi continuando il nostro esempio diventa 0010 1100 1010. Infine dobbiamo sostituire ogni gruppo con il suo corrispondente esadecimale nella tabella. Quindi il nostro binario diventerà 2CAh. Nota la differenza di difficoltà rispetto alla conversione tra binario e decimale e tra decimale e esadecimale!
Siccome la conversione tra binario e esadecimale è un operazione che dovremo svolgere molte volte, è bene memorizzare la tabella sopra. Se hai una calcolatrice che effettua la conversione (come quella di [[w:Windows]]), troverai che la conversione manuale è molto conveniente e più veloce quando si trasformano binari e esadecimali
----
[[Utente:Grop|Grop]] 15:14, 11 mag 2007 (UTC)