Je dirais que, sans doute, ils prennent en charge des millions d'instructions. Mais cela dépend vraiment de la façon dont vous définissez une "instruction".
En général, les instructions sont divisées en plusieurs champs - une partie indique en quoi consiste l'opération (ajouter, soustraire, diviser, créer une branche, sauter, lire, écrire, etc.), puis d'autres parties peuvent fournir des arguments - des valeurs immédiates ou enregistrer des indices. Ainsi, si vous regroupez toutes les valeurs immédiates possibles et toutes les indications de registre possibles ensemble, alors vous n'avez qu'un nombre relativement petit d'opérations. Comme chaque opération doit être évaluée sur du matériel dédié (enfin, plus ou moins ... des choses comme ajouter et soustraire peuvent être faites sur le même matériel avec une certaine configuration / prétraitement), le nombre d'opérations distinctes doit être limité par la zone et la complexité de la puce.
Cependant, différents arguments aboutissent à un code machine différent. Par exemple, prenez l'instruction RISC-V add, ADD rd, rs1, rs2
qui prend deux valeurs de registre, rs1
et rs2
, les ajoute ensemble, et place le résultat dans un troisième registre, rd
. RISC-V a 32 registres, ce qui signifie qu'il y a 32 * 32 * 32 = 32 768 "instructions" différentes qui sont toutes mappées sur ADD, mais avec des arguments différents. De même, ADDI rd, rs1, imm
prend une valeur immédiate de 12 bits, l'ajoute à rs1
et écrit le résultat dans rd
. Ainsi, cela donne 32 * 32 * 4096 = 4 194 304 encodages distincts juste pour ADDI
.
La division de "l'espace d'instructions" est une partie très importante de la conception d'un ISA.Quels bits vous utilisez pour les arguments de registre, quels bits vous utilisez pour des valeurs immédiates, quels bits vous utilisez pour déterminer l'opération, quels bits vous utilisez pour déterminer le format d'instruction, quels bits vous utilisez pour déterminer la taille d'instruction, etc.portant sur la flexibilité et l'expressivité du jeu d'instructions et la complexité du matériel de décodage requis dans la CPU.L'augmentation du nombre d'opérations disponibles se fait généralement au détriment de la flexibilité - taille immédiate, nombre d'arguments, nombre de registres adressables, etc.