Assembly/Rappresentazione dati/Struttura binaria e organizzazione dei dati

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search
Assembly
modifica
Indice

Struttura binaria[modifica]

Matematicamente, ogni numero binario contiene un numero infinito di cifre (o bits che è la riduzione di binary digits). Per esempio il numero 5 (101) può essere rappresentato come:

101 0000101 0000000101 0000000101

Ecc… Ciascuno zero che precede il valore binario non cambia il valore del numero. Generalmente si ignorano gli zero precedenti il valore effettivo. Ed esempio 101b rappresenta 5, anche senza alcun zero che lo precede. Dal processore 80x86 si lavora con gruppi di 8 bits o 4 bits, quindi 101b diventa 0101b o 00000101b.
Negli Stati Uniti, la maggior parte della gente separa i numeri con punti ogni tre cifre, per rendere più leggibile il numero. Per esempio 1.023.435.208 è più facile da leggere e comprendere che 1023435208. Una simile convenzione è utilizzata nel sistema binario. Separiamo ciascun gruppo di 4 bits con uno spazio. Per esempio, il valore binario 1010111110110010 verrà scritto 1010 1111 1011 0010.
Per utilità si assegna un numero a ciascun bit che ne assegna la posizione in questo modo:

  1. Il bit all'estrema destra ha posizione 0.
  2. La posizione di ciascun bit a sinistra del primo dalla posizione del precedenti + 1

Un numero di 8 bit binario usa i valori da 0 a 7 per identificarne un determinato bit:
x7x6x5x4x3x2x1x0
Un numero di 16 bit binario usa i valori da 0 a 15:
x15x14x13x12x11x10x9x8x7x6x5x4x3x2x1x0

Organizzazione dei dati[modifica]

In matematica, un valore può occupare un numero arbitrario di bits. I Computer invece, lavorano con specifici gruppi di bits. Gruppi di bit comuni sono, gruppi di un solo bit, gruppi di 4 bits (nibbles), gruppi di 8 bit (bytes), gruppi di 16 bit (words), gruppi di 32 bit (double words), gruppi di 64 bit (quad words). Queste dimensioni non sono arbitrarie. C'è una ragione valida per questi valori particolari. Questa sezione descrive i gruppi di bit usati sull'Intel 80x86.

Bits[modifica]

La più piccola unità di informazione digitale è il bit. Un solo bit è capace di rappresentare due valori numerici (0 e 1). Potrai pensare che si possono rappresentare solo poche cose con un singolo bit. Non è vero!!! Esistono infiniti oggetti che si possono rappresentare con un solo bit. Con un solo bit, puoi rappresentare due elementi distinti. Per esempio:

1 0
Vero Falso
Acceso Spento
Maschio Femmina
Giusto Sbagliato
Destra Sinistra

Ma non per forza due oggetti distinti ed opposti. Possiamo rappresentare anche i colori rosso e blu, oppure i numeri 723 e 1245 o ancora gli oggetti "penna" e "scrivania". Tutto a nostra scelta.

Nibbles[modifica]

Un nibble è un gruppo di 4 bit. Viene utilizzato nel BCD (binary coded decimal) e per rappresentare una cifra esadecimale (ogni cifra esadecimale occupa 4 bit). Con un nibble possiamo rappresentare 16 diversi valori secondo la tabella del capitolo precedente.

Bytes[modifica]

Sicuramente, la più importante struttura di dati usata dal 80x86 è il byte. Un byte è composto da 8 bits, ed è la più piccola unità di informazione indirizzabile nel processore 80x86 (vedremo più avanti cosa significa). Le locazioni di memoria e gli indirizzi I/O sono tutti byte addressed. Questo significa che il valore più piccolo a cui si può accedere individualmente è il byte. Per accedere a dati più piccoli bisogna prendere tutto il byte che lo contiene e mascherare i bit che non vogliamo. I bits sono normalmente numerati da 0 a 7 come già detto. La struttura di un byte comprende 8 bits:

7

6

5

4

3

2

1

0

Il bit 0 è il low bit o bit meno significativo, il bit 7 è lo high bit o bit più significativo.
Per ogni byte sono inclusi in esso 2 nibble:
Lo High Nibble (in azzurro) e il Low Nibble (in arancione). I bit dallo 0 al 3 formano il Low Nibble mentre quelli dal 4 al 7 lo High Nibble. Siccome in un nibble entra una cifra esadecimale, in un byte entreranno 2 cifre esadecimale.
Siccome un byte contiene 8 bit, può rappresentare 28 (256) valori diversi. Generalmente viene utilizzato per rappresentare numeri senza segno (da 0 a 255) o con segno (da -128 a +127) (vedi "Numeri con e senza segno"), per rappresentare codici di carattere ASCII/IBM, o altri dati speciali che non richiedono più di 256 valori. Molti tipi di dati hanno meno valori di 256, quindi spesso un byte è sufficiente.

Words[modifica]

Una word è un gruppo di 16 bit (o 2 byte o 4 nibble). I bit vengono numerati da 0 a 15. Come il byte viene diviso in due parti: Low Byte e High Byte.
Può essere diviso anche in 4 nibble.
Con 16 bit possiamo rappresentare 216 (65536) differenti valori. Quindi numeri da 0 a 65535 o da -32768 a +32767, o qualunque tipo di dati con non più di 65536 valori. L'uso più frequente delle word è la rappresentazione di numeri interi.

Double Words[modifica]

Una double word è un gruppo di 32 bit (o 2 word o 4 byte o 8 nibble). I bit vengono numerati da 0 a 31.
Può essere diviso in Low Word e High Word, in 4 byte o in 8 nibble.
Possiamo rappresentare 232 (4.294.967.296) valori diversi .
Possiamo rappresentare numeri da 0 a 4.294.967.295 o da -2.147.483.648 a +2.147.483.647.

Quad Words[modifica]

Una quad word è un gruppo di 64 bit (o 2 double word o 4 word o 8 byte o 16 nibble). I bit vengono numerati da 0 a 63.
Può essere diviso in Low double word e in High double Word, in 4 Word, in 8 byte o in 16 nibble.
Possiamo rappresentare 264 (18.446.744.073.709.551.616) valori.
Possiamo rappresentare numeri da 0 a 18.446.744.073.709.551.615 o da -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807

1leftarrow.png Modulo precedente

Perché studiare l'Assembly

1uparrow.png Torna a

Assembly

1rightarrow.png Modulo successivo

Operazioni aritmetiche con numeri binari ed esadecimali