Inf 2170, Groupe 40
Examen intra-trimestriel
25 points
Automne 1995
Toute documentation permise
Durée de 3 heures
points No 1) Supposons que le registre a0
pointe
un vecteur de 200 entiers de 32 bits. Écrire une séquence
d'au plus 15 instructions pour placer dans le registre d0
la plus grande différence V[i]-V[i+1]
.
points No 2) Donnez la représentation du nombre 322.122 en IEEE 32 bits. Donnez vos calculs ainsi que la perte de précision.
points No 3) Traduire l'expression suivante en assembleur. Le
résultat de 32 bits doit se retrouver dans le registre d0
. Les
symboles x
, y
, z
et u
sont des étiquettes
référant à des nombres codés en complément à deux sur 32 bits.
(2 + x) * (y + z - u) * 10
5 points No 4) Traduire le code suivant en assembleur.
Le vecteur V
est formé d'entiers de 16 bits et l'étiquette
x
réfère à un entier de 16 bits. Les variables i
et j
ne sont que des symboles pour exprimer le code.
x <- 0;
Pour i de 1 à 100 Faire
Début
Pour j de 1 à 100 Faire
Début
Si V[i] > V[j] Alors x <- x + V[j] FinSi
Fin
Fin
6 points No 5) Traduire la fonction suivante en assembleur M680xx. Bien indiquer la façon de passer les paramètres et de retourner le résultat. Les entiers ont 32 bits. Donnez aussi un exemple d'appel de la fonction.
Fonction Calcul(x : entier, y : entier, z : entier) : entier;
Var w : entier;
Début
w <- 0;
Tantque w < z Faire
Début
Si y < 0 Alors w <- w + x
Sinon w <- w - x
FinSi
Si (y > 100) et (y < 1000) Alors w <- w - 1 FinSi
Fin
Retourner( w )
Fin Calcul;