L3 – Informatique D. Etiemble
Mise à niveau 2007-08
1/2
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 Contenu (hexa) Adresse (hexa) Contenu (hexa)
R0 00000000 00001000 00000001
R1 00001000 00001004 00000002
R2 00001016 00001008 FEDC8765
R3 8432A380 0000100C 000000A4
R4 ECDF1234 00001010 00000005
R5 89765432 00001014 00000006
R6 12345678
R7 2ABCDEF0
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 0000
H.
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 0000
H.
a) ADDI R8,R1,-4
b) 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 0000
H
a) AND R10,R3,R4
b) XOR R11,R3,R4
c) 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) R1*8
b) R1*10
c) R1*31
d) R1/16
Q 7) Comment charger dans le registre R1 les valeurs suivantes
L3 – Informatique D. Etiemble
Mise à niveau 2007-08
2/2
a) 0x A0000000
b) 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) BGE R7,R6, 100 // 100 est en décimal
b) BGEU R7,R6, 100
c) BEQ R1,R0, 100
d) 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 0000
H
a) LDW R10, 8(R1)
b) LDH R11, 8(R1)
c) LDHU R12, 8(R1)
d) LDB R13,8(R1)
e) LDBU R14, 8(R1)
f) STW R4,4(R1)
g) STH R4, 2(R1)
h) STB R4,1(R1)
Q 11) Donner l’instruction ou la suite des instructions NIOS II pour effectuer les actions suivantes :
a) Mettre 1 dans le registre R1
b) Mettre dans R2 la valeur absolue du contenu du registre R2
c) Mettre dans R4 la plus grande des valeurs contenues dans les registres R2 et R3.
d) Mettre à zéro les 4000 octets commençant à l’adresse mémoire F0000000
H
(en supposant que le registre
R2 contient F0000000
H
)
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];
1 / 2 100%