6809 Ofppt
6809 Ofppt
6809 Ofppt
RÉSUMÉ DE THÉORIE
Écrire un Programme Opérationnel en Assembleur
RÉDACTION
Serge Leblanc
RÉVISION TECHNIQUE
Pierre Asselin & Christian Lépine
RÉVISION LINGUISTIQUE
François Gaudreau
COMMISSION DE VALIDATION
Formateurs de l'OFPPT
2-2
2-3
rogramme 2-4
2.4.1 Boucle de délai 2-4
2-5
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.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
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.
2.4
e de cycles
-à-
mence avec le signe ~.
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:
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!!!
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.
- Traitement d'information.
- Renvoi de page.
Figure 2-5
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
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
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.
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
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.
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.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.
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:
Constant offset Idem. à Constant offset from R sauf que le programme et les données
fromPC (tables) sont relocalisables.
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-
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
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=_______
réponse: __________________________
réponse: __________________________
réponse: __________________________
#9-
a) _______________________
b) _______________________
c) _______________________
d) _______________________
e) _______________________
f) _______________________
# 10 -
_____________________________________________________________________
_____________________________________________________________________
Réponse:
_________________________________________
Réponse:
_________________________________________
# 13 -
Réponse:
_________________________________________
# 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: _______________
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: ________________
Réponse: __________
*------------------------
* 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) = ___________________________