mardi 5 avril 2011

Exercices Corrigés Architecture Processeur (CPU) et mémoire langage système

Exercice 1

Question 1 : Commentez cycle par cycle ce qui se passe lors de l'exécution de la suite d'octets (située en mémoire d'instructions :

ILOAD
1

Question 2 : Même question avec la suite d'octets :

WIDE
ILOAD
1
0

Remarque : la micro-instruction wide_iload 1 est située à 256 mots d’écart de la micro-instruction iload1.

Exercice 2


On considère la fonction C suivante:
-----------------------------------------------
int sommen(int n)
int i, s=0;
for (i=1,i<=n,i++)
s=s+i
return(s)
-----------------------------------------------

Question 1 : Écrire une fonction qui implémente la fonction sommen en langage IJVM. On supposera que lors de l'appel à cette fonction, le paramètre n est stocké à l'adresse LV+1, la variable s à l'adresse LV+2 et la variable i à l'adresse LV+3. Juste avant l'instruction de retour, la pile contiendra la valeur à retourner.

Question 2 : A l'aide du microprogramme, calculer le nombre de cycles d'horloge nécessaires pour réaliser un appel à sommen(4). Indiquez également le nombre d'octets nécessaires pour ranger les instructions de sommen.

Question 3 : Écrire une implémentation des instructions de cette fonction dans le langage du jeu d'instruction dit « jeu projet ». On notera @n,@s et @i les adresses (constantes) des variables correspondantes.


Question 4 : On considère maintenant l'implémentation récursive de la même fonction C:

-----------------------------------------------
int sommenrec(int n)
{if (n==0) return(0);
return(n+sommenrec(n-1));}
-----------------------------------------------

Ecrire une implémentation de cette fonction en IJVM (avec appel récursif). On supposera que la fonction est numérotée 5 dans la zone des constantes pointée par CPP.   

Question 5 : Décrire les états successifs de la mémoire lors de l'exécution de l'appel à sommenrec(4).

Question 6 :
A l'aide du micro-programme calculer le nombre de cycles d'horloge nécessaires pour réaliser un appel à sommenrec(4). Indiquez également le nombre d'octets nécessaires pour ranger les instructions de sommenrec.

Question 7 : Quelle est l'implémentation la plus efficace?

Exercice 3

Que fait la suite de micro instructions suivantes ? :

myst1                  MAR=SP=SP+1 goto myst2
myst2                   H=MDR=TOS if (N) goto myst3bis else goto myst3
myst3                   wr, goto main1
myst3bis               TOS=MDR=-H;goto myst3

----------------------------------------------------------------------------------------------
 
 
- Correction.

Exercice 1

Question 1 :
 

Question 2 :



Exercice 2


Question 1 : 

(on pouvait supposer que le GOTO microprogrammé permet de gérer les offsets négatifs, ou utiliser  l’instruction GOTOR vue en cours, car sinon, tel qu’il est écrit, le micro-programme ne permet pas de gérer les retours arrière)


Question 3 :


Question 4 :

En observant la séquence de micro-instructions associées à Invoquevirtual et à Ireturn, on constate que pour que la procédure récursive fonctionne, il est nécessaire qu’avant chaque appel récursif sur la pile se trouve non seulement la valeur du paramètre (n-1) mais également au dessous un mot (ici de valeur 0) qui sert ultérieurement à stocker le pointeur sur la case contenant l’adresse de retour.

Avec cette configuration, il est nécessaire d’avoir en début de zone d’instructions deux octets représentant le nombre de paramètres +1 (ici 2).





Question 5 :

Le premier appel est celui avec paramètre 4 qui est déjà en cours. On présente dans les tableaux suivants les états de la pile d’exécution.
 







 
Question 6 :

Cf tableau de la question 4

 Question 7 :

Cette suite de micro-instructions calcule la valeur absolue du mot au sommet de la pile et l’empile.

0 commentaires:

Enregistrer un commentaire

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites

 

IP