6809 Ofppt

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 27

INTRODUCTION AUX MICROPROCESSEURS

RÉSUMÉ DE THÉORIE
Écrire un Programme Opérationnel en Assembleur

TECCART INTERNATIONAL 2000 inc.


3155, boul. Hochelaga,
Montréal, Québec (Canada)
H1W 1G4

RÉDACTION
Serge Leblanc

DESSINS ET CONCEPTION GRAPHIQUE


Serge Leblanc

RÉVISION TECHNIQUE
Pierre Asselin & Christian Lépine

RÉVISION LINGUISTIQUE
François Gaudreau

COMMISSION DE VALIDATION
Formateurs de l'OFPPT

Les droits de reproduction et de diffusion de ce document sont cédés par Teccart

du Travail du Royaume du Maroc, pour sa propre utilisation au Maroc.

que ce soit, est interdite.

Mp_Rt2.Doc, imprimé à Montréal, le 18 avril 2017


TABLE DES MATIÈRES

2. ÉCRIRE UN PROGRAMME OPERATIONNEL EN ASSEMBLEUR 2-1

2.1 Les langages de programmation 2-1

2-2

2-3

rogramme 2-4
2.4.1 Boucle de délai 2-4

2-5

2.6 Comment rédiger un programme 2-6


2.6.1 Description de la tâche 2-6
2.6.2 Algorithme 2-6
2.6.3 Ordinogramme 2-6
2-8
2-8

2.7 Programmation structurée 2-9


2-9
2.7.2 Dépannage 2-10
2.7.3 Documentation 2-10

2-11
2.8.1 Mode d'adressage immédiat 2-11
2.8.2 Mode d'adressage étendu (extended) 2-11
2.8.3 Mode d'adressage inhérent 2-11
2.8.4 Mode d'adressage direct 2-12
2-12
2.8.6 Mode d'adressage indexé 2-13

2.9 Pointeur de pile 2-15


2.9.1 Instructions manipulant les piles 2-15
2.9.2 Mouvement du pointeur de la pile 2-16
2.9.3 Contenu de la pile: 2-16
2.9.4 Ordres d'empilement et de dépilement. 2-16
2.9.5 Exemple de programme utilisant la pile 2-17
2.9.6 Observations sur le fonctionnement de la pile 2-18

2.10 Exercices 2-19


Résumé de Théorie Introduction aux Microprocesseurs

2. Écrire un Programme Opérationnel en Assembleur

2.1 Les langages de programmation


Il existe plusieurs langages de programmation; toutefois, le langage machine est le seul
compris par les microprocesseurs et est incontestablement le plus rapide à exécuter. Le

machines difficiles à interpréter. Les langages évolués bénificient de librairies de


fonctions rendant la programmation plus simple à développer.
PROGRAMME DE
NOM EXEMPLE DE TRADUCTION REMARQUES
PROGRAMME EN MACHINE

LANGAGE En binaire: Hexadecimal Loader - le seul langage compris par le CPU


10100101 - accepte les codes
MACHINE 01100000 hexadécimaux - le programme en langage machine
01100101 - les traduit en binaire est appelé programme objet
01100001 - les place en ordre dans
10000101 la mémoire - le programme Hexadecimal Loader
01100010 fait en général partie d'un
programme appelé MONITEUR.
En hexadécimal: ses fonctions: examiner et modifier
A5 le contenu des mémoires et des
60 registres; il permet l'exécution
65 partielle ou totale du programme
61
85
62

LANGAGE LDA $60 ASSEMBLEUR - le programme écrit sous forme


ADC $61 - accepte les mnémonique est appelé
ASSEMBLEUR STA $62 mnémoniques programme Source
- les traduit en binaire
- les place généralement - il contient les champs: étiquette,
dans un fichier mnémonique (instruction avec
opérande) et commentaire.

LANGAGE DE En BASIC: INTERPRETEUR - langage orienté vers les procédures


- traduit et exécute le plutôt que des instructions données
HAUT NIVEAU PRINT Allo programme ligne par au CPU
N=PEEK(96) ligne.
- Basic POKE 98,N END - prog. source indépendant du CPU
-C COMPILATEUR: ou de l'ordinateur.
- Pascal - traduit tout le
- ... programme en machine
avant de l'exécuter.

Programmer en Assembleur page 2-1 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.2
Pour commencer, définissons ce qu'est un programme. On peut dire simplement qu'un
programme est une suite logique d'instructions dont l'objectif est de produire un
comportement désiré de la machine. Tous les microprocesseurs comprennent un seul type
de programme; c'est le programme machine appelé aussi programme binaire ou objet.
Voici un programme objet exécutable par un MC6809:
code binaire fonction instruction
1000 0110 opcode 1ère instruction
0101 1010 opérande
1011 0111 opcode 2ème instruction
0000 0001 opérande
0000 0000 opérande
0011 1111 opcode 3ème instruction
Figure 2-1 Programme objet (binaire)
Le terme opcode signifie operational code ou code d'opération. Ce code représente un
ordre donné au microprocesseur. Lorsqu'une opérande est présente, elle suit toujours
l'opcode et représente, soit une valeur immédiate ou réelle ou une adresse vers laquelle le
microprocesseur doit communiquer. Il est toutefois possible que l'opérande ne soit pas
requise s'il s'agit d'opération interne du microprocesseur (mode inhérent).
Comme vous le remarquez, la représentation du programme sous la forme binaire est

la situation, on peut utiliser la représentation hexadécimale. Cela permet de diminuer les


erreurs lors de l'entrée du programme en mémoire
appuyer.
Le même programme sous la forme hexadécimale:
code hexadéc. fonction instruction
86 opcode 1ère instruction
5A opérande
B7 opcode 2ème instruction
01 opérande
00 opérande
3F opcode 3ème instruction
Figure 2-2 Programme objet (hexadécimal)
On peut très vite conclure que le programme objet, même transformé en hexadécimal,
n'est pas très commode car il est difficile, pour un humain, d'interpréter ce que fera celui-
ci. Dans le but de faciliter la compréhension du programme, on va associer à chaque
instruction une mnémonique qui est une représentation de l'instruction sous la forme d'un
mot court qui, habituellement, est descriptif et plus facile à mémoriser.

Programmer en Assembleur page 2-2 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Représentation du programme en mnémonique. Pour plus de clarté, l'opcode et l'opérande


ont été réunis sur la même ligne.

Code machine Opcode Opérande


86 5A LDA #$5A 1ère instruction
B7 01 00 STA $0100 2ème instruction
3F SWI 3ème instruction
Figure 2-3 Programme avec mnémoniques

2.3

e de codification.

Addressing Modes
Immediat Direct Indexed Extended Inherent 5 3 2 1 0
Instruction Forms Op ~ # Op ~ # Op ~ # Op ~ # Op ~ # Description H N Z V C
LD LDA 86 2 2 96 4 2 A6 4+ 2+ B6 5 3 M -> A 0
LDB C6 2 2 D6 4 2 E6 4+ 2+ F6 5 3 M -> B 0

1 2 3 4 5 6 7 8 9
Figure 2-4 Carte de codification du 6809
Chaque colonne est numéroté et correspond à ce qui suit.
Col. #1 Contient les instructions possibles pour le microprocesseur.
Col. #2 Détermine si l'instruction opère avec la mémoire ou avec un registre; dans
ce cas avec quel registre.
Col. #3, 4, 5, 6 et 7 Ces 5 colonnes représentent les 5 types de base des modes
d'adressages du microprocesseur:
Immediat (opérande: une valeur)
Direct (opérande: une adresse de 8 bits)
Indexed (opérande: un registre pointeur)
Extended (opérande: une adresse de 16 bits)
Inhérent (il n'y a pas d'opérande)
Chacune de ces colonnes est subdivisée en 3 autres colonnes:
Op (code d'opération de l'instruction)
~ (nombre de cycles de l'instruction)
# (nombre d'octets de l'instruction)
Col. #8 C'est une explication courte de ce que fait l'instruction.
Col. #9 Cette section (5 colonnes) indique comment les drapeaux H, N, Z, V et C
vont réagir à l'exécution de l'instruction. Vous trouverez la légende des
symboles, utilisés dans ces colonnes, sur la carte de codification à la suite
des instructions.

Programmer en Assembleur page 2-3 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.4
e de cycles

machine est égale à la fréquence du crystal divisée par quatre.


Par exemple, si la fréquence du crystal du microprocesseur 6809 vaut 4 Mhz, alors la

Fréq. de E = Fréq. du crystal / 4 = 1 Mhz

Période de E = 1 / Fréq. de E = 1µs

-à-
mence avec le signe ~.

2.4.1 Boucle de délai


CODE NBR. DE
MACHINE ETIQUETTE OPCODE OPÉRANDE CYCLES
86 05 LDA #5 2
4A ENCORE DECA 2
26 FD BNE ENCORE 3
39 RTS 5

Cet exemple montre un sous-programme permettant de créer un délai dont la durée


dépend de la valeur placée dans le registre A.
que seules les instruction DECA et BNE vont se répéter 5 fois. Le calcul du nombre de
cycles total pour le programme est:
nombre de cycles = 2 + 5 * (2 + 3) + 5 = 32 cycles
Avec un crystal à 4 Mhz, un cycle vaut 1 s et la durée du sous-programme est:
durée = 32 cycles * 1µs = 32 µs

Programmer en Assembleur page 2-4 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.5
Voici un exemple de programme en langage assembleur. Les champs étiquettes,
mnémonique et commentaires sont créés par le programmeur. Les champs adresse
hexa. et code machine sont générés par un programme nommé assembleur.

ADRESSE CODE ÉTIQUETTE MNÉMONIQUE COMMENTAIRES


HEXA MACHINE Opération Opérande
ORG $0200 adresse du prog.
0200 A5 DONNEE DB $A5 déclaration de la variable DONNEE
0200 PORTB EQU $6002 déclaration de la constante PORTB
0201 B6 02 00 DEBUT LDA DONNEE lire la donnée et la placer dans le reg. A
0204 B7 60 02 STA PORTB déposer le code du reg. A sur le port de sortie
0207 7E 02 01 JMP DEBUT le programme boucle sur lui-même
END

ADRESSE:
La progression des adresses dépend de la longueur en octets de l'instruction.
CODE MACHINE:
Ce sont les codes sous la forme hexadécimale correspondant à l'instruction. On les trouve
sur la carte de codification du MC6809.
ÉTIQUETTE:
Ce sont des mots représentatifs qui servent de références. Elles remplacent des adresses
ou des constantes.
MNÉMONIQUE:
C'est l'instruction complète incluant l'opération et l'opérande.
OPERATION: C'est l'instruction de base.
OPERANDE: C'est la donnée de l'instruction. Elle peut représenter une valeur,
une adresse ou un registre. Certaines instructions n'utilisent pas

COMMENTAIRE:
Champ optionnel mais très utile pour la compréhension du programme. Chaque ligne ne
doit pas être nécessairement commentée; seules les lignes clés doivent l'être.
Conseils pratiques:
- Éviter de répéter l'instruction textuellement.
- ertinents à la compréhension du programme.
- Les commentaires sont de type télégraphique pour éviter que le programme
ressemble à une oeuvre littéraire!!!

Programmer en Assembleur page 2-5 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.6 Comment rédiger un programme


La rédaction d'un programme se divise en 6 étapes, toutes aussi importantes les unes que
les autres:
description de la tâche;
rédaction d'un algorithme;
rédaction d'un ordinogramme;
rédaction du programme;
dépannage;
documentation.

2.6.1 Description de la tâche


C'est la donnée du problème. Il s'agit en fait de décrire clairement, simplement mais sans
rien omettre, tout ce que le programme doit être capable de réaliser.
La description de la tâche est au programme ce que la liste des spécifications est pour un
appareil électronique quelconque.
Pour le programmeur, une bonne description de la tâche évitera l'ennui de devoir

programme parce qu'on a oublié de considérer certaines options.


Pour l'utilisateur, une bonne description de la tâche permettra de mieux exploiter le
programme, tout en étant conscient de ces limites.

2.6.2 Algorithme
L'algorithme est la description, étape par étape, des opérations à effectuer sur un
ensemble de données pour arriver aux résultats. Ces données doivent avoir été bien
définies dans la description de la tâche.
Les différentes étapes sont ordonnées de façon séquentielle, c'est-à-dire comment elles se
déroulent dans le temps.

2.6.3 Ordinogramme
Un ordinogramme est une représentation graphique des étapes suivies par un programme.
Cette façon d'illustrer la séquence logique des opérations a trois avantages:
- facilite le codage ou l'écriture du programme;
- facilite la compréhension du programme;
- est utile pour le dépannage du programme.
Après le tracé de l'ordinogramme, il faut en vérifier le cheminement logique par des
essais théoriques avec quelques données numériques avant d'écrire les instructions en
détail.

Programmer en Assembleur page 2-6 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

- Début ou fin d'un prog. ou d'un sous-prog.


Début: contient le nom du prog. ou du sous-prog.
Fin: contient le mot FIN pour un prog. et le mot
RETOUR pour un sous-programme.

- Traitement d'information.

- Opération de test pour prendre une décision. Sert à faire un branchement


conditionnel.

- Opération d'entrée/sortie comme lire, afficher, écrire ...

- Renvoi. Utilisé pour diminuer le nombre de flèches ou éviter qu'elles se


croisent.

- Renvoi de page.

- Sous-programme. Contient le nom du sous-programme. appelé aussi


ou sous-routine.

- Utilisé pour écrire les remarques explicatives ou commentaires.

- Flèche de direction du cheminement de l'information dans


l'ordinogramme.

Figure 2-5

Programmer en Assembleur page 2-7 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.6.4
Ne jamais croiser les flèches.
Utiliser les renvois pour réduire le nombre de flèches, s'il y en a trop, et pour éviter
qu'elles se croisent.
Autant que possible, donner à l'ordinogramme une structure linéaire, de haut en bas.
Utiliser un gabarit ou un logiciel d'édition graphique.
Utiliser des noms courts et représentatifs des variables qu'ils symbolisent.
L'ordinogramme doit représenter une solution générale, indépendante du langage et de
l'ordinateur utilisé.
Vérifier la logique de l'ordinogramme en essayant quelques valeurs numériques avant
de rédiger le programme.

2.6.5

le sous-programme DELAI. La variable CODE est une valeur à 8 bits et représente le


code transmis sur les Led tandis que la variable VALUE est une variable à 16 bits et
détermine la durée du délai.
CHENILLARD DELAI

$01 -> CODE $xxxx -> VALUE

decremente
CODE -> LEDs
VALUE

DELAI VALUE
oui
différent de 0
?
décalage à
gauche de non
CODE
Retour

CODE
oui
est différent de
0?

non

Figure 2-6

Programmer en Assembleur page 2-8 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.7 Programmation structurée


La technique de programmation structurée ou modulaire consiste à subdiviser le
programme en modules ou sous-programmes. Ainsi, le problème à solutionner, au début
d'apparence très complexe, est remplacé par plusieurs petits problèmes beaucoup plus
simples à solutionner séparément. Il est donc recommandé de rédiger les programmes en
incluant les sections suivantes:
identification et titre du programme;
description du programme;
section d'initialisation;
programme principal;
sous-programmes ou modules.

La section d'initialisation décrit et initialise toutes les constantes et les variables utilisées
dans le programme. Un rapide coup d'oeil à cette section empèche d'utiliser le même
symbole pour deux quantités différentes.
Le programme principal unit tous les sous-programmes et coordonne la suite d'exécution
de ceux-ci. Il suffit donc de regarder cette section pour voir les grandes tâches
qu'accomplira le programme.
Chaque module ou sous-programme, appelé aussi sous-routine, est un petit bloc de
programmation qui réalise une partie bien spécifique (formant toutefois un tout
indépendant) de l'ensemble logique nécessaire à la résolution du problème.
Les avantages de la programmation structurée sont:
la lisibilité;
la facilité de compréhension par autrui;
la rapidité dans la réalisation;
la rapidité à dépanner;
la facilité à modifier.

2.7.1
Pour les programmes en langage ASSEMBLEUR, débutez toujours les sous-routines en
fournissant les informations suivantes:
une brève description de la sous-routine;
un registre contenant les paramètres d'entrée;
des registres contenant les paramètres de sortie;
des registres affectés par la sous-routine.

Programmer en Assembleur page 2-9 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Si les registres affectés par la sous-routine sont déjà utilisés par le programme qui appelle
cette sous-routine, il faudra, avant d'appeler cette dernière, sauver le contenu de ces
registres sur la pile. Ainsi, lorsque l'exécution de la sous-routine sera terminée, le contenu
de ces registres pourra être récupéré avant de reprendre l'exécution du programme
principal. Cette méthode s'applique aussi avec les sous-routines du moniteur dans la
ROM. De manière générale, une sous-routine sera plus claire si ces registres sont sauvés
au tout début de celle-ci et récupérés avant de retourner au programme principal.
Sauvez votre programme souvent au fur et à mesure que votre travail avance. Si le
système a une défaillance, vous ne serez pas obligé de recommencer au complet.

2.7.2 Dépannage
êts aux endroits stratégiques afin
de trouver l'endroit où le programme cafouille. Ainsi, l'ordinateur se rendra rapidement
jusqu'au point d'arrêt puis arrêtera et attendra que vous lui donniez la permission de
continuer l'exécution du programme. Vous pourrez consulter les registres et les variables

peut aussi exécuter le programme en mode pas-à-pas et surveiller la progression des


registres et les actions sur les sorties.

2.7.3 Documentation
Pour pouvoir utiliser, corriger ou améliorer un programme, il est essentiel de bien le
documenter. Deux types de renseignements doivent être fournis:
la documentation pour l'usager;
la documentation technique.
La documentation pour l'usager doit regrouper tous les renseignements pertinents
pour utiliser le programme sans nécessairement le comprendre à fond.
La documentation technique sert à l'entretien et la mise à jour du programme. Elle
contient:
la description de la tâche;
l'algorithme;
l'ordinogramme;
une liste commentée du programme;
toute information pertinente additionnelle.

Programmer en Assembleur page 2-10 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.8
Dès que l'on commence à programmer, il est extrêmement important de comprendre les
modes d'adressage si l'on veut profiter de toute la puissance du 6809. Dans une
instruction, l'adressage spécifie l'emplacement de l'opérande avec lequel l'instruction doit
être exécutée. Cet emplacement sera dorénavant appelé l'adresse effective.

2.8.1 Mode d'adressage immédiat


Dans ce mode d'adressage, la donnée à utiliser est dans l'opérande. L'adressage immédiat
est identifié par le symbole #. L'opérande peut être de 8 bits ou de 16 bits, selon le registre
utilisé. Voici quelques exemples d'instructions de ce mode:
LDX #$6000 ; place la valeur $6000 dans le registre X
ORA #$80 ; fait un ou logique entre le reg.A et la valeur $80. Résultat dans A

2.8.2 Mode d'adressage étendu (extended)


Le mode d'adressage étendu utilise l'adresse effective de la donnée comme opérande
plutôt que la donnée elle-même. Ce mode est utilisé pour lire ou écrire une donnée dans
la mémoire ou sur une entrée/sortie. Avec l'assembleur, on peut forcer le mode étendu par
l'usage du symbole > placé en avant de l'opérande; cela évite que l'assembleur utilise le
mode direct quand il détecte la possibilité de le faire. Voici quelques exemples
d'instructions de ce mode:
LDA $6000 ; place la valeur contenu à l'adresse $6000 dans le reg. A
ANDA $00FF ; fait un et logique entre la valeur contenue à l'adresse $00FF et le
reg.A et dépose le résultat dans le reg. A
STA PORTB ; dépose le contenu du reg. A à l'adresse correspondante à
l'étiquette PORTB

2.8.3 Mode d'adressage inhérent


Ce mode d'adressage se caractérise par le fait qu'il n'utilise pas d'opérandes. Aucun appel
à une case mémoire est nécessaire pour effectuer la fonction demandée. Le CPU sait que
le traitement s'effectue directement sur le(s) registre(s). Voici quelques exemples
d'instructions de ce mode:
CLRA ; remise à zéro du reg. A
LSLB ; fait un décalage logique à gauche avec le contenu du reg.B
RTS ; exécute le retour au prog. principal pour terminer un sous-prog.
(adr. de retour --> reg. PC)
SWI ; interruption logicielle (appelle un programme d'interruption)
souvent utilisé par les prog. moniteurs comme point d'arrêt

Programmer en Assembleur page 2-11 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.8.4 Mode d'adressage direct


Le mode direct est très similaire au mode étendu. L'opérande représente aussi une
adresse, comme le mode étendu; sauf que seul l'octet le moins significatif est défini. Pour
le 6809, une adresse est composée de 2 octets; il en manque un et c'est l'octet représentant
la partie la plus significative de l'adresse. Cet octet manquant est remplacé par le registre
de page direct nommé DP. Pour former l'adresse effective, le CPU va combiner le registre
DP avec l'opérande.
LDA $02 ; si le reg. DP vaut $60, le reg. A sera chargé avec le contenu de
l'adresse effective $6002

2.8.5
L'adressage indirect permet de recueillir l'adresse effective dans le contenu de celle
spécifiée par l'opérande; on travaille donc avec l'adresse de l'adresse de la donnée. Les
modes d'adressage Étendu et Indexé peuvent utiliser l'adressage indirect. Voici quelques
instructions utilisant l'adressage indirect:
JSR [OUTCAR] ; appel du sous-prog. OUTCAR; on forme l'adresse effective de
la sous-routine par l'assemblage de l'octet lu par le CPU à
l'adresse de OUTCAR constituant la partie msb de l'adr. eff. et
le code lu à l'adresse de OUTCAR+1 constituant l'octet lsb de
l'adresse effective
LDA [$1000] ; les contenus des adresses $1000 et $1001 deviennent l'adresse
effective de la donnée à charger dans le registre A
STB[,Y] ; la valeur du reg. B est déposée à l'adresse effective; celle-ci est
formée par le contenu de deux cases mémoires consécutives
pointées par le registre d'index Y; à l'adresse du pointeur on
trouve l'octet msb de l'adr. eff. tandis qu'à l'adresse suivante on
trouve l'octet lsb de l'adr. eff.

Programmer en Assembleur page 2-12 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.8.6 Mode d'adressage indexé


Le mode indexé est utilisé principalement pour la manipulation de tableaux ou de blocs
mémoire. Avec le MC6809, on peut utiliser comme registre d'index les registres X et Y.
Notez que la dimension de ces registres est de 16 bits.

contient l'adresse effective de la donnée à traiter. Ce mode d'adressage est surtout efficace
avec des tableaux constitués d'un grand nombre de données à traiter. Voici quelques
instructions utilisant le mode indexé:
STA,X ; dépose le contenu du reg. A à l'adresse contenu dans X
LEAX 1,X ; incrémente le pointeur d'index X
LDB 5,Y ; le reg. B est chargé avec le contenu de l'adresse effective
qui est égale à la somme du reg. Y et de l'offset 5. (AE = Y+5 )
Les différents types du mode indexé:
La carte de codification du 6809 montre dans la section INDEXED ADDRESSING MODES les
iser le mode indexé comme le tableau ci-dessous:

TYPES FORME ASSEMBLEUR

Constant offset from R (offset signé) ,R n,R


Accumulator offset from R (offset signé) A,R B,R D,R
Auto increment/decrement from R ,R+ ,R++ ,-R ,--R
Constant offset from PC (offset signé) n,PCR
Extended indirect [n]
R= registre X, Y, U ou S , n= offset

Le MC6809 utilise la postincrémentation et la prédécrémentation avec le type Auto


increment/decrement from R du mode indexé. En d'autre mots, si l'instruction est
LDA, X+ , le registre X s'incrémente après le chargement de l'accumulateur A. Alors que
pour l'instruction LDA ,-X, le registre X décrémente avant le chargement de
l'accumulateur A.

Programmer en Assembleur page 2-13 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Les modes indexés non-indirect et indirect:


Dans le mode non-indirect, l'adresse effective (l'adresse où se trouve la donnée à traiter)
est simplement la valeur de l'index plus son offset.
exemple: LDA 2,X mode non-indirect
X + offset = adr. effective
(adr. eff.) --> A
Dans le mode indirect, l'adresse effective est le contenu de l'adresse pointée par l'index
plus son offset. Évidemment, il est nécessaire d'utiliser le contenu de deux adresses
consécutives pour former l'adresse effective. On reconnait le mode indirect par la
présence des crochets.
exemple: LDA [2,X] mode indirect

(adr. eff.) --> A


Utilisation du mode indexé

MODE INDEXE NON-INDIRECT INDIRECT


Constant offset Pour accéder à 1 seul item (toujours Pour accéder à 1 seul item
from R le même) d'une table de données. (toujours le même) d'une table

Accumulator Pour accéder aléatoirement au Pour accéder aléatoirement au


offset from R contenu d'une table de données.

Autoincrement/ Pour accéder séquentiellement au Pour accéder séquentiellement au


decrement from R contenu d'une table de données.

Constant offset Idem. à Constant offset from R sauf que le programme et les données
fromPC (tables) sont relocalisables.

Extended indirect non-applicable La somme de l'offset et du registre


d'index donne une adresse où l'on
trouve l'adresse effective.

Programmer en Assembleur page 2-14 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.9 Pointeur de pile


La pile est une zone de stockage située dans la mémoire RAM servant à mémoriser
temporairement des informations. La gérance de la pile est réalisée par un pointeur de
pile, celui-ci ayant pour fonction de pointer la prochaine case mémoire utilisée par la pile
durant l'exécution d'une instruction d'empilement. Dans le 6809, il existe 2 pointeurs de
pile:
U -> pointeur de pile de l'usager
S -> pointeur de pile du système

2.9.1 Instructions manipulant les piles


On peut installer une pile n'importe où dans la mémoire volatile RAM par les instruction
LDS , LDU , TFR ou EXG. Par exemple, LDS #$0080 définit une pile système à l'adresse
$0080. Cette adresse reçoit le nom de haut de pile. Dans un système de développement, la
pile S est toujours initialisée. Dès la mise sous tension, le microprocesseur est occupé à
exécuter le programme moniteur;.celui-ci n
appelle fréquemment des sous-programmes et doit obligatoirement faire usage de la pile
pour mémoriser les adresses de retour des sous-programmes.
La pile S est gérée par un ensemble d'instructions du type:
PSHS qui pousse les données dans la pile S. (ex: PSHS A,X)
PULS qui retire les données de la pile S. (ex: PULS A,X)
JSR ou BSR qui poussent la valeur du compteur de programme (PC) dans
la pile S pour sauvegarder l'adresse de retour d'une sous-routine.
RTS qui retire l'adresse de retour d'une sous-routine de la pile S.
La pile U n'est jamais utilisée par le système lors d'un appel à une sous-routine. Cette
fonction est réservée à la pile S. À part cette différence, les deux pointeurs de pile
fonctionnent de la même façon que les registres LIFO (last in first out). La donnée
poussée en dernier doit être retirée en premier.

Programmer en Assembleur page 2-15 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.9.2 Mouvement du pointeur de la pile


L'exemple démontre le mouvement du pointeur de pile S lorsque qu'un appel à une sous-
routine survient.
Programme:
ADRESSE ETIQUETTE MNEMONIQUE
1000 DEBUT BSR JOB1
1002 SWI
1003 JOB1 RTS

2.9.3 Contenu de la pile:

ADRESSE AVANT PENDANT APRES


S XX<-- S XX XX <-- S
S-1 XX 02 02
S-2 XX 10 <-- S 10
S-3 XX XX XX

2.9.4 Ordres d'empilement et de dépilement.


L'instruction PSHS et PULS permet de sauver ou de récupérer un ou plusieurs registres
dans la pile.
exemple: PSHS A,B,X,Y,U sauve les registres
PULS A,B,X,Y,U récupère les registres
Voyons maintenant l'ordre dans lequel sont placés les registres dans la pile, lorsque le
CPU exécute une instruction de type PSHS ou PULS. Le pointeur de pile se déplace vers
les adresses basses pour une instruction push et vers les adresses hautes pour un pull. Un
tableau sur la carte de codification montre les ordres d'empilement et de dépilement.
CONTENU ADRESSE CONTENU ADRESSE
PC LO S-1 X HI S-7
PC HI S-2 DP S-8
S/U LO S-3 B S-9
S/U HI S-4 A S-10
Y LO S-5 CC S-11
Y HI S-6 S-12
X LO

Programmer en Assembleur page 2-16 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.9.5 Exemple de programme utilisant la pile


-programme est effectué, la pile du système est sollicitée. Il
Dans une application autonome, le programmeur
doit lui-même initialiser le pointeur de pile avec une instruction comme:
LDS #$xxxx où xxxx est une adresse de la RAM représentant le haut de la pile.

Certains programmes utilisent la pile pour y emmagasiner temporairement une quantité


le programmeur doit prévoir une zone mémoire plus grande.

6809 Macro Assembler


------------------------------------------------
Input Filename : pile.ASM
Output Filename : pile.OBJ
1 *****************************************
2 * Programme demontrant l'initialisation
3 * et le fonctionnement de la pile S.
4 * par: Serge Leblanc (mai 1995)
5 *****************************************
6 E000 ORG $E000 etabli l'adresse du programme
7
8 2000 LED EQU $2000 adr. du dispositif de sortie
9
10 E000 10 CE 01 00 DEBUT LDS #$0100 initialise le pointeur de pile
11 E004 86 01 ENCORE LDA #$01 valeur de depart
12 E006 B7 20 00 GAUCHE STA LED ecriture port de sortie
13 E009 8D 05 BSR DELAI appel du sous-pro DELAI
14 E00B 48 LSLA decalage a gauche de la valeur
15 E00C 26 F8 BNE GAUCHE test si rotation termine
16 E00E 20 F4 BRA ENCORE oui, recommence
17 *-----------------------
18 * Sous-programme DELAI.
19 *
20 * para. d'entree : aucun
21 * para. de sortie: aucun
22 * reg. affectes : CC
23
24 E010 34 10 DELAI PSHS X sauve le registre X
25 E012 8E 30 D4 LDX #$30D4 etabli la duree du DELAI
26 E015 30 1F REPETE LEAX -1,X decremente le compteur X
27 E017 26 FC BNE REPETE test si rendu a zero
28 E019 35 10 PULS X oui, on recupere valeur de X
29 E01B 39 RTS retour au programme principal
30 *-----------------------
31 FFFE ORG $FFFE pointe le vecteur RESET
32
33 FFFE E000 DW DEBUT etabli le contenu du vect. RESET
34 *-----------------------
35 0000 END

Programmer en Assembleur page 2-17 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.9.6 Observations sur le fonctionnement de la pile


Dans le programme précédent, le pointeur de pile du système est initialisé avec la
valeur $0100 voir la ligne #10.
Lorsque le microprocesseur quitte le programme principal pour aller exécuter la sous-

retour.
La valeur de l'adresse de retour, que le microprocesseur doi
exécuter le sous-
sous-programme. Dans ce cas, cette adresse se trouve à la ligne #14 et correspond à
$E00B.
ier, l'octet le moins significatif de
l'adresse de retour du sous-

La valeur du pointeur de pile au moment où le microprocesseur commence la lecture


de la première instruction du sous-programme est $00FE. Seul le registre PC a été

La valeur du pointeur de pile, au moment où le microprocesseur commence la lecture


de la deuxième instruction du sous-programme, est $00FC. Le registre X est ajouté
PSHS X, et le pointeur de pile S est automatiquement
ajusté.
La valeur du pointeur de pile, après que le microprocesseur ait exécuté l'instruction
RTS du sous-programme, est $0100. Le pointeur est donc revenu à sa position
initiale puisque tous les registres sauvegardés dans la pile ont été retirés.
Le programme plante si on oublie de placer l'instruction PULS X avant l'instruction
e pointe la

Durant l'exécution de ce programme, la valeur la plus basse du pointeur de pile S a été


$00FC. Quatre octets ont été sauvé dans la pile, le pointeur de pile a donc descendu
de quatre adresses ($0100 - $0004 = $00FC).

Programmer en Assembleur page 2-18 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

2.10 Exercices
Exercices sur les modes d'adressage

#1-
exercice ne représentent pas un programme utilisable.
Mnémonique Mode
Opcode Opérande
CLRA
LDB #$B4
INCA
LDX #0100
LDA $1400
STA $1402
LDA ,X
DECB
ORA #%10000000
ANDB #$FE
JMP $0200

# 2 - Trouvez les codes machines de chaque instruction et écrivez une brève description de
ce que fait l'instruction dans la colonne commentaire.
Code machine Mnémonique Commentaire
Opération Opérande
CLRA
INCB
DECA
LSLA
ROLB
COMA

# 3 - Réalisez un programme qui fait un 'ET' entre le contenu de la case $0300 et la case
$0301. Le résultat doit être placé dans la case $0302. L'origine du programme est à

Mnémonique Commentaire
Opcode Opérande

Programmer en Assembleur page 2-19 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Exercices sur le mode indexé

# 4 - À quel type de mode indexé appartient l'instruction suivante?


LEAX 1,X
a) constant offset from PC
b) constant offset from R
c) extended indirect
d) accumulator offset from R
e) auto increment/decrement R

# 5 - Que vaut le registre X après l'exécution du programme ?

ORG $0200
-----------------------
BARGRAF EQU $4000
TABLEAU DB 1,2,3,4,5
*-----------------------
DEBUT LDX #TABLEAU
BSR SENDCODE
STOP BRA STOP
*-----------------------
SENDCODE LDA ,X+
CMPA #4
BEQ SEND_FIN
STA BARGRAF
BRA SENDCODE
SEN_FIN RTS
*-----------------------
END

réponse: X=_______

Programmer en Assembleur page 2-20 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

# 6 - Dans le numéro précédent, combien d'instruction(s) utilise(nt) le mode d'adressage


indexé?

réponse: __________________________

# 7 - Quelles sont les instructions qui ne sont pas valables ?


a) LDA A,U e) ORA D,U
b) STB ,X- f) ANDB -200,Y
c) STA DP,X g) CLR A,S
d) CMPA 2,X+ h) ADDD ,U++

réponse: __________________________

# 8 - Quelle sera la valeur écrite sur le bargraph ?

BARGRAF EQU $4000


ORG $0200
DEBUT LDA #$03
BSR ENVOIE
STOP BRA STOP
*-----------------------
ENVOIE LDX #TABLE
LDA A,X
STA BARGRAF
RTS
*-----------------------
TABLE DW $1234
DW $5678
DW $9ABC
*-----------------------
END

réponse: __________________________

Programmer en Assembleur page 2-21 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Questions sur la Programmation

#9-
a) _______________________
b) _______________________
c) _______________________
d) _______________________
e) _______________________
f) _______________________

# 10 -
_____________________________________________________________________
_____________________________________________________________________

# 11 - À quoi sert le symbole suivant dans un ordinogramme?

Réponse:
_________________________________________

# 12 - À quoi sert le symbole suivant dans un ordinogramme?

Réponse:
_________________________________________

# 13 -

Réponse:
_________________________________________

Programmer en Assembleur page 2-22 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

Exercices sur les pointeurs de pile

# 14 - Supposez que le registre S est initialisé avec la valeur $0080 et que l'instruction
suivante est exécutée:
PSHS A, X
a) Que vaudra le registre S après l'instruction ?

Réponse: _______________

b) À quelle adresse a été sauvegardé l'accumulateur A ?

Réponse: _______________

# 15 - Sachant qu'au départ : S = $2000 et que l'instruction est: PSHS Y, X. À quelle adresse
sera déposée la partie LSB du registre X?
Réponse: ________________

# 16 - À la fin du programme quel sera le contenu du registre D ?

au départ: S = $0080 programme: PSHS X


X = $1234 PULS B
PULS A

Réponse: __________

Programmer en Assembleur page 2-23 OFPPT/TECCART


Résumé de Théorie Introduction aux Microprocesseurs

# 17 - Dans le sous-programme suivant, identifiez:

*------------------------
* Routine de conversion ASCII-->HEXA
*
ASCHEX SUBA #$30
CMPA #9
BLS ASC1
SUBA #7
ASC1 RTS
*------------------------
a) paramètre(s) d'entrée(s) = ___________________________
b) paramètre(s) de sortie(s)= ___________________________
c) registre(s) affecté(s) = ___________________________

# 18 - Dans le sous-programme DELAI, identifiez:


*------------------------
* Routine qui produit un delai de 20 mS
* avec un crystal de 3.6864Mhz

DELAI PSHS X,CC


LDX #2301
DEL LEAX -1,X
BNE DEL
PULS X,CC
RTS
*------------------------
a) paramètre(s) d'entrée(s) = ___________________________
b) paramètre(s) de sortie(s)= ___________________________
c) registre(s) affecté(s) = ___________________________
# 19 - Combien d'octets sont retirés de la pile par l'instruction: PULS X,CC dans le sous-
programme DELAI?
Réponse: _______________

# 20 - Quel est le dernier registre retiré de la pile dans le sous-programme DELAI ?


Réponse: _______________

Programmer en Assembleur page 2-24 OFPPT/TECCART

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy