Assembly/Rappresentazione dati: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix cat
m +formattazione
Riga 1:
{{Linguaggio Assembly}}
==Introduzione==
Probabilmente il più grande ostacolo che la maggior parte dei principianti incontra quando prova ad imparare l’Assemblyl'Assembly è l’usol'uso comune del sistema binario ed esadecimale. E’È vero che i numeri hex ([[w:Esadecimale|esadecimali]]) sono un po’po' differenti da quelli che utilizziamo comunemente ([[w:Decimale|decimale]]), i loro vantaggi superano largamente i loro svantaggi. Tuttavia, bisogna capire questi sistemi di numerazione perché sono importanti nell’informaticanell'informatica.
 
==Sistemi di Numerazione==
I moderni computer non rappresentano i valori numerici usando il sistema decimale. Generalmente, usano il [[w:Sistema numerico binario|sistema binario]]. Per capire le limitazioni dell’aritmeticadell'aritmetica informatica, devi capire come un computer rappresenta i numeri.
 
 
==Il sistema decimale==
Hai usato il sistema decimale (in base 10) così a lungo che probabilmente lo hai preso per definitivo. Quando vedi un numero come “123”"123", non pensi al valore 123; generalmente, generi un’immagineun'immagine mentale di quanti elementi rappresenta il numero. In realtà, comunque, il numero 123 rappresenta:<br/>
'''1 * 102 + 2 * 101 + 3 * 100'''<br/>
Oppure:<br/>
Riga 19:
 
==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’internoall'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”"1" nel numero binario, sommare 2<sup>n</sup> dove “n”"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/>
Riga 29:
'''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”"1". Risultati: binario = “1”"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”"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”"101" decimale = 79
* 128 (2<sup>7</sup>) è maggiore di 79, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “1010”"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”"10101" decimale = 15
* 32 (2<sup>5</sup>) è maggiore di 15, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “101010”"101010" decimale = 15
* 16 (2<sup>4</sup>) è maggiore di 15, quindi aggiungiamo 0 al binario e il decimale resta uguale. Risultati: binario = “1010100”"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”"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”"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”"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”"1010100111" decimale = 1
* Se il numero decimale di partenza è pari aggiungere 0 al binario “10101001110”"10101001110", nel nostro caso è dispari quindi diventa “10101001111”"10101001111" aggiungendo un 1 al binario.
Il sistema binario ha poca importanza negli HLLs, ma nell’Assemblynell'Assembly è ovunque.
 
==Sistema di numerazione esadecimale==
Riga 62:
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”"h", per esempio 0B7A4h.
* Tutti i numeri binari finiscono con la lettera “b”"b", per esempio 10001011b
* Tutti i numeri decimali '''dovrebbero''' terminare con “t”"t" o “d”"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:
 
Riga 103:
<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’estremal'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|Windows]]), troverai che la conversione manuale è molto conveniente e più veloce quando si trasformano binari e esadecimali
 
Riga 109:
|NomeLibro=Assembly
|Libro=Assembly
|CapitoloPrecedente=PerchèPerché studiare l'Assembly
|NomePaginaCapitoloPrecedente=Assembly/Introduzione/PerchèPerché studiare l'Assembly
|CapitoloSuccessivo=Formati binari e organizzazione dei dati
|NomePaginaCapitoloSuccessivo=Assembly/Rappresentazione dati/Struttura binaria e organizzazione dei dati