TD n° 1 : JEUX D`INSTRUCTIONS

publicité
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 R5R6
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
Téléchargement