En los procesadores anteriores, no todos los registros eran iguales:
- No había suficiente espacio en los chips para tener una unidad sumadora para cada registro.
- Con 8 bits, no había suficientes códigos de operación disponibles para todas las combinaciones posibles de origen y destino.
Asumiendo que un registro específico siempre estuvo implicado cuando el sumador estuvo involucrado, hizo que el chip fuera menos complejo y los códigos de operación más cortos.
Por ejemplo, el 6510 (usado en Commodore 64) solo podía agregar usando el registro A, y la indexación usaba X o Y. Hay instrucciones INC X e INC Y, pero no INC A.
Como los registros tenían diferentes usos, se eligieron los mnemónicos que reflejaban su uso. Por ejemplo, A, X e Y en 6510 (en lugar de A, B y C).
Los nombres en el 8086 también se eligen para reflejar su uso. Con 4 registros de propósito general, era lógico nombrarlos AX, BX, CX y DX. Los registros de indexación adicionales se llamaron BP y SP (mnemónico: puntero base, puntero de pila).
Como muchos códigos de operación se extendieron a 16 bits, había espacio para indicar cuál de cada cuatro registros se usó. Sin embargo, algunas de las razones históricas aún se aplicaban, ya que CX era un poco especial: REP y los gustos, que son códigos de operación de 8 bits, siempre usan CX como contador. Un mnemónico simple, CX = Counter, ayuda a recordar cuál se usa.
Los códigos de operación para los sucesores del 8086 tenían que ser compatibles con versiones anteriores, y son un desastre como resultado de los códigos de operación de longitud variable. Cuando los buses de 32 bits se hicieron más comunes, se probaron procesadores con longitud de código de operación fija. Esto simplifica la parte de decodificación de la CPU, que libera espacio que podría utilizarse, por ejemplo, para más registros.
Los procesadores que siguieron esta línea de pensamiento se denominan procesadores RISC (CPU de conjunto de instrucciones reducidas), para contrastar con la CISC (CPU de conjunto de instrucciones complejas).
Más registros dan como resultado menos derrames a la memoria. Básicamente, los registros son el caché más rápido disponible, por lo que aumentar el número de registros es una buena idea, incluso hoy en día. La falta de instrucciones especializadas fue (con suerte más que) compensada por la producción más rápida de instrucciones simples.
Los códigos de operación de 32 bits de longitud fija tienen espacio suficiente para incluir una fuente, una segunda fuente, una operación y un destino. SPARC logró escribir 5 bits para cada fuente, segunda fuente y destino, y por lo tanto tenía 32 registros visibles al mismo tiempo.
32 registros son demasiados para usar letras, y en su mayoría eran iguales de todos modos, por lo que numerarlos era la opción obvia. La 'R' se usó para distinguirlos de las constantes 0..31, y 'R' fue un mnemónico fácil para Register. Por lo tanto: R0..R31.
Con los años, el Pentium y sus sucesores han mantenido una compatibilidad hacia atrás. Sin embargo, muchas de las ideas más exitosas de RISC también fueron incorporadas. Con frecuencia, esas nuevas instrucciones tipo RISC se ejecutarán más rápido que las versiones compatibles con versiones anteriores.
Intel también aumentó la cantidad de registros para reducir la cantidad de accesos a la memoria.
Y aparentemente, Intel finalmente ha comenzado a usar la notación R. La compatibilidad con versiones anteriores garantizará que AX, BX, ... permanezca, pero apuesto a que AX es solo un sinónimo de, por ejemplo, R0.
Descargo de responsabilidad : lo anterior es mi punto de vista sobre la historia. Será incompleto ya que no estaba cerca para presenciar las primeras partes de la historia de primera mano. Sin embargo, espero que sea útil para algunos.