0% ont trouvé ce document utile (0 vote)
53 vues2 pages

Solution EMD 2020 2021 Copie

Le document présente des exercices de programmation en C et en langage assembleur, axés sur le calcul du factoriel d'un nombre et l'addition de tableaux. Les exercices incluent des instructions pour compléter des programmes en assembleur, en utilisant des registres pour gérer les opérations. Les exemples fournis montrent comment appeler des fonctions assembleur depuis un programme C.

Transféré par

bouchemat.nazim
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)
53 vues2 pages

Solution EMD 2020 2021 Copie

Le document présente des exercices de programmation en C et en langage assembleur, axés sur le calcul du factoriel d'un nombre et l'addition de tableaux. Les exercices incluent des instructions pour compléter des programmes en assembleur, en utilisant des registres pour gérer les opérations. Les exemples fournis montrent comment appeler des fonctions assembleur depuis un programme C.

Transféré par

bouchemat.nazim
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

Département Instrumentation et Automatique FEI / USTHB

Nom : Prénom : Matricule :

Master ESE : Epreuve de Moyenne Durée 2020/2021 : Module DSP


Exercice N°1 : (6 Point)
Dans cet exercice on cherche à trouver le factoriel d'un nombre n ≤7 avec n ! = n (n - 1) (n - 2) . . . (1).
La valeur de n est définie dans le programme source C factorial.c, qui appelle la fonction en langage
assembleur factfunc.asm.
#include <stdio.h> //for print statement
void main()
{
short n = 7; //set value
short result; //result from asm function
result = factfunc(n); //call ASM function factfunc
printf("factorial = %d", result); //print result from asm function
}
Le registre A1 est défini comme un compteur de boucle. Le premier multiplicateur est n (n - 1) et
s'accumule dans le registre A4. La valeur initiale de n est transmise à la fonction asm via A4. Le factoriel
résultant est renvoyé au programme C appelant via B3. Compléter le programme en langage assembleur.
;Factfunc.asm Assembly function called from C to find factorial
.def _factfunc ;ASM function called from C
_factfunc: MV .S1 A4,A1 ;setup loop count in A1
SUB .L1 A1,1,A1 ;decrement
LOOP: MPY .M1 A4,A1,A4
NOP
SUB .L1 A1,1,A1 ;decrement for next multiply
[A1] B S LOOP
NOP 5
B B3 ;return to calling routine
NOP 5
Exercice N°2 : (8 Point)
Considérons une simple fonction pour ajouter deux tableaux de N éléments a et b, élément par élément.

𝑐 [𝑛] = ( 𝑎 [𝑛] + 𝑏 [𝑛])

Compléter le programme en langage assembleur décrivant la boucle interne. Avec A1 : N-n, A0 : a


(n), B0 : b (n), B1 : a [n] + b [n].

USTHB / FEI 2020-2021 Page 1


Département Instrumentation et Automatique FEI / USTHB

MVK .S1 10, A1 ; N = 10


LOOP : LDW .D1 *a++, A0 ;A0 = a[n]
LDW .D2 *b++, B0 ; B0 = b[n]
ADD .L2x A0,B0,B1
STW .D2 B1, *c++ ;c[n] = A0+B0 , n++
SUB .L1 A1, 1 , A1 ;N = N-1
[A1] B S LOOP ;branch to LOOP if A1 != 0
Exercice N°3 : (6 Point)
L’exemple suivant présente un listing du programme C factclasm.c, qui appelle la fonction asm linéaire
factclasmfunc.sa, pour calculer le factoriel d'un nombre inférieur ou égal à 7. n ! = n (n - 1) (n - 2) . . .
(1).
#include <stdio.h> //for print statement
void main()
{
short number = 7; //set value
short result; //result of factorial
result = factclasmfunc(number); //call ASM function factlasmfunc
printf("factorial = %d", result); //result from linear ASM function
}
Compléter le programme en langage assembleur linéaire pour calculer le factoriel.
Argument : number, registres : a et b.
.ref _factclasmfunc ;Linear ASM func called from C
_factclasmfunc: .cproc number ;start of linear ASM function
.reg a,b ;asm optimizer directive
MV number,b ;setup loop count in b
MV number,a ;move number to a
SUB b,1,b ;decrement loop counter
loop: MPY a,b,a ;n(n-1)
SUB b,1,b ;decrement loop counter
[b] B loop ;loop back to loop if count #0
.return a ;result to calling function
.endproc ;end of linear ASM function

USTHB / FEI 2020-2021 Page 2

Vous aimerez peut-être aussi