Nei processori precedenti, non tutti i registri erano uguali:
- Non c'era abbastanza spazio sui chip per avere un'unità di aggiunta per ogni registro.
- Con 8 bit, non c'erano abbastanza codici opzionali disponibili per tutte le possibili combinazioni di origine e destinazione.
Quindi, supponendo che uno specifico registro fosse sempre implicato quando era coinvolto il sommatore, rendeva il chip meno complesso e gli opcode più brevi.
es. il 6510 (usato in Commodore 64) poteva solo aggiungere usando il registro A, e l'indicizzazione usata X o Y. Ci sono istruzioni INC X e INC Y, ma non INC A.
Poiché i registri avevano usi diversi, i mnemonici venivano scelti in base al loro utilizzo. Per esempio. A, X e Y nel 6510 (anziché A, B e C).
I nomi nell'8086 vengono scelti per riflettere anche il loro uso. Con 4 registri general purpose, era logico chiamarli AX, BX, CX e DX. Ulteriori registri di indicizzazione sono stati chiamati BP e SP (mnemonico: puntatore di base, puntatore di stack).
Dato che molti codici opzionali erano estesi a 16 bit, c'era spazio per indicare quale dei quattro registri era stato utilizzato. Tuttavia, alcuni dei motivi storici sono ancora applicati, poiché CX era un po 'speciale: REP e simili, che sono opcode a 8 bit, usano sempre CX come contatore. Un semplice messaggio mnemonico, CX = Counter, aiuta a ricordare quale viene utilizzato.
Gli opcode per i successori dell'8086 dovevano essere retrocompatibili e sono un disastro a causa degli opcode di lunghezza variabile. Quando i bus a 32 bit sono diventati più comuni, sono stati provati processori con lunghezza opcode fissa. Ciò semplifica la parte di decodifica della CPU, che ha liberato spazio che potrebbe essere utilizzato per es. più registri.
I processori che hanno seguito questa linea di pensiero sono chiamati processori RISC (CPU di set di istruzioni ridotte), in contrasto con il CISC (CPU dell'insieme di istruzioni complesse).
Più registri si traducono in una minore dispersione in memoria. Fondamentalmente, i registri sono la cache più veloce disponibile, quindi aumentare il numero di registri è una buona idea, anche al giorno d'oggi. La mancanza di istruzioni specializzate era (si sperava più di) compensata dal più rapido passaggio di istruzioni semplici.
I codici opachi a 32 bit di lunghezza fissa hanno spazio sufficiente per includere una fonte, una seconda fonte, un'operazione e una destinazione. SPARC è riuscito a raggrinzire 5 bit per ciascuna sorgente, seconda fonte e destinazione, e quindi ha avuto 32 registri visibili allo stesso tempo.
32 registri sono troppi per usare le lettere, e comunque erano per lo più uguali, quindi la loro numerazione era la scelta più ovvia. La 'R' è stata usata per distinguerli dalle costanti 0..31, e 'R' era un semplice mnemonico per Register. Pertanto: R0..R31.
Nel corso degli anni, il Pentium e i suoi successori hanno mantenuto la compatibilità all'indietro. Tuttavia, molte delle idee RISC più efficaci sono state incorporate. Di frequente, quelle nuove istruzioni simili a RISC funzioneranno più velocemente rispetto alle versioni compatibili con versioni precedenti.
Anche il numero di registri è stato aumentato da Intel, per ridurre il numero di accessi alla memoria.
E a quanto pare, Intel ha finalmente iniziato a usare la notazione R. La compatibilità all'indietro assicurerà che AX, BX, ... rimarrà, ma scommetterei che AX è solo un sinonimo per es. R0.
Disclaimer : quanto sopra è la mia visione della storia. Sarà incompleto perché non ero in giro per assistere di persona alle prime parti della storia. Tuttavia, spero che sia utile per alcuni.