Dans les processeurs précédents, tous les registres n'étaient pas égaux:
- Il n'y avait pas assez d'espace sur les puces pour avoir une unité additionneur pour chaque registre.
- Avec 8 bits, il n'y avait pas assez d'opcodes disponibles pour toutes les combinaisons possibles de source et de destination.
Ainsi, en supposant qu'un registre spécifique était toujours impliqué lorsque l'additionneur était impliqué, la puce était moins complexe et les opcodes plus courts.
Par exemple, le 6510 (utilisé dans le Commodore 64) ne pouvait ajouter qu'à l'aide du registre A et l'indexation utilisait X ou Y. Il existe des instructions INC X et INC Y, mais pas INC A.
Les registres ayant des usages différents, les mnémoniques ont été choisis en fonction de leur utilisation. Par exemple, A, X et Y dans le 6510 (au lieu de A, B et C).
Les noms du 8086 sont également choisis pour refléter leur utilisation. Avec 4 registres à usage général, il était logique de les nommer AX, BX, CX et DX. Des registres d'indexation supplémentaires ont été appelés BP et SP (mnémonique: Base Pointer, Stack Pointer).
Comme de nombreux opcodes ont été étendus à 16 bits, il y avait un espace pour indiquer quel registre sur quatre était utilisé. Cependant, certaines des raisons historiques s'appliquaient toujours, car CX était un peu spécial: REP et autres, qui sont des opcodes 8 bits, utilisent toujours CX comme compteur. Un simple mnémonique, CX = Counter, aide à se rappeler lequel est utilisé.
Les opcodes pour les successeurs du 8086 devaient être rétrocompatibles et sont un gâchis en raison des opcodes de longueur variable. Lorsque les bus 32 bits sont devenus plus courants, des processeurs avec une longueur d'opcode fixe ont été essayés. Cela simplifie la partie de décodage du CPU, ce qui a libéré de l'espace qui pourrait être utilisé par exemple pour plus de registres.
Les processeurs qui ont suivi cette ligne de pensée sont appelés processeurs RISC (CPU à jeu d'instructions réduit), en contraste avec le CISC (CPU à jeu d'instructions complexes).
Plus de registres entraînent moins de débordements dans la mémoire. Fondamentalement, les registres sont le cache le plus rapide disponible, donc augmenter le nombre de registres est une bonne idée, même de nos jours. Le manque d'instructions spécialisées a été (espérons-le plus) compensé par la rapidité d'exécution d'instructions simples.
Les opcodes 32 bits de longueur fixe ont suffisamment d'espace pour inclure une source, une deuxième source, une opération et une destination. SPARC a réussi à tordre 5 bits pour chacune de la source, de la deuxième source et de la destination, et a donc 32 registres visibles en même temps.
32 registres sont trop nombreux pour utiliser des lettres, et ils étaient pour la plupart égaux de toute façon, donc les numéroter était le choix évident. Le «R» a été utilisé pour les distinguer des constantes 0..31, et le «R» était un mnémonique facile pour Register. Par conséquent: R0..R31.
Au fil des ans, le Pentium et ses successeurs ont conservé une compatibilité ascendante. Cependant, bon nombre des idées les plus réussies du RISC ont également été intégrées. Souvent, ces nouvelles instructions de type RISC s'exécuteront plus rapidement que les versions rétrocompatibles.
Le nombre de registres a également été augmenté par Intel, afin de réduire le nombre d'accès à la mémoire.
Et apparemment, Intel a finalement commencé à utiliser la notation R. La rétrocompatibilité garantira que AX, BX, ... resteront, mais je parierais que AX n'est qu'un synonyme, par exemple, de R0.
Avertissement : Ce qui précède est mon point de vue sur l'histoire. Ce sera incomplet car je n'étais pas là pour assister aux premières parties de l'histoire de première main. J'espère néanmoins que cela sera utile à certains.