Si echas un vistazo al conjunto de instrucciones de un procesador, hay varias formas de agruparlas. Por ejemplo, todas las instrucciones ADD
podrían estar agrupadas juntas, al igual que todas las instrucciones XOR
.
Dentro de cada grupo de instrucciones iguales, puede haber versiones que operan en la memoria o en registros. Es esta sub-agrupación la que define efectivamente el número de registros que tiene el procesador.
Como ejemplo hipotético de 8 bits, digamos que las instrucciones $Ax
podrían ser las instrucciones ADD
, y $Cx
podrían ser las instrucciones XOR
. ¡Con este diseño, solo quedan cuatro bits para definir los operandos!
- Uno podría tener solo cuatro registros de propósito general, y usar dos bits para definir uno, y dos bits para definir el otro.
- O, uno podría usar el primer bit para distinguir variantes "especiales", y los otros 3 bits para definir con qué uno de los ocho registros operar con el acumulador (
$x0
podría ser el acumulador en sí mismo).
- O, uno podría tener más registros que este número, pero luego limitar qué registros son accesibles para qué instrucciones.
Por supuesto, ya hemos pasado de los conjuntos de instrucciones de 8 bits. Pero aún así, esta lógica ayudó a definir los conjuntos de registros en el pasado, y seguirá haciéndolo en el futuro.
EDICIÓN (según solicitud)
Digamos que los cuatro bits superiores son para la instrucción: ADD
, SUB
, XOR
, MOV
, CMP
etc. Hay 16 posibilidades aquí. Luego, para aquellas instrucciones donde tiene sentido de registro a registro (por ejemplo ADD Rx, Ry
), necesitas especificar Rx
y Ry
. Digamos que los dos siguientes bits son para x
, y los últimos dos son para y
. Por lo tanto:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
Con solo dos bits para definir un registro de esta manera, ¡solo tienes espacio para un total de cuatro registros!
Como nota aparte, notarás que algunas combinaciones de registros no tienen sentido. Por ejemplo, MOV Rx, Rx
(no hace nada) y SUB Rx, Rx
(siempre produce 0
). Estas podrían convertirse en instrucciones de casos especiales:
SUB Rx, Rx
podría convertirse en NOT Rx
- una instrucción de un solo operando.
MOV Rx, Rx
podría convertirse en una instrucción MOV
que tome un segundo byte como un valor inmediato, interpretado como MOV Rx, #$yy
.
De esta manera, puedes "jugar" con el mapa de instrucciones, llenando los vacíos para instrucciones de lo contrario inútiles o sin sentido para proporcionar un conjunto de instrucciones más grande para el programador. Pero en última instancia, el conjunto de instrucciones define el conjunto de registros.
0 votos
Legado. Mucho de él.
0 votos
No entendí lo que quieres decir. Los registros son totalmente necesarios para que funcione un mP. De hecho, son la condición #1 para comenzar.
8 votos
@Alper91 Muchas arquitecturas, hipotéticas y reales, no tienen registros, y no es en absoluto necesario. Es simplemente una optimización útil.
1 votos
En los PIC de 8 bits, toda la RAM son registros. Por ejemplo, el PIC16F18877 tiene 4K de RAM que se accede a través de 64 bancos, cada uno con 80 registros de archivos.
4 votos
Hmm. Nadie ha mencionado el Sparc. La implementación más grande podría tener 520 registros (32 ventanas por 16 registros, + 8 globales.) Seguro que los recuerdo.
13 votos
Creo que el número de bits en la instrucción que necesitas para especificar el registro es un gran problema. Si tienes 1024 registros, entonces necesitas al menos 30 bits para cada instrucción aritmética - a menos que agregues otras restricciones como "todos los 3 registros deben ser del mismo grupo de 32 (en cuyo caso necesitas 20 bits).
1 votos
El "más memoria en el chip" se implementa como caché L1.
0 votos
@pjc50: Sí. Pero ese L1, que solía ser solo 3 veces más lento que la CPU en los días de P2, ahora sigue siendo más lento ya que la CPU ha aumentado su velocidad. Simplemente no se acerca a la velocidad de la CPU. Principalmente "apúrate y espera" incluso para el L1. L1 no es un registro.
8 votos
@pipe - en realidad, prácticamente cualquier diseño práctico requiere "registros" en el sentido del esquemático, ya que incluso si construyes una máquina de pila u algo así, tienes que tener un lugar para guardar los argumentos para la ALU, o de lo contrario las salidas - la mayoría de las memorias no tienen tres puertos de acceso. Y una máquina de pila necesita un puntero de pila que es... ¡un registro! Y no mencionemos los registros de pipeline. Puedes ocultar el uso de dichos "registros" del programador, pero aún así necesitas algunos, y probablemente casi tantos como una máquina de registro primitiva tiene.
4 votos
@ChrisStratton Claro, pero siempre y cuando no estén expuestos a través del ISA, es simplemente un detalle de implementación. Sin embargo, es un argumento algo inútil, ya que no sabemos a qué se refiere OP con register.
1 votos
Ten en cuenta que un procesador puede tener más registros de los que demanda su arquitectura. Consulta es.wikipedia.org/wiki/Renombramiento_de_registros
0 votos
Algunos de los microprocesadores más antiguos usaban múltiples registros para almacenar cada dirección de memoria, por ejemplo, he leído de procesadores de 8 bits con 1 MB de memoria.