Quindi per chiudere io con registro di indirizzi a 20 bit al massimo avró una ram di dimensione 2^20’piu grande non serve in quanto non sarà utilizzata, giusto?
Temo tu stia ancora confondendo il fisico col logico.
Fisico = quanti fili ha il bus indirizzi. E' una cosa materiale.
Logico = quanti bit hanno i registri usati per contenere gli indirizzi a cui accedere. E' una cosa immateriale. Riguarda i programmi.
Ovviamente il limite invalicabile è la dimensione del bus fisico. Se hai 20 fili, è impossibile che tu possa indirizzare 2^32 locazioni. Come potresti fare? 20 fili = 20 bit rappresentabili. Gli altri 12 chi ce li mette? Se metti venti 1 di fila, arriva al massimo a 2^20 = 1 Mega.
A meno di avere un secondo bus indirizzi ( e sarebbe folle ) non vedo come tu possa indicare gli altri 12 bit.
E un discorso analogo si applica lato software ai registri. Un registro a 16 bit ( se metti tutti 1 ) può rappresentare al massimo il numero 2^16 = 64K.
Ma che succede se il tuo processore è stato creato in modo da riempire il bus indirizzi col contenuto preso da 2 registri diversi? Pensaci. Hai, per esempio, DI che è 16 bit. Hai CS che è pure lui 16 bit. Se li accodi?
Cioè
[CS][DI] -> hai una stringa di 32 bit. I 16 di DI a destra e i 16 di CS a sinistra. Di fatto è un valore a 32 bit.
E se invece fai una cosa così?
DI = 1011011101110111
CS = 0010001000001001
Il processore ( quindi l'hardware, non la parte software ) shifta CS di 4 bit verso sinistra, ottenendo 00100010000010010000. Notato che il valore è diventato di 20 bit? E si, non può essere contenuto in CS e infatti quel numero non viene salvato in CS, ma in un apposito registro del processore ( nascosto al programmatore ) che è di 20 bit ( la stessa dimensione del bus indirizzi ).
Adesso sommi CS e DI.
00100010000010010000 +
1011011101110111
=====================
00101101100000000111 --> questo viene messo sul bus indirizzi....un numero a 20 bit!!
L'indirizzamento x86 in modalità reale funziona così. In modalità protetta i registri vengono usati in un altro modo e questo ragionamento non è applicabile.
p.s. parlando di libri, a suo tempo usai "8086-8088 programmazione" di James Coffron, Jackson libri. La sezione sugli indirizzamenti spiega molto meno questa cosa della costruzione dell'indirizzo fondendo 2 registri diversi.