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