Pl CORRIG 1.DOC/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
m (Added category)
No edit summary
Line 913: Line 913:
 
</pre>
 
</pre>
 
Back to [[ASM_Tutorial]]
 
Back to [[ASM_Tutorial]]
[[Category:Programming]]
+
[[Category: ASSEMBLEUR 68000 sur ATARI ST Part 1 ]]

Revision as of 16:12, 12 October 2011



                         -------------------------
                               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