Inf 2170 Groupe 50
Examen intra-trimestriel
25 points
Été 1995
Toute documentation permise
Durée de 2 heures
5 points No 1) L'instruction move.w x,d0
référence
une étiquette x
qui est définie dans la partie data
.
Toutefois l'adresse réelle de x
est inconnue à l'assemblage.
Expliquez comment l'assembleur résout ce problème.
points No 2) On peut multiplier par en utilisant un décalage à
gauche de n bits. Écrire des instructions assembleur pour multiplier
par la valeur 7 le registre d0.w
en utilisant seulement
asr
add
et move
? Suggestion: tout nombre se
décompose en binaire, donc en additions de puissances de deux.
points No 3) Implantez l'instruction suivante en assembleur. (Les variables sont des étiquettes représentant des nombres de 16 bits codé en complément à deux).
Si (x < 0) et (u + 1 > z) et (w > z) alors x := x + 1 sinon y := y -1 FinSi
5 points No 4) Donnez les contenus des registres
a1
, d1
et d2
après l'exécution de
chaque instruction suivante. 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. (L'exécution d'une instruction dépend
des instructions la précédant.)
move.w #2,d1 lea x,a1 move.w (a1)+,d2 add.w d2,d1 ext.l d1 add.w d1,d2 move.w (a1),d1 move.w (4,a1),d2 data x dc.w 6 y dc.w 10 w dc.w 100
6 points No 5) Donnez une séquence d'au plus 20 instructions assembleur
pour déterminer si le vecteur V DS.w 200
contient
plus d'entiers positifs que d'entiers négatifs. Votre séquence
branche à plus_positif
s'il y a plus de positif sinon à
pas_plus_positif
.