Vous êtes sur la page 1sur 27
Royaume du Maroc DS REEN FB) 9 Ret O25 SES Oo F P P T OFFICE DE LA FORMATION PROFESSIONNELLE ET DE LA PROMOTION DU TRAVAIL Module 11 Introduction aux Microprocesseurs Résumé de Théorie Télécharger tous les modules de toutes les filigres de !OFPPT sur le site dédié la formation professionnelle au Maroc ‘www.marocetude.com Pour cela visiter notre site www.marocetude.com et choisissez la rubrique : MODULES ISTA Premiére Année Programme de Formation des Techniciens Spécialisés en Electronique DIRECTION DE LA RECHERCHE ET INGENIERIE DE LA FORMATION Septembre 1995, INTRODUCTION AUX MICROPROCESSEURS RESUME DE THEORIE Ecrire un Programme Opérationnel en Assembleur TECCART INTERNATIONAL 2000 inc. 3155, boul. Hochelaga, Montréal, Québec (Canada) HLW 1G4 REDACTION Serge Leblanc DESSINS ET CONCEPTION GRAPHIQUE Serge Leblane REVISION TECHNIQUE Pierre Asselin & Christian Lépine REVISION LINGUISTIQUE Francois Gaudreau COMMISSION DE VALIDATION Formatewrs de VOFPPT Les droits de reproduction et de diffusion de ce document sont cédés par Teccart International 2000 inc. a l’Office de la Formation Professionnelle et de la Promotion du Travail du Royaume du Maroc, pour sa propre utilisation au Maroc. Mis 4 part POFPPT, toute reproduction, en tout ou en partie, par quelque procédé que ce soit, est interdite. Mp_R12.Doc, imprimé 4 Montréal, le 18 avril 2017 TABLE DES MATIERES 2. ECRIRE UN PROGRAMME OPERATIONNEL EN ASSEMBLEUR 2.1 Les langages de programms 2.2 La programmation d’un microprocesseur 2.3 Jeux d’instructions du 6809 24 Durée d’exécution ’un programme 2.4.1 Boucle de délai 2.5 Les champs d°un programme en langage assembleur 2.6 Comment rédiger un programme 2.6.1 Description de la tiche 2.6.2 Algorithme 2.6.3 Ordinogramme 2.6.4 Conseils pratiques pour la réalisation dun ordinogramme 2.6.5 Exemple d'ordinogramme 2.7 Programmation strueturée 2.7.1 Conseils pratiques pour ’écriture dun programme en assembleur 2 Dépannage 2.7.3 Documentation 2.8 Modes d'adressage du 6809 2.8.1 Mode dadressage inumédiat 2.8.2 Mode dladressage étendu (extended) 2.8.3 Mode dladvessage inherent 2.8.4 Mode dladressage direct 8.5 Mode d’adressage indirect 2.8.6 Mode dladressage index 2.9 Pointeur de pile 2.9.1 Instructions manipulant les piles 2.9.2 Mouvement du pointeur de la pile 2.9.3 Contemu de la pile: 2.9.4 Ordzes d'empilement et de dépilement. 2.9.5 Exemple de programme wiilisant la pile 2.9.6 Observations sur le fonctionnement de la pile 2.10 Exercices 24 a Résumé de Théorie Introduction aux Microprocesseurs 2. Ecrire 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 microprocesseuss et est incontestablement le plus rapide a exécuter. Le langage assembleur permet d’tiliser des mnémoniques pour remplacer les codes machines difficiles a 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 Enbinire: | Hexadecimal Loader | - Le seul langage compris parle CPU 10100101 | - accept les codes MACHINE 01100000 hexadéeiman «le programme ea langage machine 01100101 | -testraduiten binaire | est appelé programme objet 01100001 | “les place en ordre dans 10000101 la mémoire «le programme Hexadecimal Loader o1100010 fait en general pare dun programme appele MONITEUR. En henadécimal: se fonctions: examiner et modifier AS Je contenu des mémoires et des regstes: il pemet execution 5 jartielle ou totale du programme “ P prog 85 2 LANGAGE upas6o | ASSEMBLEUR - le programme écrit sous forme ADCS61 | ~ accepte les mnémonique est appelé ASSEMBLEUR STA S62 snémoniques programme Source “les place généralement | -ilconticat les champs: ciquett, dans a fichier rmnémonique (instruction avec LANGAGE DE — | En BASIC: INTERPRETEUR + Innzage oricnté vers les procédures straduitetexéeute le | plutétque des inetoctions données navrxives | PRINT Allo programme ligne par | au CPU N=PEEK(96) ligne = Basic POKE98N END - prog. souree indépendant du CPU “Cc COMPILATEUR: ou de l'ordinateur. ~ Pascal ~~ traduit tout le. programme en machine Programmer en Assembleur page 2-1 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.2 La programmation d’un microprocesseur Pour commencer, définissons ce qu'est un programme. On peut dire simplement qu'un programme est une suite logique d'instructions dont lobjectif 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 Lére instruction 0101 1010 opérande_ 1011 0111 ‘opcode 2éme instruction 0000 0001 opérande 0000 0000 opérande O01 1111 opcode. 3éme instruction Figure 2-1 Programme objet (binaire) Le terme opcode signifie operational code ou code dopération. Ce code représente un ordre donné au microprocesseur. Lorsqu'une opérande est présente, elle suit toujours 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 lopérande ne soit pas requise sil s‘agit d'opération inteme du microprocesseur (mode inhérent) Comme vous le remarquez, la représentation du programme sous Ia forme binaire est difficile 4 comprenére et c’est pour cette raison qu’elle n'est pas utilisée. Pour améliorer la situation, on peut utiliser la représentation hexadécimale, Cela permet de diminuer les erreurs lors de Ventrée du programme en mémoire, parce qu’il y a moins de touches a appuyer Le méme programme sous la forme hexadécimale: code hexadéc. fonction instruction 86 ‘opcode Jere instruction 5A opérande BT ‘opcode 2Eme instruction O1 ‘opérande 00. opérande 3E opcode 3éme instruction Figure 2-2 Programme objet (hexadecimal) On peut trés vite conclure que le programme objet, méme transformé ea hexadécimal, lest pas trés commode car il est difficile, pour un humain, dinterpréter ce que fera celui- ci. Dans le but de faciliter la compréhension du programme, on va associer a 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 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs Représentation du programme en mnémonique. Pour plus de clarté, opcode et lopérande ont été réunis sur la méme ligne. Code machine | Opcode | Opérande 8 IDA #854 Jére instruction B7 0100 STA $0100 2éme instruction, 3F SWI 3éme instruction. Figure 2-3 Programme avec mnémoniques 2.3 Jeux d’instructions du 6809 La carte de codification présente l'ensemble des instructions utilisables par le 6809. La figure suivante montre comment décoder l'information sur cette carte de codification. ‘Addressing Modes iimmedial] Direct [indexed [Extended] inherent 53210 Instruction | Forms |Op|~]# |Op]~]# fOp|~|# Op] ~ | # [Op] ~|# | Description [H[N]Z[V]C LD LDA a6] 2|2|96/4 | 2 |asl4+|2+|B6] 5 | 3 Mea |-[t[t]ol- LB |e) 2 | 2 \p6|4 | 2 |e6|4+|2+|F6| 5 | 3 M>B |+|i|i/ol|+ © 1@l@l@l@/@O1@ @ Figure 2-4 Carte de codification du 6809 Chaque colonne est numéroté et comespond & ce qui suit. Col. #1 Contient les instructions possibles pour le microprocesseur. Col. #2 Détermine si I'instruction opére avec la mémoire ou avec un registre: dans ce cas avec quel registre Col. #3, 4,5,6et7 Ces 5 colonnes représentent les 5 types de base des modes dladressages du microprocesseur: Immediat_(opérande: une valeur) Direct _(opérande: une adresse de 8 bits) Indexed _(opérande: un segistre pointeur) Extended (opérande: une adresse de 16 bits) © Inherent (il n'y a pas dopérande) Chacune de ces colonnes est subdivisée en 3 autres colonnes: * Op (code dopération de linstruction) on (nombre de cycles de I'instruction) o# (nombre d'octets de l'instruction) Col. #8 Crest une explication courte de ce que fait instruction, Col. #9 Cette section (5 colonnes) indique comment les drapeaux H, N, Z, V et C vont réagir a l'exécution de linstruction, 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 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.4 Durée d’exécution d’un programme La durée d’exécution d’une instruction se calcule en tenant compte du nombre de cycles de instruction, multiplié par la période du cycle machine du microprocesseur. Dans le cas du microprocesseur 6809, la fréquence d’horloge déterminant la durée du cycle machine est égale a 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équence d’horloge (E ou Q) vaut: Fréq. de E = Fréq. du crystal /4= 1 Mhz La durée d’un cycle machine est égale & la période de lhorloge (E ou Q) et vaut: Peériode de E = 1/ Fréq. de E= 1ps Pour une instruction durant 5 cycles, le temps d’exécution est done 5 fois le temps d”un cycle machine, c’est-A-dire 5 ys. Le nombre de cycles de l'instruction se trouve dans les colonnes de la carte de codification du 6809 dont lentéte commence avec le signe ~. Boucle de délai CODE NBR. DE macune | ErigvertE | orcopE | oPERANDE| CYCLES 86.05 LDA 2 4A, ENCORE | DECA 2 26FD BNE | ENCORE 3 Dv RIS. 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. On peut voir, par analyse du programme, 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 cxystal 4 Mhz, un cycle vaut Ls et la durée du sous-programme est: durée = 32 cycles * Ins = 32 ps Programmer en Assembleur page 2-4 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.5 Les champs d’un programme en langage assembleur 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 nommeé assembleur. ADRESSE | CODE] ETIQUETTE] MNEMONIQUE, ‘COMMENTAIRES: HEXA | MACHINE Opération __Opérande ‘ORG | $0200 adeese du prow ome [as DONNEE, DB__| sas éclration dels variable DONNEE, 0200 PORTB. EQU | $6002, <éclaation defn constant PORTS, 201 [360200 | DEBUT. LDA | DONNEE | tcote donde ata placer dans lereg A ‘204 | B7 6002 STA | PORTB | déponerle coded rep A nut le port de sonia (0207 7E 201 IMP | DEBUT | leprogrmmne boucle sur side END secu Ba de programe pour asseublee ADRESSE: La progression des adresses dépend de Ia longneur en octets de l'instrnction CODE MACHINE Ce sont les codes sous la forme hexadécimale correspondant a l'instruction. On les trouve sur la carte de codification du MC6809. ETIQUETTE: Ce sont des mots représentatifS qui servent de références. Elles remplacent des adresses ou des constantes. MNEMONIQUE: Cest instruction compléte incluant lopération et lopérande. OPERATION: C’est linstruction de base. OPERANDI Cest la donnée de instruction. Elle peut représenter une valeur, une adresse ou un registre. Certaines instructions n'utilisent pas Wopérande. 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 lve Conseils pratiques - Eviter de répéter lnstruction textuellement, Niutiliser que des commentaires pertinents a 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 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.6 Comment rédiger un programme 2.6.1 2.6.2 2.6.3 La rédaction d'un programme se divise en 6 étapes, toutes aussi importantes les unes que les autres description de la tache; rédaction d'un algorithme; rédaction d'un ordinogramme; rédaction du programme; dgpannage: documentation. Description de la tache Crest 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 tache est au programme ce que la liste des spécifications est pour un appareil électronique quelconque. Pour le programmeur, une bonne description de la tache évitera Yennui de devoir recommencer plusieurs fois la rédaction de Valgorithme, de V’ordinogramme et du programme parce qu'on a oublié de considérer certaines options. Pour l'utilisateur, une bonne description de Ja téche permettra de mieux exploiter le programme, tout en étant conscient de ces limites. Algorithme Lialgorithme 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 tache. Les différentes tapes sont ordonnées de fagon séquentielle, c'est-i-dire comment elles se déroulent dans le temps, Ordinogramme Un ordinogramme est une représentation graphique des étapes suivies par un programme. Cette fagon diillustrer la séquence logique des opérations a trois avantages: - faclite le codage ou I'écriture du programme; - facilite la compréhension du programme; - est utile pour le dépannage du programme. Aprés le tracé de Vordinogramme, 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 detail Programmer en Assembleur page 2-6 OFPPTITECCART Résumé de Théorie ou ALU 2oQOU 0 Figure 2-5 Programmer en Assembleur Introduction aux Microprocesseurs - Début ou fin dun prog, ou d'un sous-prog. Début: contient le nom du prog. ou du sous-prog. Fin: contient le mot FEN pour un prog. et le mot RETOUR pour un sous-progra ‘Traitement ‘information. Opération de test pour prendre une décision. Serta faire ua branchement conditionnel. + Opération d'entrée/sortie comme lie, afficher, éerire Renvoi. Utilisé pour diminver le nombre de fléches ou éviter quelles se ~ Renvoi de page. Sous-programme. Contient le nom du sous-programme. appelé aussi - Utilise pour éerire les remarques explicatives ou commentaires Fléche de direction du cheminement de l'information dans Vordinogramme. page 2-7 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.6.4 Conseils pratiques pour la réalisation d’un ordinogramme + Ne jamais croiser les Hléches. + Utiliser les renvois pour réduire le nombre de fléches, sil y en a trop, et pour éviter quelles se croisent. + Autant que possible, donner a Yordinogramme une structure lingaire, de haut en bas. + Utiliser un gabarit ou un logiciel d'édition graphique. + Utiliser des noms courts et représentatifs des variables quills symbolisent. + Lordinogramme doit représenter une solution générale, indépendante du langage et de Vordinateur utilisé + Verifier la logique de l'ordinogramme en essayant quelques valeurs numériques avant de rédiger le programme. 2.6.5 Exemple d’ordinogramme La figure suivante représente Vordinogramme d'un jeux de lumiére nommé CHENILLARD. On y trouve deux parties: une pour le programme principal, autre pour le sous-programme DELAL La variable CODE est une valeur a § bits et représente le code transmis sur les Led tandis que la variable VALUE est une variable a 16 bits et détermine la durée du délai (@ren80) (can) (aoc ose 4 me Lot —auttert de 0>> > + aecalege & gauche do ‘CODE Figure 2.6 Programmer en Assembleur page 2-8 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.7.1 Progr 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 A solutionner, au début dapparence trés complexe, est remplacé par plusieurs petits problémes beaucoup plus simples A 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-programunes uu inodules. 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 empache 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. Tl suffit done de regarder cette section pour voir les grandes tiches quaccomplira le programme. Chaque module ou sous-programme, appelé aussi sons-routine, est un petit bloc de programmation qui réalise une partie bien spécifique (formant toutefois un tout indépendant) de lensemble logique nécessaire a la résolution du probléme. Les avantages de la programmation structurée sont «la lisibilité; « Ia facilité de compréhension par autrui: + la rapidité dans la réalisation; + Ia rapidité & dépanner; + Ia facilité & modifier. Conseils pratiques pour P’écriture d’un programme en assembleu: 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 paramatres d'entré « des registres contenant les paramiétres de sortie: + des registres affectés par la sons-routine. ammer en Assembleur page 2-9 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.7.2 2.7.3 Si les registres affectés par la sous-routine sont dgja utilisés par le programme qui appelle cette sous-routine, il faudra, avant d'appeler cette demiére, sauver le contenu de ces registres sur la pile. Ainsi, lorsque l'exécution de la sous-routine sera terminée, le conten de ces registres pourra étre récupéré avant de reprendre lexé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 4 mesure que votre travail avance. Si le systéme a une défaillance, vous ne serez pas obligé de recommencer au complet. Dépannage Pour dépanner vos programmes, utilisez des points d’arréts aux endroits stratégiques afin de trouver lendroit od le programme cafouille. Ainsi, ordinateur se rendra rapidement jusqu'au point d'arét puis arrétera et attendra que vous lui donniez la permission de continuer I'exécution du programme. Vous pourrez consulter les registres et les variables du programme afin de déceler lintermittance (BUG) avant de continuer l'exécution. On peut aussi exécuter le programme en mode pas-A-pas et surveiller la progression des registres et les actions sur les sorties Documentation Pour pouvoir utiliser, coriger 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 lusager doit regrouper tous les renseignements pertinents, our utiliser le programme sans nécessairement le comprendre a fond. La documentation technique sert & lentretien et la mise & jour du programme. Elle contient: « la description de la tache: + Salgorithme; + Vordinogramme; + une liste commentée du programme: + tonte information pertinente additionnelle. Programmer en Assembleur page 2-10 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.8 Modes d’adressage du 6809 Dés que Ion commence & programmer, il est extrémement important de comprendre les modes d'adressage si Yon veut profiter de toute la puissance du 6809. Dans une instruction, l'adressage spécifie lemplacement de l'opérande avec lequel Instruction doit étre exécutée. Cet emplacement sera dorénavant appelé I'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 #36000 _; 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 Vadresse effective de la donnée comme opérande plutot 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 lassembleur, on peut forcer le mode étendu par Tusage du symbole > placé en avant de lopérande; cela évite que l'assembleur utilise le mode direct quand il détecte la possibilité de le faire. Voici quelques exemples dinstructions de ce mode: LDA $6000 5 place la valeur contenu a I'adresse $6000 dans le reg. A ANDA SOOFF ; fait un et logique entre la valeur contenue 4 I'adresse SOOFF et le reg. et dépose le résultat dans le reg. A STAPORTB —; dépose le conte du reg. A a I'adresse correspondante & Vétiquette PORTB 2.8.3 Mode d'adressage inhérent Ce mode dadressage se caractérise par le fait qu'il n'utilise pas d'opérandes. Aucun appel a 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 dinstructions de ce mode: CLRA } femise & zéro du reg. A LSLB ; fait un décalage logique a 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) sw ; interruption logicielle (appelle un programme d'interruption) souvent utilisé par les prog. moniteurs comme point d'arrét Programmer en Assembleur page 2-11 OFPPTITECCART 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. Liopérande représente aussi une adresse, comme le mode étendu; sauf que seul loctet le moins significatif est defini. 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 'adresse. Cet octet manquant est remplacé par le registre de page direct nommé DP. Pour former ladresse effective, le CPU va combiner le registre DP avec lopérande. LDA S02 ; si le reg. DP vaut S60, le reg. A sera chargé avec le contenu de adresse effective $6002 2.8.5 Mode d’adressage indirect Liadressage indirect permet de recueillir Vadresse effective dans le contenu de celle spécifige par Vopécande; on travaille done avec adresse de l'adresse de In donnée. Les modes d'adressage Etendu et Indexé peuvent utiliser l'adressage indirect. Voici quelques instructions utilisant l'adressage indirect: ISR [OUTCAR] ; appel du sous-prog. OUTCAR; on forme I'adresse effective de Ja sous-routine par l'assemblage de l'octet Iu par le CPU A adresse de OUTCAR constituant la partie msb de lade. eff. et le code lu & ladresse de OUTCAR*1 constituant loctet Isb de Vadresse effective LDA [S1000] _;_ les contenus des adresses $1000 et $1001 deviennent ladresse eflective de la donnée & charger dans le registre A STBLY] ; la valeur du reg. B est déposée a ladresse effective; celle-ci est formée par le contenu de deux cases mémoires consécutives pointées par le registre d'index Y; & adresse du pointeur on trouve octet msb de 'adr. eff. tandis qu’a Vadresse suivante on trouve loctet Isb de adr. eff. Programmer en Assembleur page 2-12 OFPPTITECCART 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. Le mode indexé se sert d’un pointer (généralement X et Y, possiblement U.S et PC) qui 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é: STAX ; dépose le contenu du reg. A a l'adresse contenu dans X LEAX LX ; inerémente le pointeur d'index X LDB5,Y 5 le reg. B est chargé avec le contemu de l'adresse effective qui est égale a la somme du reg. Y et de lofiset 5. (AE= Y+5 ) Les differents types du mode indexé: La carte de codification du 6809 montre dans la section INDEXED ADDRESSING MODES les différentes fagons dutiliser le mode indexé comme le tableau ci-dessous: TYPES ‘FORME ASSEMBLECR ‘Constant offset fom R (offset signd) R ak ‘Accumulator offset from R (offset signé) | AR BR DR ‘Auto increment/decrement from R Re Re oR R ‘Constant offset from PC (offset signé) BPCR Extended indirect Lal Re registre NY, UouS, n= offet 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 linstruction est LDA, X+, le registre X s‘incrémente aprés le chargement de l'accumulateur A. Alors que pour Tinstruction LDA ,-X, le registre X décrémente avant le chargement de Faccumulateur A. Programmer en Assembleur page 2-13 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs Les modes indexés non-indirect et indirect: Dans le mode non-indirect, 'adresse effective (I'adresse ott se trouve la donnée & traiter) est simplement la valeur de lindex plus son offset, mode non-indirect exemple: LDA 2, X + offset = adr. effective (adr. eff.) --> A Dans le mode indirect, adresse effective est le contenu de l'adresse pointée par l'index plus son offset. Evidemment, il est nécessaire dlutiliser 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 (X + offfet) = MSB de I’adr. effective. (X + offset + 1) = LSB de adr. effective (adr. eff.) > A Utilisation du mode indexé ‘MODE INDEXE NON-INDIRECT INDIRECT Coustant offset | Pour accéder 4 1 seul item (ioujours | Pour accéder 41 seal tent from R Je méme) d'une table de données. | (toujours le méme) dune table adresses ‘Accumulator _ | Pour accéder algatoirement au Pour accéder algatolrement au offset fromR | contenu dune table de données. contenu d'une table d’adressess. ‘Autoincrement? | Pour accéder sequentiellement au | Pour acoéder séquentiellement au decrement from R | conten é'une table de données. contenu d'une table d'adressess, Constant offset | Idem, & Constant offset fom R sauf que le programm et les dountes, fromPC (tables) sont relocalisables. Extended indirect ‘aon applicable TLa some de Vofiset et du registre diindex donne une adresse oii !on twouve ladresse effective. Programmer en Assembleur page 2-14 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.9 Pointeur de pile La pile est une zone de stockage situge 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 I'exécution d'une instruction d'empilement. Dans le 6809, il existe 2 pointeurs de pile: U > pointeur de pile de lusager S > pointeur de pile du systéme 2.9.1 Instructions manipulant les piles On peut installer une pile n'importe ot dans a mémoire volatile RAM par les instruction LDS , LDU , TER ou EXG. Par exemple, LDS #80080 définit une pile systéme 4 l'adresse $0080. Cette adresse regoit 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écessite une pile fonctionnelle parce qwil 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 dinstructions 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. © RIS quiretize ladresse 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 4 une sous-routine. Cette fonction est réservée a la pile S. A part cette différence, les deux pointeurs de pile fonctionnent de la méme facon que les registres LIFO (last in first out). La donnée poussée en demier doit étre retirée en premier. Programmer en Assembleur page 2-15 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.9.2. Mouvement du pointeur de Ia pile Lexemple démontre le mouvement du pointeur de pile $ lorsque qu'ua appel & une sous- routine survient. Programme: ADRESSE ETIQUETTE MNEMONIQUE 1000 DEBUT BSR JOBI 1002 SW 1003 JOBI RTS 2.9.3, Contenu de la pile: On voit ici le contenu de la pile avant l’appel de la sous routine, pendant la sous routine et aprés l’appel de la sous routine. ADRESSE AVANT PENDANT APRES s XX<-S XX Sl XX $2 XX 10 S3 xx 35C 2.9.4 Ordres d'empilement et de depilement. Linstruction PSHS et PULS permet de sauver ou de récupérer un ou plusieurs registres dans la pile. exemple: PSHS A.B.X.YU_ sauve les registres PULS AB.X,Y.U_récupére les registres Voyons maintenant lordre 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 PCLO S1 XHI $7 PCHI $2 DP S38 SuLO 83 B S-9 S/UHI S-4 A S-10 YLO 5-5 cc S-l1 YHI S-6 S12 XLO. Programmer en Assembleur page 2-16 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.9.5 Exemple de programme utilisant la pile Aussit6t qu’un appel a un sous-programme est effectué, la pile du systéme est sollicitée. TL faut done qu'elle soit déja initialisée. Dans une application autonome, le programmeur doit Iui-méme initialiser le pointeur de pile avec une instruction comme: LDS #Sxxxx ois XX est une adresse de la RAM représentant le haut de la pile Geénéralement, une centaine doctets sont nécessaires pour la dimension de Ia pile. Certains programmes utilisent la pile pour y emmagasiner temporairement une quantité importante d’informations; le programmeur doit prévoir une zone mémoire plus grande, Lexemple démontre initialisation du pointeur de pile dans un programme autonome. 6809 Macro Assembler Input Filename ; pile. ASM Ontput Fileasme : pile.OBJ 1 Sebeeeeseendeneeneteeenennenanneeeesente 2 * Programme demoutrant [initialisation 3 et le fonctionnement de la pile S. 4 * par: Serge Leblanc (mai 1995) 6 E000 ORG S000 ctabli Vadresse du programme 8 2000 LED EQU 2000 ade. du dispositif de sortie 9 10 E000 10CEQ100 DEBUT LDS #80100 Initialise le pointeur de pile 11 E004 8601 ENCORE LDA. #501 valeur de depart 12 E006 B72000 GAUCHE STA LED eeriture port de sortie 13, E009 sD os BSR DELAL appel du sous-pro DELAT 14 EO0B 48 ISLA decalage a gauche de la valeur 1S. E0OC 26 FS BNE GAUCHE test si rotation termine 16 EOE 20F4 BRA ENCORE oui, recommence W7 « = 1s * Sous-programme DELAI. 19 . 20 * para entree : aucun aa * para. de sortie: aucua 2 reg. affectes CC 23 24 E010 3410 DELAT PSHS OX sauve le registre X 25 E012 SE 30D4 LDx #S30D4 tabi la duree du DELAT 26 E015 301F REPETE LEAX +L. decremente le compteur X 27 EOI7 26FC BNE REPETE testi rendua zero 28 E019 3510 PULS =X oui, on recupere valeur de X 29 EOIB 39 retour au programme principal 30 31 FFFE ORG SEFFE pointe le veeteur RESET 32 33 FFFE F000 pw DEBUT _etabli le contenu du vect. RESET 34 * = 35 0000 END Programmer en Assembleur page 2-17 OFPPTITECCART 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- routine DELAL le registre PC est automatiquement sauvé pour conserver I’adresse de retour. La valeur de ladresse de retour, que le microprocesseur doit sauvegarder lorsqu'il va exécuter le sous-programme DELAI, est adresse de Pinstruction qui suit ’appel du sous-programme. Dans ce cas, cette adresse se trouve a la ligne #14 et correspond & SEOOB. Selon ordre d’empilement établit par le manufacturier, octet le moins significatif de Yadresse de retour du sous-programme a été sauvé dans 1a pile 4 l'adresse SOOFF et Yoctet le plus significatif a l’adresse SOOFE. La valeur du pointer de pile au moment of le microprocesseur commence la lecture de la premigre instruction du sous-programme est SOOFE. Seul le registre PC a été sauvegardé jusqu’a maintenant, La valeur du pointeur de pile, au moment oi le mictoprocesseur commence la lecture de la deuxiéme instruction du sous-programme, est SOOFC. Le registre X est ajouté dans la pile par Pinstruction 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é instruction RTS du sous-programme, est $0100. Le pointeur est done revenu a sa position initiale puisque tous les registres sauvegardés dans la pile ont été retirés. Le programme plante si on oublie de placer Instruction PULS X avant I'instruction RTS. Au moment oii I’on croit reprendre la valeur du PC, le pointeur de pile pointe la valeur sauvegardée pour le registre X et cest cette valeur qui sera retounée au PC Durant lexécution de ce programme, la valeur la plus basse du pointeur de pile S a été SOOFC. Quatre octets ont été sauvé dans la pile, le pointeur de pile a done descendu de quatre adresses ($0100 - $0004 — $00FC). Programmer en Assembleur page 2-18 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs 2.10 Exercices Exercices sur les modes d'adressage #1- Trouver le mode d’adressage utilisé ponr chaque instruction. Les instructions de cet exercice ne représentent pas un programme wtlisable, Mnémonique Mode Opeode __Opérande CLRA. LDB #SB4 INCA LDX #0100 TDA $1400 STA $1402 LDA x DECB ORA #%10000000 ANDB #SFE IMP. $0200, #2- Trouvez les codes machines de chaque instruction et écrivez une bréve description de ce que fait Vinstruction dans la colonne commentaire. Code machine Mnémonique ‘Commentaire Opération Opérande LRA, INCE DECA ISLA. 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. Llorigine du programme est & Tradresse $0200. L’arrét du programme s’effectue par un retour au moniteur. ‘Mnémonique Commentaire Opcode Opérande Programmer en Assembleur page 2-19 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs Exercices sur le mode indexé #4- A quel type de mode indexé appartient l'instruction suivante? LEAX 1X a) constant offset from PC b) constant offset from R ©) extended indirect 4) accumulator offset from R e) auto increment/decrement R #5~ Que vaut le registre X aprés lexécution du programme ? 0200 BARGRAF 4000 TABLEAU 12345 DEBUT LDX —#TABLEAU BSR SENDCODE STOP BRA STOP SENDCODE LDA x CMPA #4 BEQ SEND FIN STA BARGRAF BRA SENDCODE Programmer en Assembleur page 2-20 OFPPTITECCART 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 AU b) STB .X- )STA DPX d) CMPA 2,.X+ réponse: e)ORA DU f) ANDB -200,Y g)CLR AS h) ADDD ,U++ #8~ Quelle sera la valeur écrite sur le bargraph ? BARGRAF EQU ORG DEBUT LDA BSR. STOP BRA ENVOIE LDX LDA STA RTS. TABLE pw Dw Dw END réponse: Programmer en Assembleur 4000 0200 #803 ENVOIE STOP #TABLE AX BARGRAF si234 page 2-21 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs Questions sur Ia Programmation #9~ Quelles sont les six étapes nécessaire pour la réalisation d’un programme? a) b) °) 4) °) f) #10- Quelle est la définition d’un algorithme? #11- A quoi sert le symbole suivant dans un ordinogramme? Réponse: é Réponse: #13~ Quelle est l'utilité de ce symbole dans un ordinogramme? Cc Réponse Programmer en Assembleur page 2-22 OFPPTITECCART 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 T'instruction suivante est exécutée: PSHS A,X a) Que vaudra le registre S aprés l'instruction ? Réponse b) A quelle adresse a été sauvegardé l'accumulateur A ? Réponse: #15- Sachant qu'au départ : $ = $2000 et que Vinstruction est: PSHS Y, X. A quelle adresse sera déposée la partie LSB du registre X? Réponse: #16- A la fin du programme quel sera le contenu du registre D ? audépart: $=S0080 programme: PSHS X X= $1234 PULSB PULS A Réponse: Programmer en Assembleur page 2-23 OFPPTITECCART Résumé de Théorie Introduction aux Microprocesseurs #17- Dans le sous-programme suivant, identifiez: * Routine de conversion ASCII->HEXA. ASCHEX — SUBA #830 MPA 49 BLS ASCL SUBA #7 ASCI RIS a) paramétre(s) dlentrée(s) = b) paramétre(s) de sortie(s)= ¢) registre(s) affecté(s) = #18~ Dans le sous-programme DELAI, identifiez: * Routine qui produit un delai de 20 mS * avec un crystal de 3.6864Mbz DELAL PSHS XC IDX DEL LEAX AX. BNE DEL PULS —-X.CC RTS a) paramétre(s) dlentrée(s) = b) parametre(s) de sortie(s)= ©) registre(s) affecté(s) #19- Combien d'octets sont retirés de la pile par instruction: PULS X/CC dans le sous- programme DELAI? Réponse: #20- Quel est le demier registre retiré de la pile dans le sous-programme DELAI ? Réponse: Programmer en Assembleur page 2-24 OFPPTITECCART

Vous aimerez peut-être aussi