Nonloso93 ha scritto:
Perfetto si ci sono! e non è possibile con 32 bit fare 32 bit di indirizzo fisico (ovvero 32 pin di indirizzo) e 64 bit di bus dati? e questo il punto che non riesco a capire perché così viene una memoria indirizzabile più di 4 GB perché sono 2^32 * 64.
Questa parte non l'ho capita ed è forse quella che mi risolve il mio dubbio (Quindi se ci fosse un registro a 32 bit che tiene un indirizzo, userebbe 30 bit, con i 2 bit "alti" non usati.) in che senso?
Ho capito il tuo dubbio e vediamo di chiarire. Lo scenario è quello che dicevo, un registro a 32 bit che tiene un indirizzo che per limiti vari (come esempio) è ristretto a solo 30 bit.
Se il bus dati fosse a 8 bit, il registro verrebbe usato così:
31 30 29 28 3 2 1 0
+--+--+--+--+ +--+--+--+--+
|xx|xx| | |~~~~~~~~| | | | |
+--+--+--+--+ +--+--+--+--+
/ / \ /
/ / \ /
non usati \ /
indirizza 2^30 celle da 8 bit
Se il bus dati fosse a 16 bit allora:
31 30 29 28 3 2 1 0
+--+--+--+--+ +--+--+--+--+
|xx|xx| | |~~~~~~~~| | | | |
+--+--+--+--+ +--+--+--+--+
/ / \ / \
/ / \ / indirizza il byte 0 o 1 sui 16 bit
non usati \ /
indirizza 2^29 celle da 16 bit
E se fosse a 32 bit:
31 30 29 28 3 2 1 0
+--+--+--+--+ +--+--+--+--+
|xx|xx| | |~~~~~~~~| | | | |
+--+--+--+--+ +--+--+--+--+
/ / \ / \ \
/ / \ / indirizzano il byte 0,1,2,3 sui 32 bit
non usati \ /
indirizza 2^28 celle da 32 bit
Ma alla fine non cambia nulla! Sono sempre 2^30 byte indirizzabili.
Solo che nel primo caso hai "fisicamente" una "pila" di 1073741824 celle da 8 bit mentre nel secondo hai una "pila" più corta di 536870912 celle da 16 bit e nel terzo 268435456 celle da 32 bit.
E facciamo anche un esempio di indirizzamento con bus 32 bit, supponiamo che ci sia una istruzione in grado di operare con la granularità del byte (ad esempio per vedere se un singolo byte è zero).
Dato l'indirizzo 0x00000086, in binario 00000000 00000000 00000000
10000110
Vuol dire: prendi i 32 bit alla cella 100001 (33 in decimale), prendi il terzo byte del valore 32 bit.