Un jeu d`instructions RISC simple : NIOS II

publicité
L3 – Informatique
Mise à niveau
D. Etiemble
2007-08
Un jeu d’instructions RISC simple : NIOS II
Dans ce TD, on utilise le jeu d’instruction NIOS II (processeur « logiciel » pour FPGA Altera).
Q 1) On considère l’instruction ADD. Donner la plus grande valeur et la plus petite valeur
représentable dans les registres en supposant que les registres contiennent des entiers signés en
complément à deux. Pour les deux valeurs, on demande la forme hexadécimale et son équivalent
décimal.
Q 2) Même question que Q 1) en supposant que les registres contiennent des entiers non signés.
Registre
R0
R1
R2
R3
R4
R5
R6
R7
Contenu (hexa)
00000000
00001000
00001016
8432A380
ECDF1234
89765432
12345678
2ABCDEF0
Adresse (hexa)
00001000
00001004
00001008
0000100C
00001010
00001014
Contenu (hexa)
00000001
00000002
FEDC8765
000000A4
00000005
00000006
Table 1
Q 3) En partant à chaque fois du contenu de la table 1, donner le contenu des registres après
exécution des instructions NIOS II. On considérera que les registres contiennent des entiers signés
en complément à deux. Dans chaque cas, on considérera que l’instruction est à l’adresse 1000 0000H.
a)
ADD R8,R1,R2
b)
ADD R9,R6,R7
c)
SUB R9, R1,R2
d)
SUB R10, R6,R7
Indiquer si le résultat est correct ou non.
En supposant que les registres contiennent maintenant des entiers non signés, donner le contenu des registres
après exécution des instructions
e)
ADD R8,R1,R2
f)
ADD R9,R6,R7
Indiquer si le résultat est correct ou non
Q 4) En partant à chaque fois du contenu de la table 1, donner le contenu des registres après
exécution des instructions NIOS II. On considérera que les registres contiennent des entiers signés
en complément à deux. Dans chaque cas, on considérera que l’instruction est à l’adresse 1000 0000H.
a)
b)
ADDI R8,R1,-4
ADD R9,R4,10
Q 5) En partant à chaque fois du contenu de la table 1, donner le contenu des registres après
exécution des instructions NIOS II. Dans chaque cas, on considérera que l’instruction est à
l’adresse 1000 0000H
a)
b)
c)
AND R10,R3,R4
XOR R11,R3,R4
OR R12,R3,R4
Q 6) Sans utiliser l’instruction de multiplication, écrire la suite d’instructions permettant de ranger
dans R2 les valeurs suivantes
a)
b)
c)
d)
R1*8
R1*10
R1*31
R1/16
Q 7) Comment charger dans le registre R1 les valeurs suivantes
1/2
L3 – Informatique
Mise à niveau
a)
b)
D. Etiemble
2007-08
0x A0000000
0x C000F000
Q 8) On suppose que l’instruction BEQ R0,R0, ETIQ est située à l’adresse F000A000H. Quelle est la
plus petite adresse et la plus grande adresse cible de cette instruction de branchement
Q 9) On considère les instructions de branchement. Quelle est la caractéristique de SIMM16 pour
les instructions de branchement ? En partant à chaque fois du contenu de la table 1, donner le
contenu du registre PC après exécution des instructions NIOS II suivantes :
a)
b)
c)
d)
BGE R7,R6, 100 // 100 est en décimal
BGEU R7,R6, 100
BEQ R1,R0, 100
BEQ R0,R0, -4
Q 10) En partant à chaque fois du contenu de la table 1, donner le contenu des registres et des cases
mémoire modifié après exécution des instructions NIOS II ou séquences d’instructions. NB : NIOS
utilise « little endian » pour l’ordre des octets dans les mots mémoire.
Dans chaque cas, on considérera que l’instruction est à l’adresse 1000 0000H
a)
b)
c)
d)
e)
f)
g)
h)
LDW R10, 8(R1)
LDH R11, 8(R1)
LDHU R12, 8(R1)
LDB R13,8(R1)
LDBU R14, 8(R1)
STW R4,4(R1)
STH R4, 2(R1)
STB R4,1(R1)
Q 11) Donner l’instruction ou la suite des instructions NIOS II pour effectuer les actions suivantes :
a)
b)
c)
d)
Mettre 1 dans le registre R1
Mettre dans R2 la valeur absolue du contenu du registre R2
Mettre dans R4 la plus grande des valeurs contenues dans les registres R2 et R3.
Mettre à zéro les 4000 octets commençant à l’adresse mémoire F0000000H (en supposant que le registre
R2 contient F0000000H)
Q 12) Dans cette question, on considèrera que l’adresse d’un tableau X est à l’adresse 0xF0000000,
que l’adresse d’un tableau Y est à l’adresse 0xF0001000 et l’adresse d’un tableau Z est à l’adresse
0xF0002000. La variable S est à l’adresse 0x100.
On utilisera R1, R2 et R3 pour contenir les adresses des tableaux X, Y et Z.
Ecrire les programmes assembleur NIOS II correspondant aux programmes C suivants
1) Somme de deux tableaux
for (i=0 ; i<256 ; i++)
Z[i] = X[i] + Yi];
2) Somme des éléments d’un tableau
S=0 ;
for (i=0 ; i<256 ; i++)
S+= X[i];
3) Maximum des éléments d’un tableau
S= X[0] ;
for (i=1 ; i<256 ; i++)
if (X[i] > S) S = X[i];
4) Suite de Fibonnaci
X[0]=0;
X[1]=1;
for (i=2 ; i<256 ; i++)
X[i] = X[i-1] + X[i-2];
2/2
Téléchargement