0% ont trouvé ce document utile (0 vote)
36 vues21 pages

Programme Assembleur : Manipulation Registres et Tableaux

Transféré par

Roeya Khachnaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues21 pages

Programme Assembleur : Manipulation Registres et Tableaux

Transféré par

Roeya Khachnaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

KHACHNAOUI ROEYA- 2L SE TD2|TP3

TP2: Manipulation des registres et opérations arithmétiques


1.Construire un programme qui commence à l'adresse $9000, et qui réalise les

tâches suivantes:

- mettre 3 dans l'octet de poids faible du registre D1

- ajouter 5 à cette valeur (commande add), et vérifier la valeur sur le simulateur

-mettre 512 dans le mot de poids faible du registre D2

-ajouter le mot de poids faible du D1 à D2

-enregistrer ce résultat dans une variable nommée sum2

- donner l'adresse et la valeur que contient cette variable

-mettre 67500 dans le registre D3

-ajouter le contenu de la variable sum2 à D3

-enregistrer ce résultat dans une variable nommée sum3

- donner l'adresse et la valeur que contient cette variable

construction de programme:

ORG $9000

START: MOVE.B #3,D1 ; mettre 3 dans l'octet de poids faible du registre D1

ADDQ.W #5,D1 ; ajouter 5 a cette valeur + ADDQ est utilisée pour ajouter une valeur rapide : quick
value a un registre

MOVE.W #512,D2 ; mettre 512 dans le mot de poids faible du registre D2

ADD.W D1,D2 ; ajouter le mot de poids faible du D1 à D2

MOVE.W D2,sum2 ; enregistrer ce résultat dans une variable nommé sum2

MOVE.L #sum2,A0 ; donner l'adresse de la variable sum2

MOVE.W sum2,D3 ; mettre 67500 dans le registre D3

ADD.L D3,A0 ; ajouter le contenu de la variable sum2 à D3

MOVE.L D3,sum3 ; enregistrer ce résultat dans une variable nommée sum3

MOVE.L #sum3,A0 ; donner l'adresse de la variable sum3

sum2: DC.W 0 ; définir la variable sum2


sum3: DC.L 0 ; définir la variable sum3

END START

2.Utiliser le simulateur pour déterminer le contenu des registres du tableau 1.1 en

suivant les étapes suivantes:

-Enregistrer la valeur hexadécimale $30A79847 a l'emplacement mémoire $1000

-Saisissez un programme assembleur contenant les instructions du tableau

suivant

- Exécuter ce programme en mode ligne par ligne et déterminer le contenu des

registres après chaque instruction.


AVANT D0=FFFFFFFF , A1=00001000

1. Donner le contenu des cases mémoires à la suite d'exécution des instructions suivantes:

ORG $2000

DC.L $11110000

ORG $3000

DC.L $22220000

ORG $20000

DC.L $11110000

ORG $30000

DC.L $00000000
TP3 : Modes d'adressage et manipulation des tableaux

Analyse d fonctionnement d'un programme

1.Saisir le programme suivant et déterminer le contenu (32 bits) des registres et des

zones mémoire qui changent au cours de la simulation. La quatrième colonne ne fait

pas partie du programme, ce sont les questions aux quelles il faut répondre dans vos

compte-rendus.

DATA:

ORG$2000

Tab1 DC.B 1,2,3,4,5 $2000=

Tab2 DC.W$1100,$2200,$3300,$4400,$5500 $2006=

Tab3 DS.W 5 $2010=

Sum DS.W 1

N DC.B 5

CODE: ORG $1000

move.b N,DO PC= ; DO=

lea.l Tab1,A1 PC= ;A1=

lea.l Tab2,A2 PC=;A2=

Lea.l Tab3,A3 PC= ;A3=

Loop1:

add.w(A2)+,D2 Donner le contenu de A2,D2 et CCRpour chaque itération

cmp A2,A3

bne Loop1

move.w D2,Sum PC= ,@Sum= adresse de Sum ; Sum= valeur de Sum

move.L #0,D7

Loop2:

clr.L D1

move.b(A1)+,D1 Donner le contenu de A1,A2,A3,D1 et D7 pour chaque itération

add.w -(A2),D1
move.w D1,(A3)+

add #1,D7

cmp.b N,D7

bne Loop2

CODE COMPLET:
Continues des registres et des zones mémoires au cours des simulations:
Fin de loop 1 A2=A3=2010:
TP4: Manipulation of character strings:
1. Compléter le programme assembleur suivant afin qu'il puisse convertir les carac-

tères minuscules du tableau tab en majuscule.

Astuce : comparer les codes ASCII des caractères majuscules et minuscules pour

en déduire la relation.

2. Dresser un tableau permettant de suivre l'état des registres et des cases mêmoire

en mode d'exécution ligne par ligne.

3. Ajouter les instructions assembleur permettant d'afficher le contenu de la variable

tab.
DATA:

ORG$2000

a DC.B $20

tab DC.B 'ABCDE',$0 $2000=

@a =

@tab=

CODE:

ORG$1000

loop1:

donner pour chaque iteration le contenu des registres et des cases mêmoires qui changent

bne loop1

* tab=...............=.........

* Affichage du contenu du tableau tab

END CODE

1 : DATA:

ORG $2000

START:

a DC.B $20 ; Définit la variable a avec la valeur hexadécimale 20

tab DC.B 'ABCDE',$0 ; Définit le tableau tab avec les caractères 'ABCDE'

CODE:

ORG $1000

loop1:

MOVE.B (A0),D1 ; Charge le contenu de l'adresse mémoire pointée par A0 dans D1

ADD.B a,D1 ; Ajoute la valeur de a à D1

MOVE.B D1,(A0)+ ; Écrit le contenu de D1 à l'adresse mémoire pointée par A0, puis
incrémente A0

compteur :
ADD.B #1,D2 ; Ajoute 1 à D2

CMP.B #5,D2 ; Compare D2 à 5

BNE loop1 ; Saute à loop1 si D2 n'est pas égal à 5

END START

memoire en iteration :
Letat des registres et des cases memoire en mode dexecution ligne par ligne :

@a=2000=20

$2000=|20|41|42|43|44|45|00

tab=61|62|63|64|65|00| =`ABCDE`

TP5: Manipulation des tableaux 2:


1. Déclarer une zone de données qui commence à l'adresse $0B000

2. créer un tablean nommé Tab1 de 5 cases d'un octet chacune. initialisées par

1,2,3,4,5

3. créer un tableau nommé Tab2 de 5 cases d'un mot chacune. initialisées par

26,27,28,29,30

4. créer un tableau SumTab de 5 mots non initialisé

5. créer un tableau ProdTab de 5 long-mots non initialisé

6. déclarer deux variables Sum et Prod de tailles respectives 16 bits et 32 bits.

Partie codes:

7. Commencer la partie code à l\'adresse $0A000

8. calculer la somme des éléments du tableau Tab1 et enregistrer cette somme dans Ia variable
Sum

9.calculer le produit des éléments du tableau Tab1 et enregistrer ce produit dans la variable Prod

10. remplir le tableau SumTab selon l'expression

SumTab[i]=Tabl[i]+Tub2[i] pour i de 1 à 5

11. remplir le tableau ProdTab selon l'expression

ProdTab[i]=Tab1[i]*Tab2[i]pour i de 1 à 5
ORG $0B000

Tab1 DC.B 1,2,3,4,5 ; Création du tableau Tab1 de 5 cases d'un octet chacune initialisées par
1,2,3,4,5

Tab2 DC.W 26,27,28,29,30 ; Création du tableau Tab2 de 5 cases d'un mot chacune initialisées
par 26,27,28,29,30

SumTab DS.W 5 ; Création du tableau SumTab de 5 mots non initialisé

créer un tableau ProdTab de 5 long-mots non initialisé:


ProdTab DS.L 5 ; Création du tableau ProdTab de 5 long-mots non initialisé

déclarer deux variables Sum et Prod de tailles respectives 16 bits et 32 bits:

Sum DS.W 1 ; Déclaration de la variable Sum de taille 16 bits

Prod DS.L 1 ; Déclaration de la variable Prod de taille 32 bits

START:

ORG $0A000

calculer la somme des éléments du tableau Tab1 et enregistrer cette somme dans la variable
Sum:

CLR.W D0 ; Initialisation du registre D0 à 0

CLR.W D1 ; Initialisation du registre D1 à 0

LEA Tab1,A0 ; Chargement de l'adresse du tableau Tab1 dans le registre A0

MOVE.B #5,D1 ; Chargement du nombre d'itérations dans le registre D1

Loop1:

MOVE.B (A0)+,D0 ; Chargement de l'élément courant du tableau Tab1 dans le registre D0

ADD.W D0,D1 ; Addition de l'élément courant au registre D1

DBNE D1,Loop1 ; Décrémentation de D1 et saut à Loop1 si D1 n'est pas égal à 0

qui peut remplacer les lignes: CMP #5,D2 ET BNE LOOP1

MOVE.W D1,Sum ; Enregistrement du résultat dans la variable Sum

calculer le produit des éléments du tableau Tab1 et enregistrer ce produit dans la variable Prod:

CLR.L D0 ; Initialisation du registre D0 à 0

CLR.W D1 ; Initialisation du registre D1 à 0

LEA Tab1,A0 ; Chargement de l'adresse du tableau Tab1 dans le registre A0

MOVE.B #5,D1 ; Chargement du nombre d'itérations dans le registre D1

Loop2:

MOVE.B (A0)+,D0 ; Chargement de l'élément courant du tableau Tab1 dans le registre D0

EXT.L D0 ; Extension de D0 en long-mot

MULU #1,D0 ; Multiplication de l'élément courant par 1


ADD.L D0,D1 ; Addition du résultat au registre D1

DBNE D1,Loop2 ; Décrémentation de D1 et saut à Loop2 si D1 n'est pas égal à 0

qui peut remplacer les lignes: CMP #5,D2 ET BNE LOOP2

MOVE.L D1,Prod ; Enregistrement du résultat dans la variable Prod

remplir le tableau SumTab selon l'expression SumTab[i]=Tab1[i]+Tab2[i] pour i de 1 à 5:

CLR.W D0 ; Initialisation du registre D0 à 0

CLR.W D1 ; Initialisation du registre D1 à 0

LEA Tab1,A0 ; Chargement de l'adresse du tableau Tab1 dans le registre A0

LEA Tab2,A1 ; Chargement de l'adresse du tableau Tab2 dans le registre A1

LEA SumTab,A2 ; Chargement de l'adresse du tableau SumTab dans le registre A2

MOVE.B #5,D1 ; Chargement du nombre d'itérations dans le registre D1

Loop3:

MOVE.B (A0)+,D0 ; Chargement de l'élément courant du tableau Tab1 dans le registre D0

EXT.W D0 ; Extension de D0 en mot

ADD.W (A1)+,D0 ; Addition de l'élément courant du tableau Tab2 à D0

MOVE.W D0,(A2)+ ; Enregistrement du résultat dans le tableau SumTab

DBNE D1,Loop3 ; Décrémentation de D1 et saut à Loop3 si D1 n'est pas égal à 0

remplir le tableau ProdTab selon l'expression ProdTab[i]=Tab1[i]*Tab2[i] pour i de 1 à 5:

CLR.L D0 ; Initialisation du registre D0 à 0

CLR.W D1 ; Initialisation du registre D1 à 0

LEA Tab1,A0 ; Chargement de l'adresse du tableau Tab1 dans le registre A0

LEA Tab2,A1 ; Chargement de l'adresse du tableau Tab2 dans le registre A1

LEA ProdTab,A2 ; Chargement de l'adresse du tableau ProdTab dans le registre A2

MOVE.B #5,D1 ; Chargement du nombre d'itérations dans le registre D1

Loop4:

MOVE.B (A0)+,D0 ; Chargement de l'élément courant du tableau Tab1 dans le registre D0


EXT.L D0 ; Extension de D0 en long-mot

MULU (A1)+,D0 ; Multiplication de l'élément courant du tableau Tab2 par D0

MOVE.L D0,(A2)+ ; Enregistrement du résultat dans le tableau ProdTab

DBNE D1,Loop4 ; Décrémentation de D1 et saut à Loop4 si D1 n'est pas égal à 0

END START
2eme methode de code :

Vous aimerez peut-être aussi