------------------------- EXERCICES I ------------------------- - Les solutions aux exercices proposés dans ce fichier sont présents dans le fichier : CORRIG_1.DOC ------------ Il vous suffit de noter le nr° de l'exercice dont vous voulez savoir la solution. ------------------ nr° 1: ------ Trouvez l'erreur (facile...) text ab move.b #345,d0 add.b #1,d0 jmp ab end nr° 2: ------ Que contiendra le registre de donnée d3 ? text move.l #12,d3 add.l #4,d3 add.l d3,d3 move.l var,d2 add.l d2,d3 data ;segment data var dc.l 458 end nr° 3: ------ Que contiendra le registre d5 ? text move ici,d4 add #5,d4 move d4,la add ici,la move la,d5 data ici dc.w 10 bss la ds.w 1 end nr°4: ----- Trouvez la valeur de a4 à la fin du prg en sachant que le label 'ad' est situé à une adresse égale à $ff0 et qu'il pointe (dc.l) le nombre 45 Trouver la valeur de d5: text move.l #ad,a4 move.l ad,d5 data ad dc.l 45 ; on suppose qu'ici PC=$ff0 end nr°5: ----- Trouver la valeur de d5 et de a5 à la suite de ce prg. text move #15,d5 move.l #zz,a5 move.w zz,d5 data zz dc.w 0 end - Je vais maintenant utiliser l'instruction d'opération de controle 'DBF' qui permet l'execution d'une boucle et dont la syntaxe est: 'DBF Dn,boucle'. Cette instruction utilise un registre de donnée Dn et un Label destination. A chaque appel, Dn est décrémenté d'1 unité, si Dn vaut -1, le prg continue après l'instruction qui suit 'DBF' sinon l'instruction oppère un saut à l'adresse Destination. exemple: -------- text move.b #1,d3 ;d3=1 au départ move.w #99,d0 ;nb de boucles -1 (car on va jusqu'à -1 !) tgv add.b #1,d3 ;on ajoute 1 à d3 jusqu'à ce que d0=-1, soit dbf d0,tgv ;100 fois de suite move.b d3,var ;puis on met d3.b (=101) dans var ;NB: d0 vaut -1 ... bss var ds.b 1 end nr°6: ----- Trouvez la valeur contenue à l'adresse out, la valeur de d0 et d5 à la fin de ce programme. text move #247,d0 move #3,d5 bbb add #8,d0 move d0,out dbf d5,bbb bss out ds.b 2 end nr°7: ----- Trouver la valeur BINAIRE du registre de donnée d1 à la fin de ce prg . NB:5438=%0001010100111110 text move #5391,d0 add #47,d0 move d0,dix move.b in,d1 bss dix ds.b 1 in ds.w 47 data nul dc.w 5438 end nr°8: ----- que va-t-il se passer en 'gag' ? text move.l #gag,a2 gag move.b #100,d1 jmp (a2) end nr°9: ----- Quelle sera la valeur de d3 après ce prg ? text move.b #12,lab move.b #14,lac move.b #15,lad move.l #lab,a3 move.b #1,d1 fff move.b (a3)+,d3 dbf d1,fff add.b (a3),-(a3) move.b -(a3),d3 add.b (a3),d3 bss lab ds.w 1 lac ds.b 1 lad ds.w 5 end nr°10: ------ Quelles seront les valeurs de d0,d1,d2,d3,a0 après ce prg ? text move.b #10,a move.b #11,b move.b #12,c move.b #13,d move.b #98,e move.l #deb,a0 move.b (a0)+,d0 move.b (a0)+,d1 move.b (a0)+,d2 move.b (a0),d3 move.b -(a0),d4 bss deb ds.b 1 a ds.b 1 b ds.b 1 c ds.b 1 d ds.b 1 e ds.b 1 f ds.l 4 end nr°11: ------ Trouvez la valeur de a4 et d0,d1 après ce prg. text move.b #3,d0 move.l #pil,a4 rrr move.b -(a4),d1 add.b #4,d1 dbf d0,rrr data dc.b 1,2,3,4,5,6,7,8,9 pil dc.w 245 end nr°12: ------ Trouver ce qu'il y a en 'out' et la valeur de d2. text a equ 3 b equ 5 move.b a,d2 add.b b,d2 move.l #g,a5 move.b d2,(a5) move.b d2,-(a5) move.b (a5)+,d2 move.b (a5),d2 bss out ds.b 1 g ds.b 4 end nr°13: ------ Trouvez la valeur de d1,d2,d3,d4 et a0. text move.l #out,a0 move.w #2,d3 move.w (a0),d1 move.w -4(a0),d2 move.w -4(a0,d3),d3 move.w -(a0),d4 data dc.l 1 dc.w 12 dc.w 2356 out dc.b 15 end nr°14: ------ Quelles sont les différentes valeurs prises par a0 au cours de ce prg ? Quelle est la valeur finale contenue en 'res' ? text move.l #a,a5 move.l #2,d2 ttt move.b #1,(a5)+ dbf d2,ttt move.b #5,(a5) move.l #vec,a1 move.b #3,d0 move.b #0,d2 cde move.l 0(a1,d2),a0 add.l #4,d2 move.b (a0),res dbf d0,cde data vec dc.l a,b,c,d bss a ds.b 1 b ds.b 1 c ds.b 1 d ds.b 1 res ds.b 1 end nr°15: ------ Trouvez la valeur pointée par ret, à la fin de ce prg. text move.l #5,a move.l #a,a0 move.l (a0)+,d2 move.l d2,ret bss a ds.l 2 ret ds.l 1 end n°16: ----- Trouvez la valeur de d0 et a0 après ce prg. text move.b #3,d1 move.b #a,a0 mno move.b 1(a0,d1),d0 add.b #14,d0 add.b a,d0 dbf d1,mno data a dc.b 0,5,6,7,8,9 end nr°17: ------ Trouvez la valeur de d3 après ce prg. text move.l #a,a0 move.b #5,(a0)+ move.b #6,(a0)+ move.b -(a0),d2 move.l #a,a0 move.b 1(a0),d3 add.b d2,d3 bss a ds.w 1 ds.b 1 end nr°18: ------ Trouvez ce qui se passe en 'stp', que contient 'res' ? text move.w #5,d3 add.b #6,d2 add.b d2,d3 move.l #ad,a0 stp jmp 10(a0) ad move.l #5,res move.b d3,res bss res ds.b 1 end nr°19: ------ Maintenant quelques petites questions à réponses rapides: a) Si j'écris 'MOVE.W #0,d0', que se passera-t-il au niveau du CCR ? Et si j'écris ensuite 'ADD.W #-2,d0' ? b) Peut-on placer un OCTET à une adresse impaire ? c) Par combien de chiffres est codé un L-M en HEXADÉCIMAL ? d) Peut-on se servir du PC pour y ranger un chiffre comme avec un registre de donnée ou d'adresse ? (Je vous rappelle que c'est un registre). Si oui comment ? e) La directive 'END' met fin au programme et permet le retour au DESKTOP, Vrai ou Faux ? Argumentez. f) Une macro instruction est un sous-programme appellé par le Linker à chaque fois qu'il rencontre son nom dans le code objet. Vrai ou Faux ? Expliquez. g) On peut utiliser n'importe quel mode d'adressage pour les opérandes des instructions du 68000. Vrai ou Faux ? ----------------- Quand vous en aurez fini avec ces exercices, regardez bien les corrigés dans le fichier CORRIG_1.DOC puis revenez aux cours. Bonne chance! ------------ PIECHOCKI Laurent 8,impasse Bellevue 57980 TENTELING