USTHB
Faculté d’Informatique
1ère année Master IL et MIV
Module Compilation2 Année Universitaire : 2022/2023
TD N° 3 :
Organisation des données à l'exécution
Exercice 1:
Soit le programme Fortran suivant :
Program
Integer V, W, X, Y, Z
Integer D(5), E(3)
Common V, Z
Equivalence Z, D(2)
Equivalence D(4), E(1)
..........
Call Sub(W, Y)
Stop
End.
Subroutine Sub(a, b)
Integer A, B, C(5), E(3), F
Common A, B
Equivalence C(3), F
Equivalence E(1), C(4)
........
Return
End.
Donner les zones de données du PP, du SP et du Common
Exercice 2:
Soit le programme Algol suivant :
Programme Principal
Begin
Real V, U; Integer array A1[1:V]; Integer J;
L1: Begin
Integer array A2[1:U]; Integer K;
Procedure X(C, D); Real C,D;
Begin
Array A3[1:J; 1:2*J];
L3: A3[K, 1]:= A1[K]+V;
End
L2: A1[K]:=K-V;
End;
V:=U+J;
End;
a-Donner le contenu de la pile de données aux instructions L1, L2 et L3 .
b-Calculer les adresses absolues des variables de L3.
Exercice 3 :
Soit le programme Algol suivant :
Programme essai
L1: Begin Integer I, L, n, array A[1:L; -1:2*L; 0:L+2];
L2: Procédure Gamme(X1); X1: Integer;
Begin Boolean S; Integer P, Array B[I:P];
L3: Begin Real X, Y;
L4: X:= (P/Y)+6*A[I,L,3];
X:=(X+((-P)/2))*(P-P/ Y)
L5: End;
End;
L6: Procédure Beta(X2); X2: Integer;
Begin Integer a,b, m, array C[-L:L], Val;
L7 : I:=0
a:=n-1
b:=m
t1:=5*a
I:=I+1
t2:=C[t1]
Tantque I>L+6 Faire K:=8*3,14
I:=I+3
D[I]:=K
Fait
t3:=5*a
z:=C[t3]
I:=I+1
J:=7*I
End;
L8:End.
a-Donner Les différents états de la pile aux étiquettes L1, L2, L3, L4, L5, L6, L7, et L8.
b- Calculer les adresses absolues des variables de L4 sachant que les éléments de A sont rangés
colonne par colonne dans une zone contiguë.
Exercice 4:
Donner les différents états de pile aux étiquettes pour les portions de programme suivantes :
PP Begin Proc A;
Begin Appel := Appel+1;
Si Appel <= 2 alors L3 : A ;
Appel := Appel-1;
fsi ;
End ;
Appel := 1 ;
L1 : A ;
L2: End;
PP Begin Proc A;
Begin L2 :Appel := Appel+1 ;
Si Appel <= 2 alors L3 : A;
Appel := Appel-1;
Sinon L4 : A ;
Appel :=Appel-1;
fsi ;
End ;
Appel := 1 ;
L1: A;
L5: End;