Nei processori precedenti, non tutti i registri erano uguali:
- Non c'era abbastanza spazio sui chip per avere un'unità sommatrice per ciascun registro.
- Con 8 bit, non c'erano abbastanza codici operativi disponibili per tutte le possibili combinazioni di sorgente e destinazione.
Supponendo quindi che un registro specifico fosse sempre implicato quando era coinvolto l'adder, rendeva il chip meno complesso e i codici operativi più brevi.
Ad esempio, il 6510 (utilizzato in Commodore 64) può essere aggiunto solo tramite il registro A e l'indicizzazione utilizza X o Y. Esistono istruzioni INC X e INC Y, ma nessuna INC A.
Poiché i registri avevano usi diversi, i mnemonici venivano scelti in base al loro utilizzo. Ad esempio, A, X e Y nel 6510 (anziché A, B e C).
I nomi nell'8086 sono scelti per riflettere anche il loro utilizzo. Con 4 registri di uso generale, era logico chiamarli AX, BX, CX e DX. Registri di indicizzazione aggiuntivi erano chiamati BP e SP (mnemonico: Base Pointer, Stack Pointer).
Poiché molti codici operativi sono stati estesi a 16 bit, c'era spazio per indicare quale registro su quattro è stato utilizzato. Tuttavia, alcuni dei motivi storici ancora applicati, dato che CX era un po 'speciale: REP e simili, che sono codici op a 8 bit, usano sempre CX come contatore. Un semplice mnemonico, CX = Counter, aiuta a ricordare quale viene usato.
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 del codice operativo fissa. Ciò semplifica la parte di decodifica della CPU, che ha liberato spazio che potrebbe essere utilizzato, ad esempio, per più registri.
I processori che hanno seguito questa linea di pensiero sono chiamati processori RISC (Reduced Instruction Set CPU), in contrasto con il CISC (Complex Instruction Set CPU).
Più registri si traducono in meno perdite di 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 è stata (si spera più di) compensata dalla più rapida trasmissione di semplici istruzioni.
I codici operativi a 32 bit di lunghezza fissa dispongono di spazio sufficiente per includere una sorgente, una seconda sorgente, un'operazione e una destinazione. SPARC è riuscito a wringle 5 bit per ciascuna sorgente, seconda sorgente e destinazione, e quindi aveva 32 registri visibili contemporaneamente.
32 registri sono troppi per usare le lettere, e comunque erano per lo più uguali, quindi numerarli era la scelta ovvia. La "R" veniva utilizzata 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 retrocompatibilità. Tuttavia, anche molte delle idee RISC di maggior successo sono state integrate. Spesso, queste nuove istruzioni simili a RISC verranno eseguite più rapidamente rispetto alle versioni compatibili con le versioni precedenti.
Intel ha inoltre aumentato il numero di registri per ridurre il numero di accessi alla memoria.
E a quanto pare, Intel ha finalmente iniziato a utilizzare la notazione R. La compatibilità con le versioni precedenti garantirà che AX, BX, ... rimarranno, ma scommetto che AX è solo un sinonimo per es. R0.
Disclaimer : quanto sopra è la mia visione della storia. Sarà incompleto perché non ero presente per assistere in prima persona alle parti precedenti della storia. Tuttavia, spero che sia utile per alcuni.