Pl CORRIG 1.DOC/fr
Jump to navigation
Jump to search
-------------------------
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