Si observa el conjunto de instrucciones de un procesador, hay varias formas de agruparlos. Por ejemplo, todas las ADD
instrucciones pueden agruparse y todas las XOR
instrucciones.
Dentro de cada grupo de la misma instrucción, puede haber versiones que operan en la memoria o en los registros. Es este subgrupo lo que define efectivamente el número de registros que tiene el procesador.
Como ejemplo hipotético de 8 bits, digamos que las $Ax
instrucciones podrían ser las ADD
instrucciones y $Cx
podrían ser las XOR
instrucciones. ¡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 bien, uno podría usar el primer bit para distinguir variantes "especiales", y los otros 3 bits para definir cuál de los ocho registros para operar con el acumulador (
$x0
podría ser el acumulador mismo).
- O bien, uno podría tener más que este número de registros, pero luego limitar qué registros son accesibles para qué instrucciones.
Por supuesto, hemos pasado conjuntos de instrucciones de 8 bits. Pero aún así, esta lógica ayudó a definir conjuntos de registros en el pasado; continuará haciéndolo en el futuro.
EDITAR (según lo solicitado)
Decir la parte superior cuatro bits son para la instrucción: ADD
, SUB
, XOR
, MOV
, CMP
etc Hay 16 posibilidades aquí. Luego, para aquellas instrucciones en las que tiene sentido registrarse para registrarse (por ejemplo ADD Rx,Ry
), debe especificar Rx
y Ry
. Digamos que los siguientes dos bits son para x
, y los dos últimos son para y
. Así:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
¡Con solo dos bits para definir un registro como este, solo tiene espacio para un total de cuatro registros!
Como comentario adicional, notará 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 MOV
instrucción que toma un segundo byte como valor inmediato, interpretado como MOV Rx, #$yy
.
De esta manera, puede "jugar" con el mapa de instrucciones, completando los huecos para obtener instrucciones de otro modo inútiles o sin sentido para proporcionar un conjunto de instrucciones más amplio para el programador. Pero en última instancia, el conjunto de instrucciones define el conjunto de registros.