Université ELMANAR Institut d’Informatique Supérieur Architecture Avancée Zouhour Ben Azouz Hanane Ben Fraj A.U. 2010/2011 TD 1 : Jeux d’instructions Exercice 1 Soit le processeur DLX. Tous les registres ont 32 bits. Le processeur a 32 registres entiers, de R0 à R31. Le registre R0 est câblé à 0 (R0=0). On peut lire son contenu, mais l’écriture dans R0 ne produit aucun résultat. R31 contient l’adresse de retour des procédures. Les instructions sont de longueur fixe (32 bits). Le jeu d’instructions est donné dans la table 1. La mémoire est adressable par octets. NB : Les instructions de comparaison S__ positionnent le registre destination à 1 si la condition est vraie, et 0 si la condition est fausse. Ex : SNE R4, R5, R6 met R4 à 1 si R5R6 Les syntaxes assembleur sont les suivantes: Instructions registres-registre : Code op, registre destination, registre source 1, registre source 2 Instructions registres-immédiat : Code op, registre destination, registre source 1, immédiat Instructions mémoire : Code op, registre donnée, déplacement (registre adresse) Instructions branchement : Code op, registre, déplacement Instructions de saut : Code op, déplacement ou Code op, registre. 1. Quelles est la nature de ce processeur RISC ou CISC, justifier votre réponse. 2. Combien de bits sont réservés au code op dans le format RI. 3. Comment peut-on exécuter avec uniquement le jeu d’instruction DLX donné par la table 1 les actions suivantes : a) Mettre F000A000H dans le registre R3 b) Diviser par 2 le contenu du registre R4, interprété en signé 1 c) Multiplier par 18 le contenu du registre R5 d) Mettre dans R2 la valeur absolu de R2 cad R2 R2 si R2 >0 R2 -R2 si R2 <0 Indication : il faut tester le bit de signe de R2 Table 1 : Jeu d'instructions DLX Type d'instruction et code-op Signification de l'instruction Transferts de données (depuis ou vers la mémoire) Transfère les données entre des registres et la mémoire ; le seul mode d'adressage mémoire est (registre + déplacement signé de 16 bits) LB, LBU, SB LH, LHU, SH LW, SW Arithmétique et logique ADD, ADDI, ADDU, ADDUI Chargement octet, octet non signé, rangement octet Chargement demi-mot, demi-mot non signé, rangement demi-mot Chargement mot, rangement mot (de/vers des registres entiers) Opérations sur les données entières ou logiques dans des registres entiers; Addition, addition immédiats (tous les immédiats ont 16 bits). Les opérandes sont signés pour ADD et ADDI (avec extension de signe de l’immédiat). Les opérandes sont non signés pour ADDU et ADDUI (avec extension de 0 pour l’immédiat) SUB, SUBU AND, ANDI OR, ORI, XOR, XORI LHI Soustraction signée, non signee Et, et immédiat (extension de 0 pour l’immédiat) Ou, ou immédiat, ou exclusif, ou exclusif immédiat (extension de 0 pour l’immédiat) Chargement haut immédiat (charge la partie haute d'un registre avec un immédiat) et met à zéro la partie basse Décalages : sous forme immédiate (S__I) ou variable (S__); les décalages sont logique à gauche, logique à droite, et arithmétique SLL, SRL, SRA, SLLI, SRLI, SRAI S__, S__I Contrôle BEQZ, BNEZ J, JR Positionner la condition : "__" peut être EQ, NE, LT, GT, LE, GE Branchements conditionnels et sauts; relatifs CP ou par registre Branchement si registre entier égal/non égal à zéro; déplacement relatif de 16 bits ajouté à CP Sauts : déplacement de 26 bits ajouté à CP (J) ou destination dans le registre (JR) 2 Exercice2 : Exemples MIPS et ARM pour les instructions arithmétiques Multiplication par des constantes L’instruction de multiplication sur des entiers prend plus d’une dizaine de cycles d’horloge sur la plupart des processeurs. Les instructions logiques, l’addition et la soustraction prennent généralement un seul cycle d’horloge. Il est donc plus efficace d’implanter la multiplication du contenu d’un registre par une constante en utilisant des opérations comme l’addition, la soustraction et les décalages. En utilisant les instructions ci-dessous pour le MIPS et pour l’ARM, donner la suite d’instructions MIPS et la suite d’instructions ARM pour effectuer la multiplication du contenu du registre R1 par les constantes : 33,31et 37. Instructions MIPS où IMM16 est une constante sur 16 bits et SIMM16 est la constante 32 bits obtenue par extension de signe. ARM Format des instructions arithmétiques et logiques : I=1 si l’opérande 2 est une valeur immédiate 0 sinon. 3 n : numéro du registre opérande 1 d : numéro du registre destination operand2 : second opérande. Trois formats sont possibles : o opérande registre, décalage éventuel spécifié par une constante : 11 10 9 8 7 6 5 4 3 2 1 0 #shift Sh 0 Rm o #shift : nombre de positions de décalage Sh : type de décalage (00 = LSL, 01 = LSR, 10 = ASR, 11 = ROR) Rm : numéro du registre opérande registre, décalage éventuel spécifié par un registre : 11 10 9 8 7 6 5 4 3 2 1 0 Rs 0 Sh 1 Rm o Rs : numéro du registre contenant le nombre de positions de décalage Sh : type de décalage (00 = LSL, 01 = LSR, 10 = ASR, 11 = ROR) Rm : numéro du registre opérande immédiat (de la forme valeur_8_bits * 2^2k) : 11 10 9 8 7 6 5 4 3 2 1 0 K value value : valeur sur 8 bits Exemple ADD R2, R1, R0 LSL #4 signifie R2 = 4 Exercice 3 : On considère une architecture comportant 16 registres 16 bits. Le jeu d'instructions est le suivant : Questions 1. Calculer le nombre total N d'instructions distinctes, 2. Si on utilise un format d'instruction de longueur constante, quelle est la longueur minimum d'une instruction ? 3. Un format d'instruction de longueur variable permet-il d'obtenir une longueur moyenne d'instruction plus petite qu'un format de longueur constante? 4. Proposer une modification minimale du jeu d'instruction qui permet un codage de longueur constante sur 16 bits (il existe plusieurs solutions acceptables). Calculer le nombre total N0 d'instructions distinctes et vérifier qu'il est compatible avec un codage sur 16 bits. Proposer un codage 16 bits pour le jeu d’instructions modifié. 5