Inf 2170 Groupe 10
Examen intra-trimestriel
25 points
Été 1995
Toute documentation permise
Durée de 2 heures
points No 1) Implantez l'expression (2x + 4y) * (z - w) en assembleur
en plaçant le résultat dans le registre
d0
. Les étiquettes x, y, z et w sont des mots de
16 bits contenant des nombres entiers codés en complément à deux.
points No 2) Supposons que le registre a1
pointe
un mot de 16 bits et le registre a2
pointe
un vecteur de 200 mots de 16 bits. Écrire une séquence d'instructions
qui détermine si le registre a1
pointe dans le vecteur
pointé par a2
. Votre code branche à interieur
si c'est le cas, à exterieur
dans le cas contraire.
points No 3) Un programme qui est chargé en mémoire pour
être exécuté peut se retrouver à une adresse quelconque. Expliquez
comment les instructions peuvent référencer les variables de la
partie data
si les adresses de ces variables sont inconnues
à l'assemblage du programme.
points No 4) Donnez les contenus des registres d1
, d2
et
a1
après l'exécution de chaque instruction. Si le contenu ne
peut être spécifié, indiquez-le par le signe inconnu
, si le
contenu ne peut-être spécifié que symboliquement indiquez-le aussi.
move.w x,d1 add.w x+2,d1 lea x+2,a1 move.w (a1),d2 move.w (-2,a1),d2 lea z-2,a1 move.w (4,a1),d2 data x dc.w 20 y dc.w 30 z dc.w 40
points No 5) Supposons que le registre a1
pointe une chaîne
de caractères d'une longueur inconnue mais qui se termine par un octet
à 0. Écrire une séquence d'au plus 20 instructions assembleur pour
compter le nombre de caractères de ponctuation parmi le point-virgule,
la virgule et le point. Le résultat se retrouve dans le registre
d1
.