Informatique Industrielle : TP2 : Les modes d’adressage en 6800
Télécharger PDFTP2 : Les modes d’adressage en 6800
I / Préparation théorique
I-A / Donner le mode d’adressage dans chaque cas :
| Instruction | Mode d’adressage | |
|---|---|---|
| ADD A | #$17 | Immédiat |
| LDX | #$CD12 | Immédiat étendu |
| LDA B | A21F | Direct |
| LDA B | 07, X | Indexé X |
| BRA | étiquette | Relatif |
| ADD B | #$00 | Immédiat |
I-B / Instructions et modes d’adressage
| Instruction | Mode d’adressage | Registre modifié | Nature de l’opérande |
|---|---|---|---|
| LDAA | #$25 | A | Immédiat |
| LDAB | #$25 | B | Immédiat |
| LDX | #$0025 | X | Immédiat étendu |
| LDS | #$0025 | SP | Immédiat étendu |
| LDAA | $25 | A | Direct |
| LDAA | $1125 | A | Direct étendu |
| LDAB | $25 | B | Direct |
| LDAB | $1125 | B | Direct étendu |
| LDAA | $25 | — | Direct |
| LDX | $0025 | — | Direct étendu |
| LDX | $1125 | X | Direct étendu |
| LDS | $1125 | SP | Direct étendu |
| LDAB | $02, X | B | Indexé X |
Commentaire :
- Les modes immédiat et immédiat étendu chargent directement une valeur en mémoire ou dans un registre.
- Les modes direct et direct étendu lisent une valeur depuis une adresse mémoire.
- Les modes indexés permettent d’accéder à une adresse calculée à partir d’un registre d’index (X ou SP).
- Les instructions BRA et JSR utilisent un mode relatif pour les sauts.
II / Programmation
II-A / Découverte des modes d’adressage
1. Code à exécuter sur l’émulateur Moto6800 :
LDAA #$25 STAA $0000 END
Remarques sur les registres et la mémoire :
- Le registre A contient la valeur $25 après l’instruction LDAA.
- L’instruction STAA écrit la valeur $25 à l’adresse mémoire $0000.
2. Modes d’adressage pour chaque instruction :
| Instruction | Mode d’adressage |
|---|---|
| LDAA #$25 | Immédiat |
| STAA $0000 | Direct |
3. Code pour le registre B :
LDAB #$25 STAB $0000 END
II-A / Code corrigé et exécuté
LDX #$0040 LDAA $25 STAA #$0000 LDAA #$15 STAA $0042 LDAB #$02, X END
4. Remarques sur le code :
- L’instruction STAA #$0000 est incorrecte : le mode immédiat ne peut pas être utilisé pour écrire en mémoire.
- L’instruction STAA $0042 est valide : mode direct pour écrire en mémoire.
- L’instruction LDAB #$02, X est incorrecte : le mode immédiat ne peut pas inclure un registre.
5. Code corrigé :
LDX #$0040 LDAA $25 STAA $0000 LDAA #$15 STAA $0042 LDAB $02, X END
6. Tableau des instructions exécutées
| Instruction | Mode d’adressage | Explication |
|---|---|---|
| END | — | Fin du programme, arrêt de l’exécution. |
7. Instructions ajoutées
CLR $0000 CLRA
8. Tableau des instructions CLR
| Instruction | Mode d’adressage | Explication |
|---|---|---|
| CLR $0000 | Direct | Mise à zéro de la mémoire à l’adresse $0000. |
| CLRA | Accumulateur | Mise à zéro du registre A. |
Commentaire :
- L’instruction CLR agit sur une adresse mémoire ou un registre.
- L’instruction CLRA agit uniquement sur le registre A.
II-B / Registres et modes d’adressage
1. Registres de données (A et B)
Situation de départ :
- A : $00
- B : $00
Instructions et résultats :
LDAA #$25 LDAB $25 LDAA $1125
| Instruction | Mode d’adressage |
|---|---|
| LDAA #$25 | Immédiat |
| LDAB $25 | Direct |
| LDAA $1125 | Direct étendu |
Remarques sur la taille des registres et des données :
- Les registres A et B sont des registres à 8 bits, capables de stocker des valeurs de $00 à $FF.
- Les modes direct et direct étendu lisent des valeurs sur 8 bits ou 16 bits selon l’adresse.
- Les modes immédiat et immédiat étendu permettent de charger des valeurs sur 8 bits ou 16 bits.
2. Registre d’index (X)
Situation de départ :
- X : $0000
Instructions et résultats :
LDX #$0025 LDX $1125
| Instruction | Mode d’adressage |
|---|---|
| LDX #$0025 | Immédiat étendu |
| LDX $1125 | Direct étendu |
Remarques sur la taille des registres et des données :
- Le registre X est un registre à 16 bits, pouvant stocker des valeurs de $0000 à $FFFF.
- Les modes immédiat étendu et direct étendu permettent de manipuler des adresses sur 16 bits.
3. Registre SP (pointeur de pile)
Situation de départ :
- SP : $0000
Instructions et résultats :
LDS #$0025 LDS $1125
| Instruction | Mode d’adressage |
|---|---|
| LDS #$0025 | Immédiat étendu |
| LDS $1125 | Direct étendu |
Remarques sur la taille des registres et des données :
- Le registre SP est un registre à 16 bits, pouvant stocker des valeurs de $0000 à $FFFF.
- Les modes immédiat étendu et direct étendu permettent de manipuler des adresses sur 16 bits.
II-C / Application
Code à exécuter et tableau à compléter :
$0EA0 db $AB $0EA1 db $BC $0EA2 db $CD $0EA4 db $DE SEI LDAA $0EA1 LDA B $0EA2 INC A SUB B #$05 LDX $0EA3 JSR $00, X TAP CLI CLC CLV SWI
| Instruction | Mode d’adressage | Description de l’opération | Contenu modifié |
|---|---|---|---|
| $0EA0 db $AB | — | Définition d’une valeur en mémoire à l’adresse $0EA0. | Mémoire $0EA0 : $AB |
| $0EA1 db $BC | — | Définition d’une valeur en mémoire à l’adresse $0EA1. | Mémoire $0EA1 : $BC |
| $0EA2 db $CD | — | Définition d’une valeur en mémoire à l’adresse $0EA2. | Mémoire $0EA2 : $CD |
| $0EA4 db $DE | — | Définition d’une valeur en mémoire à l’adresse $0EA4. | Mémoire $0EA4 : $DE |
| SEI | — | Désactive les interruptions. | Flags : I = 1 |
| LDAA $0EA1 | Direct étendu | Charge la valeur $BC depuis l’adresse $0EA1 dans le registre A. | Registre A : $BC |
| LDA B $0EA2 | Direct étendu | Charge la valeur $CD depuis l’adresse $0EA2 dans le registre B. | Registre B : $CD |
| INC A | Accumulateur | Incrémente le registre A de 1. | Registre A : $BD |
| SUB B #$05 | Immédiat | Soustrait $05 du registre B et stocke le résultat dans le registre A. | Registre A : $BD - $05 = $B8, Registre B inchangé |
| LDX $0EA3 | Direct étendu | Charge la valeur de l’adresse $0EA3 dans le registre X. | Registre X : $0EA3 (valeur non définie dans le code) |
| JSR $00, X | Indexé X | Appelle la sous-routine à l’adresse pointée par X + $00. | Pile : sauvegarde du PC, X modifié |
| TAP | — | Transfère le contenu du registre T vers le registre A. | Registre A : valeur de T (non définie) |
| CLI | — | Active les interruptions. | Flags : I = 0 |
| CLC | — | Mise à zéro du flag C (carry). | Flags : C = 0 |
| CLV | — | Mise à zéro du flag V (overflow). | Flags : V = 0 |
| SWI | — | Appel d’interruption logicielle. | Pile : sauvegarde du PC, passage à la sous-routine d’interruption |