0% ont trouvé ce document utile (0 vote)
24 vues6 pages

Dev Maison

Le document présente un devoir à la maison en DSP pour les étudiants de 2ème année en Génie Informatique Industriel à l'Université de Sfax. Il contient des exercices sur l'exécution d'instructions assembleur, le calcul de cycles d'exécution, et des modifications de programmes pour optimiser les performances. Les exercices incluent des opérations sur des vecteurs et la somme d'une suite arithmétique.

Transféré par

Ahmed Ben Makhlouf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
24 vues6 pages

Dev Maison

Le document présente un devoir à la maison en DSP pour les étudiants de 2ème année en Génie Informatique Industriel à l'Université de Sfax. Il contient des exercices sur l'exécution d'instructions assembleur, le calcul de cycles d'exécution, et des modifications de programmes pour optimiser les performances. Les exercices incluent des opérations sur des vecteurs et la somme d'une suite arithmétique.

Transféré par

Ahmed Ben Makhlouf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université de Sfax

Ecole Nationale d’Electronique et de Télécommunications de Sfax

Département génie informatique industrielle

Matière

DSP

Devoir à la maison

Réalisé par
Mefteh Moez

2éme Année Génie Informatique industrielle

Année universitaire 2020/2021

1
Exercice N°1

1. Déterminer le continu des registres en pointillés après l'exécution de ces instructions :

a. A1=0xFE1AC03B; A2=0x00330001
MPY A1, A2, A3 ; A3= 0xFFFFC03B,
b. A1=0x08C40006; A2=0x00010002
MPYH A1, A2, A3 ; A3=0x000008C4,
c. A1= 0x00010002; A2=0x00030004
DOTP2 .M1 A1, A2, A3 ; A3= 0x00030008
d. A1= 0x00330001; A2=0x00417000
ADD A1, A2, A3 ; A3=0x00747001,
e. A1= 0x00330001; A2=0x00417000
ADD2 A1, A2, A3 ; A3=0x00747001,
f. B0=0x00000000; B1=0x00000002; A1= 0x00020004; A2=0x00010002
[!B0] SUB .D2 B1, 1, B1 ; B1=0x00000001,
[B0] ADD2 .S1 A1, A2, A2 ; A2=0x00010002,

2. Sachant que A0= 0x0102ABC0 et que dans la mémoire à partir de l'adresse 0x0102ABC0 on
a les octets suivants :
0xFE, 0xA3, 0xBF, 0x74, 0x59, 0xA6, 0xA1, 0x11, 0x61, 0xC5, 0xE0, 0x45,0x6D, 0xFF,
0x29, 0x5A, 0x4E, 0x58, 0x82, 0xA0, 0xFA, 0x52, 0x6B, 0x33, 0x4C, 0x58, 0x3F et 0xAA.

Déterminer le continu des registres en pointillés après l'exécution de ces instructions :


NB: Les 4 cas sont liés (dépendantes l’une de l’autre)

a) LDB.D1 *++A0[2], A1 ; A0= 0x0102ABC2 et A 1= 0x000000BF

b) LDH. D 1 *A0, A1; ; A0= 0x0102ABC2 et A1= 0x0000BF74

c) LDW .D1 *+A0, A1; ; A0= 0x0102ABC2 et A1= 0xA11161C5

d) LDDW .D1 *A0++, A3:A2; ; A0=0x0102ABCA= 0xBF7459A6 et A3=A11161C5,

e) STW.D1 A1, *A0 ; A1=0xA11161C5 ; @case=0x0102ABCA Valeur= 0xA11161C5

2
Exercice 2:
Soit le code assembleur suivant :
MVK .S1 100, A1
ZERO .L1 A7
LOOP : LDH .D1 *A4++,A2
LDH .D2 *B4++,B2
NOP 4
MPY .M1X
A2,B2,A6
NOP
ADD .L1 A6,A7,A7
SUB .S1 A1 ,1,A1
[A1] B .S2 LOOP
NOP 5
STH .D1 A7,*A9
1. Sachant que le programme ci-dessus calcule la somme de produits de deux vecteurs de 100
éléments codés sur 16 bits et pointés respectivement par les registres A4 et B4. Compléter
les pointillés de ce programme.
2. Calculer le nombre de cycles d’exécution nécessaires pour ce programme ?
Nbre de cycle = (100*16) +3=1603
3. Modifier le programme en remplaçant les instructions LDH par LDW et utiliser les instructions
MPY et MPYH

MVK .S1 50, A1


ZERO .L1 A7
LOOP : LDW .D1 *A4++,A2
LDW .D2 *B4++,B2
NOP 4
ADD .L1 A3,A7,A7

MPY .M1X A2,B2,A6


MPYH .M2X A2,B2,B6
NOP
ADD .L1X A6,B6,A3

SUB .S1 A1 ,2,A1


[A1] B .S2 LOOP

5
NOP
STH .D1 A7,*A9

3
4. Donner le nouveau nombre de cycles ?
Nbre de cycle =903
5. Utiliser les instructions parallèles. Déduire le nouveau nombre de cycle

MVK .S1 50, A1


ZERO .L1 A7
LOOP : LDW .D1 *A4++,A2
|| LDW .D2 *B4++,B2
NOP 4
MPY .M1X A2,B2,A6
|| MPYH .M2X A2,B2,B6
NOP
ADD .L1X A6,B6,A3

ADD .L1 A3,A7,A7


SUB .S1 A1 ,1,A1
[A1] B .S2 LOOP

5
NOP
STH .D1 A7,*A9

Nbre de cycle= (16*50)+3=803

6. Minimiser le nombre de cycles par des instructions. Déduire le nouveau nombre de cycle.

MVK .S1 50, A1


ZERO .L1 A7
LOOP : LDW .D1 *A4++,A2
|| LDW .D2 *B4++,B2
NOP 3
[A1] B .S2 loop

MPY .M1X A2,B2,A6


|| MPYH .M2X A2,B2,B6
NOP
ADD .L1X A6,B6,A3
ADD .L1 A3,A7,A7
|| SUB .S1 A1 ,1,A1

STH .D1 A7,*A9

Nbre cycle=(9*50)+3=453

4
7. Modifier le programme de la question 3 tout en remplaçant les instructions LDDW et
DOTP2 (utiliser le parallélisme des deux voies A et B).

MVK .S1 25, A1


ZERO .L1 A7
ZERO .L1 B8
LOOP : LDDW .D1 *A4++,A2:A3
|| LDDW .D2 *B4++,B2:B3
NOP 3
[A1] B .S2 loop

DOTP2 .M1X A2,B2,A6


|| DOTP2 .M2X A3,B3,B6
NOP 2
ADD .L1 A6,A7,A7
|| ADD .L2 B6,B8,B8
ADD .L1X A7,B8,A7
|| SUB .S1 A1 ,1,A1

STH .D1 A7,*A9

8. Donner le nouveau nombre de cycles.

Nbre de cycle= (10*25) +4= 254

EXERCICE 3

Soit le programme assembleur suivant:


.def _sumfunc; // declaration de nom de fonction
_sumfunc:
MV. L1 A4, A1; // charger le contenue de A4 dans A1
SUB. S1 A1, 1, A1; // decrementer A1 de 1
Loop: ADD. L1 A4, A1, A4; // somme de A4 et A1 est enregistrer la somme dans A4
SUB. S1 A1, 1, A1; // decrementer A1 de 1
[A1] B .S1 Loop; // brancher sur la loop si A1 != 0
NOP 5; // 5 instruction de « no-opération » pour finaliser le branchement
B .S2 B3; // resultat du retour sur B3
NOP 5;

5
2- Ce programme fait la somme d’une suite
arithmétique de raison -1.
3- Langage C de ce programme :

Int sommeAr(int n){


Int U=0;

For ( int i=n; i>=0; i--)


U=U+i;
Return(U); }

Vous aimerez peut-être aussi