:: Enseignements :: Licence :: L3 :: 2006-2007 :: Architecture des ordinateurs ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Instructions et adressages |
Cette séance de travaux dirigé est consacrée à l'étude d'exemples de
programmes assembleurs. On travaillera sur le processeur virtuel DLX décrit
dans
John.-L. Hennessy et
David.-A. Patterson,
Architecture des Ordinateurs, une approche quantitative, chez International Thomson Publishing, Paris, 1996 (voir feuille annexe).
Exercice 1 - Notions de DLX
Le DLX comporte $32$ registres généraux (GPR) de $32$ bits, que l'on
notera par la suite $R_0,\ldots,R_{31}$, et $32$ registres virgule flottante
(FPR) notés $F_0,\ldots,F_{31}$.
Les instructions prenant des données immédiates se font avec des données
16 bits. Les types d'instructions sont des trois sortes données aussi en annexe.
- Trouver plusieurs opérations permettant de mettre un registre -- disons le registre $R_5$ -- à zéro.
- Trouver l'instruction permettant de faire $A=B$, en supposant que $A$ et
$B$ sont stockés dans les registres $R_1$ et $R_2$.
- Que fait l'instruction LW R_1, 30 (R_2)
- En DLX, toutes les instructions de chargement et de rangement sont de la
forme précédente : on charge une valeur qui est à une adresse égale
à la somme du contenu d'un registre et d'une valeur immédiate et on la
place dans un registre. Comment réaliser un adressage indirect (par
registre) et un adressage absolu ?
- Comment réaliser le chargement d'une valeur immédiate codée sur $32$ bits (une fois avec la commande LHI et une fois sans) ?
Exercice 2 - Un de compilation
Comment les lignes suivantes sont-elles compilées ? (elles font toutes partie du même programme) Que se passe-t-il dans la dernière ligne du programme?
(1) static int A;
(2) register int B;
(3) B=A;
(4) register int *p;
(5) p=&A;
(6) *p=B;
(7) *p=A;
(8) p=&B;
Exercice 3 - Encore un peu de compilation
Comment les lignes suivantes sont-elles compil\'ees ? (elles font toutes partie du même programme
(1) int A [12]; int B; int C;
(2) register int i;
(3) A[11]=1;
(4) i=3;
(5) B=A[i];
(6) if (B>1) C=1; else C=0;
© Université de Marne-la-Vallée