Les jeux d'instructions du MIPS R10000 et de l'UltraSPARC sont dits RISC. Pour ces deux microprocesseurs, le nombre de formats d'instructions est donc limité. Ceci permet un décodage plus facile des instructions. D'autre part, comme la taille des instructions est fixe (32 bits), leur rangement en mémoire est simplifié et sans surprise : toute frontière de mot est le début d'une instruction.
Au contraire, le PentiumPro a un jeu d'instructions CISC intégrant des instructions complexes et variées, d'où un format d'instructions très complexe. Toutes les instructions n'ont pas la même taille, ce qui accroît la complexité de la logique de décodage du microprocesseur. Par contre, les instructions sont assez proches des primitives employées par les langages de programmation, ce qui permet d'avoir des codes assembleurs relativement proches des codes sources initiaux. Il est à noter que le jeu d'instructions du PentiumPro est destructeur : c'est-à-dire que le résultat d'une opération à deux opérandes est toujours sauvé dans l'un de ses opérandes. Ceci réduit la taille des instructions, mais limite les possibilités d'optimisations par le compilateur.
Le jeu d'instructions du MIPS R10000, défini par la norme MIPS IV, se compose de trois formats principaux d'instructions :
Ce format a trois usages : il est utilisé pour les instructions de saut et de branchement conditionnel, pour certaines instructions arithmétiques, ainsi que pour les instructions de transfert de données.
La norme MIPS IV ne met pas en oeuvre de codes conditions pour les instructions entières. Lorsqu'un saut ou un branchement conditionnel doit être effectué, la comparaison a lieu dans l'instruction de saut : les deux registres désignés par rt et rs sont comparés et le résultat sert de condition au saut à l'adresse cible.
Une autre utilisation du format I-type concerne les instructions arithmétiques et logiques à deux opérandes : le registre désigné par rs et la constante (immédiat) sont les opérandes sources, le registre désigné par rt est la destination.
La dernière utilisation de ce format concerne les instructions de transfert de données (load/store). Le champ immédiat contient le déplacement alors que le champ rs désigne le registre de base de l'adresse de l'opérande à transférer. Le champ rt représente, pour sa part, le registre source ou destination suivant le sens de la transaction.
Ce format est utilisé pour les sauts et les branchements sans condition. Le champ cible ne contient que 26 bits : après un décalage à gauche de deux positions, on le concatène aux 4 bits (ou 36 bits) de poids forts du compteur ordinal pour obtenir les 32 bits (ou 64 bits) de l'adresse absolue. Lors d'une instruction Jump And Link, l'adresse de retour est automatiquement placée dans le registre R31.
La principale utilisation de ce format concerne les instructions arithmétiques à trois ou quatre opérandes (rs et rt sont les identificateurs des registres sources alors que rd désigne le registre destination). La norme MIPS IV inclut des instructions de multiplication-addition flottante dont le format est aussi de ce type. Dans le cas d'une telle instruction, fr, fd, fs sont des registres flottants source, alors que fd désigne le registre destination.
Il existe quelques autres utilisations de ce format, comme les appels au système qui déclenchent une routine sous le contrôle du gestionnaire d'exceptions ou bien les instructions déclenchant des routines d'exceptions après avoir testé une condition.
À ces trois types de base, trois formats supplémentaires d'instructions relatifs aux instructions flottantes ont été ajoutés :
Les instructions de l'UltraSPARC sont codées sur 32 bits. On peut différencier trois formats d'instructions dans la norme SPARC V9.
La figure représente ce format d'instructions qui permet d'effectuer un branchement en conservant l'adresse de retour dans un registre (registre r[15]). Un format particulier pour ce type d'instructions permet de coder le déplacement sur 30 bits, les déplacements sont relatifs au compteur de programme.
Les quatre formats d'instructions dits de branchement sont représentés à la figure : le premier concerne l'instruction SETHI qui place les 22 bits imm22 comme bits de poids forts dans le registre destination rd. Les trois autres formats sont utilisés pour des instructions de branchement (flottants ou entiers). Le deuxième format est le format des instructions de branchement de la norme SPARC V8. Ces instructions sont supportées par la norme SPARC V9, mais il est conseillé de les remplacer par les nouvelles instructions de branchements SPARC V9.
Le champ op2 composé de trois bits permet de coder le type d'instructions (branchement flottant, entier, instruction SETHI...), le code opération op ne tenant que sur deux bits. Le champ cond définit le type de test à appliquer au code condition. Les champs cc1 et cc2 permettent de définir le code condition à tester parmi :
Cette catégorie de formats d'instructions contient 26 formats. La figure montre les principaux. Voici la description des principaux champs :
Le champ i indique quel est le type du second opérande pour les instructions arithmétiques ou de transfert de données. Si i=0, l'opérande est le deuxième registre source rs2. Pour les opérations flottantes, le champ opf de 9 bits permet de coder l'instruction dans le premier format de la figure .
De même que précédemment, de nouveaux formats (par exemple, les deux derniers formats de la figure ) permettent de coder les nouvelles instructions de la norme SPARC V9 (déplacements conditionnels : MOVcc, FMOVr... ). Le champ indic contient des informations de contrôle sur l'emplacement adressé. Ces instructions sont précisées au prochain paragraphe. Les champs cc1 et cc2 permettent de définir le code condition à tester.
L'UltraSPARC implémente, en plus du jeu d'instructions SPARC V9, le jeu d'instructions Visual Instruction Set [10][9] (VIS) qui augmente les possibilités de traitements graphiques et de traitements d'images. Le format de ces instructions est donné à la figure . Nous détaillons ces instructions à la fin de ce chapitre.
Comme nous l'avons évoqué précédemment, le PentiumPro utilise le même jeu d'instructions que le Pentium.
La figure montre les différents champs pouvant entrer dans la composition des instructions du PentiumPro. Il faut noter que seul le code opération est obligatoirement présent. Six champs principaux servent à composer une instruction dont la taille varie de 1 à 15 octets. La plupart des instructions n'accédant pas d'opérandes, ou accédant toujours au même registre, tiennent sur un octet (ex : DX extension signée de AX, HALT ; FSQRT : racine carrée de la valeur se trouvant en sommet de pile flottante...) tandis qu'une instruction adressant une opérande en mémoire, utilisant tous les préfixes et le mode d'adressage basé indexé, peut occuper 15 octets. Les six champs d'une instruction du Pentium sont décrits suivant l'ordre de leur occurrence dans la liste suivante :