Examen Final
Inf 2170, Groupe 50
Été 1995
25 points
Durée: 2h
Toutes documentations permises
6 pts No 1) Donnez une séquence d'instructions du M68xxx pour
placer dans le registre D0
, du bit 0 au bit 31 dans cet ordre,
les bits 14 à 21 du registre D1
, les bits 0 à 10 du registre
D2
, les bits 21 à 31 du registre D3
et les bits 3 et 4
du registre D4
. Votre séquence doit avoir
au maximum 20 instructions.
6 pts No 2) Écrire une sous-routine pour
multiplier par 4 un nombre réel IEEE 32 bits, sans utiliser
aucune instruction à point-flottant. L'entrée
et la sortie de votre sous-routine sont le registre D0
.
Votre sous-routine doit avoir au plus 15 instructions. (On ne se préoccupe
pas de débordement et porter attention au zéro.)
6 pts No 3)
3 pts a) L'antémémoire présentée en classe a 32Ko, formée de huit plans identiques, dont chaque plan est de 4Ko. Expliquez pourquoi une antémémoire d'un seul plan à 32Ko, formée de 64*8 lignes de 64 octets, est moins bonne que cette antémémoire. (On suppose que le reste du mécanisme est modifié pour soutenir ces 256 lignes, entre autre, le mécanisme de décodage de l'adresse.)
pts b) Réordonnez les instructions Alpha suivantes pour éliminer toutes pertes de cycles machines.
ldq r0,0(r29) stq r0,16(r29) ldq r1,8(r29) subq r2,r1,r0 addq r3,r4,r3 lda r7,16(r29) lda r8,24(r29) addq r6,r0,r8 addq r9,r0,r6
7 pts No 4) Écrire une sous-routine
récursive pour traverser une expression arithmétique et compter le
nombre total d'opérateurs +
qui sont aux niveaux les plus
profonds. Un opérateur +
est au niveau le plus
profond s'il appartient à une sous-expression qui n'a aucun
terme contenant des parenthèses.
Par exemple, pour
5+(6 + 9*7 + 5)*(7 + (8 +9) + 5) + (6 * ( 9 + (5)))
il y a 3 opérateurs +
aux niveaux les plus
profonds. L'expression est une chaîne de caractères se terminant par
le caractère <null>
, l'adresse de celle-ci est passée par le
registre A0
et le résultat de votre comptage est retournée dans
le registre D0
(le registre A0
est aussi modifié à la
sortie, il devrait pointer sur le caractère <null>
lors du
dernier retour). On suppose l'expression bien formée. Votre
sous-routine a au plus 25 instructions. Suggestions: il n'est pas
nécessaire de considérer les nombres, les espaces, etc., seulement les
caractères +
, (
, )
et <null>
sont à
considérer.