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