next up previous
Next: Examen finalGroupe 11, Up: No Title Previous: Examen finalGroupe 11,

Examen final, Groupe 10, Automne 1995

Examen Final
Inf 2170, Groupe 10
Automne 1995, 25 points
Durée: 2h
À livre ouvert

6 pts No 1) Soient le registre d0.w contenant un nombre entier a et le registre d1.w contenant un entier b> 0 (les deux nombres sont codés en complément à deux). Écrire une séquence d'au plus 10 instructions MC68K pour placer dans le registre d2.l la représentation en virgule fixe [16,16] de a/b. (Il peut y avoir une perte de précision.)

Solution

Il s'agit de calculer .

           move.w   d0,d2      ;
           lsl.l    #8,d2      ; décaler a
           lsl.l    #8,d2      ;  de 16 bits, i.e. a*2^16
           ext.l    d1         ; b sur 32 bits
           divs.l   d1,d2      ; obtenir (a 2^16) div b

6 pts No 2) Le registre d0.l contient une chaîne de 32 bits. Écrire une séquence d'au plus 15 instructions MC68K pour placer à partir du bit 0 de d1.l tous les bits à 1 de d0.l. En d'autres mots, d1.l devra contenir en base 1 le nombre de bits à 1 dans d0.l. (Exemple: si d0.l contient
0000 0111 0011 0101 0111 0001 0001 0111,
d1.l devra contenir
0000 0000 0000 0000 0111 1111 1111 1111.)

Solution

          clr.l   d1            ; tous les bits à 0
prchBit:  lsr.l   #1,d0         ; regarder le bit suivant de d0
          bcc     bitZero       ; si bit à 0 ne pas transférer ds d1
          lsl.l   #1,d1         ; tasser les bits déjà transférés
          ori.l   #1,d1         ; ajouter un bit à 1
bitZero:  bne     prchBit       ; si d0 <> 0 continuer

6 pts No 3) Écrire une sous-routine qui accepte en entrée une chaîne de caractères se terminant par le caractère <nul> et qui retourne le bit Z à 1 si et seulement s'il y a au moins un caractère de la chaîne ayant le bit 7 à 1. Votre sous-routine a au plus 15 instructions MC68K.

Solution

; Entrée: a0 pointe une chaîne de caractères se terminant par <nul>.
; Sortie: bit Z est à 1 si et seulement s'il y a un caractère > 127.
;
DetecteCarNonStandard:
              movem.l a0,-(sp)
prchCar:      tst.b   (a0)+        ; caractère <nul> ?
              beq     finDetecte
              bpl     prchCar      ; si bit 7 à 0 regarder prochain car
              ori.w   #4,ccr       ; mettre le bit Z à 1
              bra     retour
finDetecte:   andi.w  #0,ccr       ; mettre le bit Z à 0 
retour:       movem.l (sp)+,a0     
              rts                  ; retourner à l'appeleur

7 pts No 4) Un vecteur V est composé de 100 adresses de 32 bits, chacune pointant vers un vecteur de 50 entiers de 32 bits. Écrire une séquence d'au plus 20 instructions MC68K pour copier ces 5000 entiers sous la forme d'une matrice de 100 lignes et 50 colonnes à l'étiquette M telle que la première ligne de la matrice contient les entiers du premier vecteur, la deuxième ligne les entiers du deuxième vecteur, etc. (Les étiquettes V et M sont déja définies dans la partie data.)

Solution

              lea     M,a1            ; adresse de la matrice
              lea     V,a0            ; adresse des adresses
              move.w  #99,d0          ; 100 vecteurs à copier
prchVecteur:  movea.l (a0)+,a2        ; charger l'adresse d'un vecteur
              move.w  #49,d1          ; 50 entiers à copier pour ce vecteur
prchNombre:   move.l  (a2)+,(a1)+     ; déplacer un entier dans la matrice
              dbra    d1,prchNombre   ; prochain nombre
              dbra    d0,prchVecteur  ; prochain vecteur


next up previous
Next: Examen finalGroupe 11, Up: No Title Previous: Examen finalGroupe 11,

Mario Latendresse
Wed Jan 15 18:27:16 EST 1997