TD N°2 – PREMIERS PAS EN ASSEMBLEUR PREMIÈRE PARTIE.

publicité
MICROPROCESSEUR ET LANGAGE ASSEMBLEUR 68000
TD N°2 – PREMIERS PAS EN ASSEMBLEUR
Objectif : Comprendre le fonctionnement du microprocesseur 68000, les instructions assembleur, les modes
d’adressages.
PREMIÈRE PARTIE.
Q 1. Commentez le déroulement des instructions suivantes en complétant les champs
libres correspondant au contenu des registres de données ou d’adresse, au contenu
de l’espace mémoire et à l’état des indicateurs N, Z, V, C du registre d’état.
*
START
Instructions
ORG
DC.L
DC.L
$0
$7FFF
START
ORG
nop
$5000
movea
movea.L
#$9000,a1
#$9000,a2
a1=
a2=
move.L
add.w
move
#$87654321,d1
#$F111,d1
d1,$01B000
d1=
d1=
move.L
move
move
add
#$87654321,d1
#$F111,d2
d2,$01B000
d1,$01B000
d1=
d2=
move.L
neg.B
#$5AB23FE4,d1
d1
d1=
d1=
move.L
neg.W
#$5AB23FE4,d1
d1
d1=
d1=
move.L
neg.L
#$5AB23FE4,d1
d1
d1=
d1=
move.L
move.L
neg.B
#$5AB23FE4,d1
d1,$01B000
$01B000
d1=
move.L
move.L
neg.W
#$5AB23FE4,d1
d1,$01B000
$01B000
d1=
move.L
move.L
neg.L
#$5AB23FE4,d1
d1,$01B000
$01B000
d1=
* Stack pointer value after a reset
* Program counter value after a reset
Registre
P.J.P. Lycée Dorian : 21/09/2004 @ 23:25
Espace mémoire
indicateurs d’état
N Z V C
($01B000)=
($01B000)=
($01B000)=
($01B000)=
($01B000)=
($01B000)=
($01B000)=
($01B000)=
($01B000)=
TD n°2 : Premiers Pas en assembleur
page 1 / 3
MICROPROCESSEUR ET LANGAGE ASSEMBLEUR 68000
Q 2. Indiquez le contenu des registres ou de la mémoire de façon à expliquer
l'exécution des instructions ci-dessous.
Registre de données
d1=
move.L
move.L
#$34C10002,d1
d1,$01B000
move.L
move.L
#$FFFFFFFF,d1
d1,$01B004
d1=
move.W
muls
move.L
$01B002,d0
$01B000,d0
d0,$01B004
d0=
d0=
Contenu mémoire
($01B000)=
($01B004)=
($01B004)=
DEUXIÈME PARTIE.
Q 3. Indiquez la validité des instructions ci-dessous, le contenu de l’espace mémoire et
l’état des registres associés à ces instructions.
Conditions initiales : a0=$01B004 et ($01B0000)=$2C34, ($01B0002)=$FE36, ($01B004)=$59DC
ORG
DC.L
DC.L
ORG
START nop
$0
$7FFF
START
* Stack pointer value after a reset
* Program counter value after a reset
$5000
movea.L
#$01B002,a0
#$FE36,(a0) OUI
#$2C34,-2(a0)
#$59DC,2(a0)
Instruction valide
OUI
a0=$0001B002
OUI
OUI
registre
a0=$0001B002
XX
a0=$0001B002
a0=$0001B002
neg.w
a0
movea.L
neg.B
#$01B004,a0
-(a0)
neg.W
-(a0)
movea.L
neg.W
#$01B004,a0
-(a0)
OUI
a0=
a0=
movea.L
neg.B
#$01B004,a0
-(a0)
OUI
a0=
a0=
movea.L
neg.W
#$01B004,a0
-1(a0)
OUI
a0=
a0=
P.J.P. Lycée Dorian : 21/09/2004 @ 23:25
OUI
($01B000)
XX XX XX XX XX XX move.W
XX FE 36 XX XX move.W
2C 34 FE 36 XX XX
move.W
2C 34 FE 36 59 DC
a0=
a0=
a0=
TD n°2 : Premiers Pas en assembleur
page 2 / 3
MICROPROCESSEUR ET LANGAGE ASSEMBLEUR 68000
Q 4. Indiquez la validité de l’instruction et l'adresse effective de la donnée sachant que
a0=$01B000 et d2=$00000010.
neg.L
neg
$8000
$7001
neg.W
neg.W
neg.B
neg.W
$4(a0)
$f60(a0)
10(a0,d2)
$2D0(a0,d2)
Instruction valide
OUI
Adresse effective
$8000
$01B000 + $4 => $01B004
Q 5. Pour chacune des instructions suivantes du 68000, donnez :
Ø
Ø
Ø
Ø
le type d'adressage (source, destination)
le résultat
l'état des drapeaux après l'exécution
les anomalies éventuelles
Instructions
conditions initiales
move.W
move.L
#$9000,a1
#$9000,a2
lea
move.W
$8000,a5
#$7000,a4
move.B
d0,(a0)
d0 = $87654321
a0 = $01B000
move
move.L
d0,(a0)+
d0,(a0)+
idem
idem
move.B
(a0),$100(a0)
a0 = $01B000
($01B000) = 00
move.B
(a0),3(a0,d0)
idem
d0 = $02
clr
clr
asl.B
$100(a0,d0)
3(a0,d0)
#3,d0
idem
idem
d0 = $12345678
P.J.P. Lycée Dorian : 21/09/2004 @ 23:25
TD n°2 : Premiers Pas en assembleur
page 3 / 3
Téléchargement