Pl CORRIG 1.DOC/fr
------------------------- EXERCICES I CORRECTIONS ------------------------- - Les solutions des exercices propos‚s dans ce fichier se rapportent aux exercices nr°1 du fichier : EXOS_1.DOC ----------- Repportez vous au nr° de l'exercice dont vous voulez savoir la solution. ------------------ nr° 1: ------ Il fallait trouvez l'erreur dans ce prg: text ab move.b #345,d0 ; -128<OCTET<128 !! add.b #1,d0 jmp ab end La r‚ponse ‚tait très simple,l'erreur se trouve à la première instruction, en effet, on fait un 'MOVE.B #345,d0' c.à.d. qu'on pose l'Octet 345 dans l'Octet de poids faible du registre d0,mais je vous rappelle que la valeur maximale que peut prendre un octet est 128 et 345>128, ceci entr- aine donc une erreur lors de l'assemblage. Pour rectifier, il suffirait d'‚crire 'MOVE.W #345,d0' ou 'MOVE.L #345,d0' nr° 2: ------ Il fallait trouver la valeur du registre de donn‚e d3 après le prg. text move.l #12,d3 ;On met le L-M=12 dans le registre d3 add.l #4,d3 ;On lui rajoute le L-M=4: d3=12+4=16 add.l d3,d3 ;On ajoute le L-M d3 à lui mème, donc ;d3=d3+d3=16+16=32 (sur un L-M) move.l var,d2 ;On pose le L-M point‚ par 'var',soit ;458 dans le registre de donn‚e d2 add.l d2,d3 ;on ajoute le L-M de d2 au L-M de d3, ;donc d3=d2+d3=458+32=490 (L-M) data ;segment data var dc.l 458 end Comme le montrent les Remarques, d3=490 nr° 3: ------ On demandait ce que contiendra le registre d5 après le prg. text move ici,d4 ;on pose le mot point‚ par 'ici' dans le mot de ;poids faible du registre de donn‚e d4 ;donc d4=10 (sur un mot) add #5,d4 ;on ajoute le mot 5 au mot de poids faible de d4 move d4,la ;On pose le mot de p.fa. de d4 (soit 15) à 'la' add ici,la ;On ajoute la valeur point‚e par 'ici' à la ;donn‚e point‚e par 'la', 'la' pointe donc sur ;un mot (ds.w) ‚gal à 10+15=25 move la,d5 ;On pose le mot point‚ par 'la' dans la mot ;de p.fa. de d5.Donc d5=25 data ici dc.w 10 bss la ds.w 1 end On trouve donc d5=25 nr°4: ----- Il fallait: 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 text move.l #ad,a4 ;on pose l'adresse de 'ad' (L-M) dans le ;registre d'adresse a4, donc a4=$ff0 move.l ad,d5 ;on pose le L-M point‚ par 'ad', soit 45 dans ;le registre de donn‚e d5 data ad dc.l 45 ;on suppose qu'ici PC=$ff0 end Dans ce cas pr‚cis, a4=$ff0 (et non pas 45,revoyez vos cours!) C'‚tait vraiment très simple. nr°5: ----- Il faut trouver la valeur de d5 et de a5 à la suite de ce prg. text move #15,d5 ;On pose le mot 15 dans le mot de p.fa. de d5 move.l #zz,a5 ;On pose l'adresse de 'zz' dans le registre ;d'adresse a5 move zz,d5 ;On Pose le mot point‚ par 'zz' dans le mot de ;p.fa. du registre de donn‚e d5, donc d5=0. data zz dc.w 0 end Donc d5=0 (mot) et a5=adresse de 'zz' (L-M) nr°6: ----- Il fallait trouver la valeur contenue à l'adresse 'out', la valeur de d0 et d5 à la fin de ce programme. text move #247,d0 ;on pose le mot 247 dans le mot de p.fa. de d0 move #3,d5 ;on pose le mot 3 dans le mot de p.fa. de d5 bbb add #8,d0 ;on ajoute le mot 8 au mot de p.fa. de d0 move d0,out ;puis on pose le mot de p.fa. de d0 en 'out' dbf d5,bbb ;on revient en 'bbb' jusqu'à ce que d5=-1 ;soit 4 fois de suite car d5=3 au d‚part ;à la fin de la boucle, d0=247+(8*4)=279 (mot) bss out ds.b 2 ;on reserve 2 Octets (soit 1 mot) en 'out' end En 'out' on trouve donc un Mot, la dernière valeur de d0 soit 279, d5=-1 car sa le registre est d‚cr‚ment‚e jusqu'à ce que d5=-1. nr°7: ----- Il fallait: Trouver la valeur BINAIRE du registre de donn‚e d1 à la fin de ce prg . sachant que 5438=%0001010100111110 text move #5391,d0 ;on pose le mot 5391 dans le mot de p.fa. de d0 add #47,d0 ;on lui ajoute 47, donc d0=5438 (mot) move d0,dix ;on pose le mot de p.fa. de d0 en 'dix', ;comme en 'dix' il y a 'ds.b' ,seul l'octet de ;poids fort de d0 sera en 'dix',l'octet de p.fa. ;sera en 'in' (adresse 'dix'+1). move.b in,d1 ;on pose l'octet point‚ par 'in' dans l'octet ;de poids faible de d1 ;en 'in' il y a l'octet de poids faible de d0, ;donc d1 contiendra %00111110 bss dix ds.b 1 ;reserve un octet en 'dix' in ds.w 47 ;reserve 47 mots en 'in'='dix'+1 data nul dc.w 5438 ;rien à voir ici... end On a donc d1=%00111110 (octet) nr°8: ----- Que va-t-il se passer en 'gag' ? text move.l #gag,a2 ;a2 pointe sur l'adresse de 'gag' gag move.b #100,d1 ;on pose l'octet 100 dans l'octet de p.fa. ;de d1 jmp (a2) ;on saute à l'adresse point‚e par a2 (soit ;l'adresse de 'gag') end Le programme est donc une boucle sans fin, on pose l'octet 100 en d1 une infinit‚ de fois. nr°9: ----- Quelle sera la valeur de d3 après ce prg ? text move.b #12,lab ;on pose l'octet 12 en 'lab' move.b #14,lac ;" " " 14 en 'lac' move.b #15,lad ;" " " 15 en 'lad' move.l #lab,a3 ;on pose l'adresse de 'lab' en a3 move.b #1,d1 ;on met l'octet 1 dans l'octet de p.fa. de a1 fff move.b (a3)+,d3 ;on prend la valeur point‚e par a3,on incr‚mente ;a3 d'1 (.b) et on la pose dans l'octet de poids ;faible de d3. dbf d1,fff ;on d‚cr‚mente d1 d'1 unit‚ juqu'à ce que d1=-1 ;,si d1 est diff‚rent de -1, on saute en 'fff' add.b (a3),-(a3);on ajoute l'octet point‚ par a3 ( on d‚cr‚mente ;a3 de 1 (.b) ) à l'octet point‚ par la nouvelle ;adresse de a3. move.b -(a3),d3 ;On d‚cr‚mente a3 d'1 (.b) et on pose la valeur ;ainsi point‚e dans l'octet de p.fa. de d3 add.b (a3),d3 ;On ajoute la valeur point‚e par a3 à d3 (octet) bss lab ds.w 1 ;on r‚serve 1 L-M lac ds.b 1 ;on " 1 octet lad ds.w 5 ;on r‚serve 5 mots end En 'fff',la première fois:d1=1, a3 pointe sur 'lab'. Avec,'move.b (a3)+,d3', on prend l'octet en 'lab',on incr‚mente a3 d'une unit‚ (.b) donc a3 pointe maintenant sur lab+1 et on pose l'octet dans l'octet de poids faible de d3 ,donc d3=12 (on a pos‚ l'octet 12 en 'lab'). Puis on a: 'dbf d1,fff' : d1=d1-1=0 comme 0 est diff‚rent de -1, on saute en 'fff'. à nouveau: 'move.b (a3)+,d3':on prend l'octet point‚ par a3 (ici a3 pointe sur le se- cond octet de 'lab' soit 0 puisqu'ici rien n'a ‚t‚ initialis‚...)et on le pose dans d3 après avoir incr‚ment‚ a3 d'une unit‚ :d3=0 et a3 pointe sur 'lab'+2='lac'. On arrive à 'dbf d1,fff',à nouveau,d1=d1-1=-1,cette fois ci,on ne va plus en 'fff' car d1=-1:on continue. Puis arrive 'add.b (a3),-(a3)',a3 pointe sur 'lac' ('lab'+2),on prend la donn‚e (l'octet) point‚e par a3 (qui vaut 14), on d‚cr‚mente a3 d'une uni- t‚ (.b) et on l'ajoute à la nouvelle valeur ainsi point‚e par a3 (soit 0) finalement: Avec 'move.b -(a3),d3' ,on d‚cr‚mente a3 d'une unit‚ (donc a3 pointe sur 'lab') et on pose la donn‚e ainsi point‚e dans l'octet de poids faible de d3, donc d3=12. Pour finir, avec 'add.b (a3),d3', on ajoute à d3 la donn‚e point‚e par a3, comme d3 pointe sur 'lab', on a: d3=d3+12=12+12=24 Finalement:d3=24.et a3 pointe sur 'lab' ... nr°10: ------ Quelle seront les valeurs de d0,d1,d2,d3,a0 après ce prg ? Facile... text move.b #10,a ;pose l'octet 10 en a move.b #11,b ; 11 en b move.b #12,c ; 12 en c move.b #13,d ; 13 en d move.b #98,e ; 98 en e move.l #deb,a0 ;pose l'adresse de 'deb' dans a0 ;:a0 pointe sur 'deb' move.b (a0)+,d0 ;pose l'octet point‚ par a0 :0 car rien n'est ;initialis‚ en 'deb',(incr‚mente a0 d'une uni- ;t‚ (.b) ), dans d0, donc: ;d0=0 (octet) ,a0=a0+1, donc a0 pointe sur 'a'. move.b (a0)+,d1 ;idem pour d1:d1=10,a0 pointe sur 'a'+1='b' move.b (a0)+,d2 ; pour d2:d2=11,a0 pointe sur 'b'+1='c' move.b (a0),d3 ;Pose l'octet point‚ par a0 dans d3: ;a0 pointe sur 'c', donc d3=12 move.b -(a0),d4 ;d‚cr‚mente a0 d'une unit‚ et pose l'octet ;ainsi point‚ par a0 dans l'octet de poids ;faible de d4: ;comme a0 pointait sur 'c', on a maintenant: ;a0='c'-1='b', donc d4=11 (on a mis 11 en 'b') bss deb ds.b 1 ;r‚serve 1 octet en deb a ds.b 1 ;en a b ds.b 1 ;en b c ds.b 1 ;en c d ds.b 1 ;en d e ds.b 1 ;en e f ds.l 4 ;r‚serve en L-M en f end Donc: d0=0,d1=10,d2,11,d3=12,d4=11, a0 pointe sur 'b'. nr°11: ------ On devait trouver la valeur de a4 et d0,d1 après ce prg. text move.b #3,d0 ;pose l'octet 3 dans le registre d0 move.l #pil,a4 ;pose l'adresse de 'pil' dans a4 rrr move.b -(a4),d1 ;d‚cr‚mente a4 d'une unit‚ (.b) et pose l'octet ;point‚ par a4 dans l'octet de p.faible de d1 add.b #4,d1 ;ajoute l'octet 4 à l'oct de p faible de d1 dbf d0,rrr ;boucle jusqu'à ce que d0=-1 data dc.b 1,2,3,4,5,6,7,8,9 ;9 octets sont stock‚s ici pil dc.b 245 ;octet 245 à l'adresse 'pil' end à la fin du prg,d0=-1, c'est le compteur de boucle... la boucle: 1° passage: d0=3,a4 pointe sur 'pil' avec 'move.b -(a4),d1', on d‚cr‚mente a4 d'1 unit‚ (car .b),on prend l'octet point‚ par a4 et on le pose dans l'octet de p.faible de d1: a4='pil'-1 donc a4 pointe sur l'octet '9',d1=9+4=13 car on 'add.b #4,d1' On d‚cr‚mente d0 et on retourne en 'rrr' car d0=2 2° passage:d0=2,a4 pointe sur l'octet '9' La mème op‚ration que pr‚c‚dement s'effectue: a4 pointe sur l'octet '8',d1=8+4=12 (octet),d0=2-1=1 3° passage:d0=1,a4 pointe sur l'octet '8' de mème, on obtient: a4 pointe sur l'octet '7',d1=7+4=11 (octet),d0=1-1=0 4° passage:d0=0,a4 pointe sur l'octet '7' de mème, on a: a4 pointe sur l'octet '6',d1=6+4=10 (octet),d0=0-1=-1 donc on sort de la boucle et finalement: d0=-1,d1=10,a4 pointe sur l'octet '6' nr°12: ------ Trouvons ce qu'il y a en 'out' et la valeur de d2. text a equ 3 ;on asigne 3 à 'a' b equ 5 ; 5 à 'b' move.b a,d2 ;on pose l'octet point‚ par 'a' dans l'octet de ;poids faible de d2,donc d2=3 add.b b,d2 ;on lui ajoute l'octet point‚ par 'b', donc ;d2=d2+5=8 (octet) move.l #g,a5 ;on pose l'adresse de 'g' dans a5 move.b d2,(a5) ;on pose l'octet de poids faible de d2 à ;l'adresse point‚e par a5 (soit en 'g') move.b d2,-(a5) ;on pose l'octet de p.fa. de d2 (on d‚cr‚mente ;a5 d'une unit‚ ) à la nouvelle adresse de a5 ;(ici, a5 pointe sur 'out',donc on trouvera d2 ;soit l'octet 8 en 'out') move.b (a5)+,d2 ;on pose l'octet point‚ par a5 (soit l'octet 8) ;(on incr‚mente a5 d'1 unit‚) dans l'octet de ;poids faible de d2:d2=8 et a5 pointe sur 'g' move.b (a5),d2 ;on pose l'octet point‚ par a5 dans l'octet de ;p.fa. de d2: a5 pointe sur 'g',en 'g' il y a ;l'octet 8 donc d2=8 encore une fois. bss out ds.b 1 g ds.b 4 end conclusion:en 'out' il y a l'octet 8 et d2=8 (octet) nr°13: ------ Il faut trouver la valeur de d1,d2,d3,d4 et a0. text move.l #out,a0 ;on pose l'adresse de 'out' dans a0 move.w #2,d3 ;on pose le mot '2' dans d3 move.w (a0),d1 ;on pose le mot point‚ par a0 (soit 15) dans ;le mot de poids faible de d1:d1=15 (a0='out') move.w -4(a0),d2 ;on prend le mot point‚ par a0-4 (mode d(an) ) ;et on le pose dans le mot de poids faible de ;d2:donc d2=12 (a0='out') move.w -4(a0,d3),d3 ;on prend le mot point‚ par 'a0'+d3-4 ;(mode d(an,rn) ) soit 'a0'-2 et on le ;pose dans le mot de p.faible de d3: ;d3=2356 (a0='out') move.w -(a0),d4 ;on d‚cr‚mente a0 de 2 unit‚s (.w) donc a0 ;pointe sur 2356 à pr‚sent et on pose ce ;mot dans le mot de poids faible de d4: ;d4=2356 et a0 pointe sur le mot 2356 data dc.l 1 dc.w 12 dc.w 2356 out dc.b 15 end Conclusion:d1=15,d2=12,d3=2356,d4=2356 et a0 pointe sur le mot 2356 nr°14: ------ On demandait: 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 ;on pose l'adresse de 'a' dans a5 move.l #2,d2 ;on pose le L-M '2' dans d2 ttt move.b #1,(a5)+ ;on ajoute l'octet 1 à l'adresse point‚e par a5 ;puis on incr‚mente a5 d'une unit‚ (.b) dbf d2,ttt ;boucle move.b #5,(a5) ;on pose l'octet 5 à l'adresse point‚e par a5 move.l #vec,a1 ;on pose l'adresse de 'vec' dans a1 move.b #3,d0 ;on pose l'octet 3 dans l'octet de poids faible ;de d0 move.b #0,d2 ;on pose l'octet 0 dans l'octet de poids faible ;de d2 cde move.l 0(a1,d2),a0 ;on pose le L-M point‚ par 'a1'+d2 dans a0 add.l #4,d2 ;on ajoute le L-M 4 à d2 move.b (a0),res ;on pose l'octet point‚ par a0 en 'res' dbf d0,cde ;boucle data vec dc.l a,b,c,d ;4 L-M contenant les adresses de 'a','b' ;,'c','d' bss a ds.b 1 ;ici on r‚serve les octets b ds.b 1 c ds.b 1 d ds.b 1 res ds.b 1 end 1° boucle:en ttt --------- 1° passage:d2=2,a5 pointe sur 'a' ---------- On pose l'octet '1' en 'a' puis on incr‚mente a5 d'une unit‚, a5 pointe donc sur 'b' maintenant et on repart en 'ttt' après avoir d‚cr‚ment‚ d2 2° passage:d2=1,a5 pointe sur 'b' ---------- On pose l'octet '1' en 'b' puis on incr‚mente a5 d'une unit‚, a5 pointe donc sur 'c' maintenant et on repart en 'ttt' après avoir d‚cr‚ment‚ d2 3° passage:d2=0,a5 pointe sur 'c' ---------- On pose l'octet '1' en 'c' puis on incr‚mente a5 d'une unit‚, a5 pointe donc sur 'd' maintenant,puis avec 'dbf', on d‚cr‚mente d2 qui vaut main- tenant -1 c.à.d. qu'on sort de la boucle. avec 'move.b #5,(a5)', on pose l'octet '5' à l'adresse point‚e par a5, soit 'd' à l'issue de cette boucle,on trouve donc l'octet '1' en 'a','b','c' et l'octet '5' en 'd' puis arrive la 2° boucle en 'cde': --------- 1° passage:d2=0,d0=3,a1 pointe 'vec' ----------- On pose le L-M point‚ par 0+'vec'+d2 soit 'vec'+0 en a0:a0 vaut donc 'a', puis on ajoute '4' à d2,on pose l'octet point‚ par a0 (donc en 'a') en 'res' avec 'move.b (a0),res'.En 'a' se trouve l'octet '1', donc cela revient à poser l'octet '1' en res. Avec 'dbf d0,cde',on d‚cr‚mente d0 et on revient en 'cde' 2° passage:d2=4,d0=2,a1 pointe 'vec',a0 pointe 'a' ---------- On pose le L-M point‚ par 0+'vec'+d2 soit 'vec'+4 en a0:a0 vaut donc 'b', puis on ajoute '4' à d2,on pose l'octet point‚ par a0 (donc en 'b') en 'res' avec 'move.b (a0),res'.En 'b' se trouve l'octet '1', donc cela revient à poser l'octet '1' en res. Avec 'dbf d0,cde',on d‚cr‚mente d0 et on revient en 'cde' 3° passage:d2=8,d0=1,a1 pointe 'vec',a0 pointe 'b' ---------- On pose le L-M point‚ par 0+'vec'+d2 soit 'vec'+8 en a0:a0 vaut donc 'c', puis on ajoute '4' à d2,on pose l'octet point‚ par a0 (donc en 'c') en 'res' avec 'move.b (a0),res'.En 'c' se trouve l'octet '1', donc cela revient à poser l'octet '1' en res. Avec 'dbf d0,cde',on d‚cr‚mente d0 et on revient en 'cde' 4° passage:d2=12,d0=0,a1 pointe 'vec',a0 pointe 'c' ---------- On pose le L-M point‚ par 0+'vec'+d2 soit 'vec'+8 en a0:a0 vaut donc 'd', puis on ajoute '4' à d2,on pose l'octet point‚ par a0 (donc en 'd') en 'res' avec 'move.b (a0),res'.En 'd' se trouve l'octet '5',donc cela revient à poser l'octet '5' en res. Avec 'dbf d0,cde',on d‚cr‚mente d0:d0=-1,on sort de la boucle. En 'res' on trouve donc l'octet '5'.A la fin:a0='d' nr°15: ------ Il faut trouver la valeur point‚e par ret, à la fin de ce prg. text move.l #5,a ;on pose le L-M 5 en 'a' move.l #a,a0 ;on pose l'adresse de 'a' dans a0 move.l (a0)+,d2 ;on pose le L-M point‚ par a0 (soit 5)(on incr‚- ;mente a0 de 4 unit‚s) dans d2 move.l d2,ret ;on pose le L-M contenu dans d2 en 'ret' bss a ds.l 2 ;on r‚serve 2 L-M en 'a' ret ds.l 1 ;on reserve un L-M en 'ret' end On trouve donc le L-M '5' à l'adresse 'ret'. n°16: ----- Trouvez la valeur de d0 et a0 après ce prg. text move.b #3,d1 ;on pose l'octet 3 dans l'octet de poids ;faible de d1 move.b #a,a0 ;on pose l'adresse de 'a' dans a0 mno move.b 1(a0,d1),d0 ;on pose l'octet point‚ par 1+'a0'+d1 dans ;l'octet de poids faile de d0 add.b #14,d0 ;on ajoute l'octet 14 à l'octet de poids ;faible de d0 add.b a,d0 ;On ajoute l'octet point‚ par 'a',soit 0 ;à l'octet de poids faible de d0 dbf d1,mno ;boucle (4 fois) data a dc.b 0,5,6,7,8,9 end 1° passage à la boucle mno:d1=3,a0 pointe 'a',d0=0 ---------- On pose l'octet point‚ par 1+'a'+d1 soit 'a'+4 (donc l'octet '8') dans d0.On lui ajoute l'octet 14 et l'octet 0:d0=8+14+0=22 Puis on d‚cr‚mente d1 le compteur de boucle et on retourne en 'mno' 2° passage:d1=2,a0 pointe 'a',d0=22 ---------- On pose l'octet point‚ par 1+'a'+d1 soit 'a'+3 (donc l'octet '7') dans d0.On lui ajoute l'octet 14 et l'octet 0:d0=7+14+0=21 Puis on d‚cr‚mente d1 le compteur de boucle et on retourne en 'mno' 3° passage:d1=1,a0 pointe 'a',d0=21 ---------- On pose l'octet point‚ par 1+'a'+d1 soit 'a'+2 (donc l'octet '6') dans d0.On lui ajoute l'octet 14 et l'octet 0:d0=6+14+0=20 Puis on d‚cr‚mente d1 le compteur de boucle et on retourne en 'mno' 4° passage:d1=0,a0 pointe 'a',d0=20 ---------- On pose l'octet point‚ par 1+'a'+d1 soit 'a'+1 (donc l'octet '5') dans d0.On lui rajoute l'octet 14 et l'octet 0:d0=5+14+0=19 Puis on d‚cr‚mente d1 le compteur de boucle=d1=-1, on sort de la boucle On a finalement: d0=19 et a0 qui pointe l'adresse de 'a' nr°17: ------ Trouvez la valeur de d3 après ce prg. text move.l #a,a0 ;on pose l'adresse de 'a' dans a0 move.b #5,(a0)+ ;on pose l'octet 5 à l'adresse point‚e par ;a0 et on incr‚mente a0 d'une unit‚ ;on a donc pos‚ l'octet 5 en 'a' move.b #6,(a0)+ ;on pose l'octet 6 à l'adresse point‚e par ;a0 et on incr‚mente a0 d'une unit‚ ;on a donc pos‚ l'octet 6 dans 'a'+1 move.b -(a0),d2 ;on d‚cr‚mente a0 d'une unit‚ et on pose ;l'octet ainsi point‚ par a0 dans l'octet ;de poids faible de d2 ;on a donc pos‚ l'octet de 'a'+1+1-1 soit ;'a'+1 ou l'octet 6 dans d3 move.l #a,a0 ;on pose l'adresse de 'a' dans a0 move.b 1(a0),d3 ;on pose l'octet en 'a'+1 dans l'octet de ;poids faible de d3 ;soit l'octet 6 dans d3 add.b d2,d3 ;on ajoute les 2 octets de d2 et d3 ,le ;r‚sultat est dans d3:d3=6+6=12 bss a ds.w 1 ;on r‚serve 1 mot en 'a' ds.b 1 ;on r‚serve 1 octet en 'a'+2 end On a donc d3=12 nr°18: ------ Il faut trouver ce qui se passe en 'stp', et ce que contient 'res' ? text move.w #5,d3 ;on pose le mot 5 dans le mot de poids faible ;de d3 add.b #6,d2 ;on ajoute l'octet 6 à l'octet de poids faible ;de d2 donc d2=0+6=6 add.b d2,d3 ;on ajoute les octets de poids faibles de d2 et ;d3, le r‚sultat est dans d3:d3=11 move.l #ad,a0 ;on pose l'adresse de 'ad' dans a0 stp jmp 10(a0) ;on saute à l'adresse a0+10 (mode d(an) ) soit ;'ad'+10 ad move.l #5,res ;en 'ad',on trouve une instruction d'une taille ;de 10 octets (4 pour '.l', +4 pour le mot '5', ;+2 pour les mots d'extension=10 octets) move.b d3,res ;on saute donc jusqu'ici et on met l'octet de ;poids faible de d3 en 'res' bss res ds.b 1 end En 'stp' on saute donc l'instruction situ‚e en 'ad' et en 'res' on trouve l'octet 11 nr°19: ------ Maintenant les 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' ? Avec 'move.w #0,d0', on pose le mot 0 dans le mot de poids faible de d0, ceci a pour effet de mettre le bit 'Z' (comme Z‚ro) du CCR à 1. Avec 'add.w #-2,d0', on pose le mot -2 dans le mot de poids faible de d0, ceci a pour effet de mettre le bit 'N' (comme N‚gatif) du CCR à 1 b) Peut-on placer un OCTET à une adresse impaire ? Oui! C'est aussi possible avec un Bit, mais pas avec un Mot ou un Long Mot (cf le cours...) c) Par combien de chiffres est cod‚ un L-M en HEXADECIMAL ? Par 8 chiffres Hexa. (cf le cours) 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 ? FAUX !! Le PC est un registre c'est vrai, mais il vous est impossible d'y placer une donn‚e.Le PC n'est chang‚ que par les instructions de saut et à chaque fois qu'une instruction est effectu‚e. e) La directive 'END' met fin au programme et permet le retour au DESKTOP, Vrai ou Faux ? Argumentez. FAUX !! Elle indique seulement à l'assembleur que le listing est termin‚. Pour revenir au DESKTOP (ou Bureau GEM) il faut employer une ins- truction du GEMDOS (nous verrons comment en d‚tail) 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. FAUX !! Revoyez le cours, tout y est expliqu‚ en d‚tail... g) On peut utiliser n'importe quel mode d'adressage pour les op‚randes des instructions du 68000. Vrai ou Faux ? FAUX !! Les instructions n'admettent que certains modes d'adressage pour leurs op‚randes source et leurs op‚randes destination. Il faudra donc que je vous indique pour chaque instruction les diff‚- rents modes d'adressage accept‚s pour les op‚randes. Par exemple:Move (an)+,d(pc,rn) sera impossible... Nous verrons tout cela en d‚tail lorsque je commenterai les diff‚- rentes instructions du 68000. ----------------- PIECHOCKI Laurent 8,impasse Bellevue 57980 TENTELING
Back to ASM_Tutorial