Si observa el conjunto de instrucciones de un procesador, hay varias formas de agruparlas. Por ejemplo, todas las instrucciones ADD
podrían agruparse juntas, y todas las instrucciones XOR
.
Dentro de cada grupo de la misma instrucción, puede haber versiones que operan en la memoria o en los registros. Es este subgrupo el que define efectivamente la cantidad 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 cuál de los ocho registros operarán con el acumulador (
$x0
podría ser el acumulador mismo).
- O, uno podría tener más de este número de registros, pero luego limitar los registros a los que se puede acceder y las instrucciones.
Por supuesto, hemos pasado los 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)
Diga que los cuatro bits principales corresponden a la instrucción: ADD
, SUB
, XOR
, MOV
, CMP
, etc. Hay 16 posibilidades aquí. Luego, para aquellas instrucciones en las que registrar con registro tenga sentido (por ejemplo, ADD Rx,Ry
), debe especificar Rx
y Ry
. Digamos que los siguientes dos bits son para x
, y los últimos dos 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 nota aparte, 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 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 toma un segundo byte como un valor inmediato, interpretado como MOV Rx, #$yy
.
De esta manera, puede "jugar" con el mapa de instrucciones, rellenando los orificios para obtener instrucciones 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.