Come esempio per illustrare il funzionamento, parliamo prima di un classico processore a 32 bit come il buon vecchio 68020.
Per varie ragioni (compatibilità, usabilità per caratteri ASCII, ...), anche le CPU a 32 e 64 bit hanno nomi (chiamati "indirizzi") per singoli byte. Se la CPU ha bisogno di nominare un blocco più grande di memoria, ad es. 4 byte, usa il nome per il primo byte e implicitamente i seguenti byte sono quelli con i seguenti numeri di indirizzo.
D'altra parte, il bus può trasferire 32 bit contemporaneamente, poiché la CPU ha 32 linee dati D0 ... D32. Quindi, dei 32 bit di un indirizzo, i 2 bit inferiori selezionano un gruppo di linee dati (i bit 00 selezionano D0 ... D7, 01 seleziona D8 ... D15, 10 seleziona D16 ... D23, e 11 seleziona D24 ... D31). Solo i 30 bit di indirizzo più alti esistono come linee di indirizzo reali A2 ... A32. Invece dei 2 bit inferiori, la CPU ha quattro distinti segnali di selezione dei byte che può utilizzare singolarmente in combinazioni diverse.
Ora, se la CPU vuole leggere 32 bit dall'indirizzo 0x1000, può utilizzare tutte e 32 le linee dati in parallelo. Posiziona i 30 bit più alti sul bus degli indirizzi e imposta tutti e quattro i segnali di selezione dei byte, quindi trasferisce 4 byte.
Vediamo una panoramica:
- leggere byte da 0x1000: bus indirizzo = 0x1000, byte-selezionare 0
- leggere byte da 0x1001: indirizzo bus = 0x1000, byte-selezionare 1
- leggere byte da 0x1002: bus indirizzo = 0x1000, byte-selezionare 2
- leggere byte da 0x1003: indirizzo bus = 0x1000, byte-selezionare 3
- leggere byte da 0x1004: indirizzo bus = 0x1004, byte-selezionare 0
- lettura breve da 0x1000: bus indirizzo = 0x1000, byte-seleziona 0 + 1
- lettura breve da 0x1002: bus indirizzo = 0x1000, byte-seleziona 2 + 3
- leggi int da 0x1000: bus indirizzo = 0x1000, byte-seleziona 0 + 1 + 2 + 3
- read (unaligned) int da 0x1002: (primo ciclo) Address bus = 0x1000, Byte-Select 2 + 3, quindi (secondo ciclo) Address bus = 0x1004, Byte-Select 0 + 1
Con le CPU attuali il principio rimane lo stesso, ma con la memoria cache interna non è più possibile osservare i singoli trasferimenti di byte del core della CPU dall'esterno. Accadono tra il core della CPU e la cache (entrambi on-chip). La memoria parla ora solo con la cache e il trasferimento avviene sempre in blocchi più grandi di un byte.