COURS ASSEMBLEUR 6809 E THOMSON - TO8 - TO8D - TO9 - TO9+ Pour ces cours il vou
COURS ASSEMBLEUR 6809 E THOMSON - TO8 - TO8D - TO9 - TO9+ Pour ces cours il vous faudra ============================= - Le programme: ASS6809.CHG vers 2.0 Programme pour créer vos fichiers sources et, les assembler. AVANT PROPOS Ce cours est destiné à expliquer la programmation du MICROPROCESSEUR 6809 E en ASSEMBLEUR. Je vous conseille à tous les livres suivants: - MANUEL TECHNIQUE des TO8, TO9, et TO9+ par Jean-Claude MARIACCIA et Olivier SAVIN (disponibles en quelques exemplaires dans la brocante de PILOUX). Ce livre présente entre autres toutes les routine de l'extramoniteur et du moniteur de ces machines (comportant des fiches présentant le point d'entrée,les registres d'entrée, de retour, ainsi que des exemples). - LE MICROPROCESSEUR 6809 SES PERIPHERIQUES ET LE PROCESSEUR GRAPHIQUE 9365-66, par Claude DARDANNE. (Modes d'adressage, instructions, codes,interruptions, ...) bref, une vraie mine ! . Je vous souhaite un bon apprentissage,et si vous avez des questions ou des remarques concernant des fautes qui on pu être commises, laissez-moi un message dans ma BAL: MACGYVER ( sur SERVEUR 87 ou PARIS-THOMS). Bon courage. . NB: Sauf demande expresse de votre part,je ne traiterais pas les instructions du microprocesseur et les multiples cas possibles qu'elles offrent en combinaison avec les différentes modes d'adressage. Pour avoir des précisions sur les instructions et tout ce qui concerne le 6809 E, consultez le livre "LE MICROPRO- CESSEUR 6809 E, ...", cité plus haut. INTRODUCTION ************ Le langage BASIC ne peut être exécuté en dehors du programme appelé "INTERPRETEUR". C'est-à-dire que chaque instruction du basic est traduite en langage machine et exécutée une par une au fur et à mesure du déroulement du programme. Le langage ASSEMBLEUR, lui, ne permet pas d'exécuter le programme directement: Il faut d'abord l'assembler, c'est-à- dire le traduire entièrement en langage machine, directement exécutable par le processeur. L'assemblage prend du temps, mais l'exécution du programme une fois assemblé est très rapide. Les programmes machine, donc ASSEMBLEUR ( c'est le même programme, mais sous une autre forme), utilisant les instructions du microprocesseur pour réaliser leurs traitements. Généralement, pour réaliser une action comme afficher un caractère, trace run trait, on appelle une routine (sous programme) implanté dans la mémoire de l'ordinateur. Les données nécessaires à l'exécution de ces sous-programmes sont REGISTRES. La routine, lors de son appel, lit donc les registres contenant les valeurs constituant les paramètres d'entrée. A l'issue de la routine, on récupère, s'il y a lieu, les valeurs dans des registres fixes ou a préciser(Ex:chaînes de caratères), constituant les paramètres de retour.(Ex:La routine PUTC affiche un caractère dont le code ASCII a été placé dans l'accu B du 6809. Conventions d'écriture: ----------------------- Une valeur en hexadécimal sera précédée du signe "$". Une valeur en décimal ne sera précédée d'aucun signe spécial. LES REGISTRES du 6809 E ======================= Le 6809 E possède plusieurs registres utilisés pour la manipulation et le traitement des données. Ils sont: -2 accus 8 bits (A et B) transformables en 1 accu 16 bits, D. Ils sont utilisés pour les instructions arithmétiques et de chargement de données 8 bits (ou 16 bits) en mémoire. -2 registres d'index X et Y, sur 16 bits. Ils sont généralement utilisés pour contenir des adresses de données en mémoire. -2 registres pointeurs de pile U et S.U est utilisé uniquement par le programmeur, S par le système. La pile est un emplacement ou le microprocesseur sauvegarde le contenu de ses registres internes pendant un certain temps. Elle fonctionne comme une pile d'assiettes, ou un fichier séquentiel: pour obtenir le contenu d'un registre, il faut dépiler tous les précédentes. Mais rassurez-vous cette tâche est entiérement (ou presque) gérée par le 6809 E dans des instructions spéciales. -un compteur programme PC ( Program Counter), sur 16 bits, pointant toujours sur l'adresse que le microprocesseur doit exécuter. -1 registre "codes conditions", affichant en permanence l'état de ces bits. Il fera l'objet d'un paragraphe spécial traitant également les instructions de branchement. -1 registre de "page mémoire" , sur 8 bits, indiquant la page de mémoire active, et configurable par l'utilisateur. LES MODES D'ADRESSAGE ===================== Le 6809, possÞde 59 instructions " de base". Cela peut paraître faible, mais combinées aux différents modes d'adressage (un peu comme différentes façons de faire comprendre une instruction au microprocesseur), elles offrent 1464 possibilitées. Structure d'une instruction: Elle comporte de un à 4 octets. Généralement, le premier octet indique l'action à effectuer, les suivants précisent les opérandes ou sur quelques registres cette action agira. L'adressage inhérent, ou implicite: C'est le plus simple, car les opérandes sont généralement incluses dans le code opératoire(donc un octet). Ex: INCA, incrémentation de 1 de l'accu A. ABX, addition de l'accu B au registre X. TFR A,B transfert le contenu de A dans B. Dans ce dernier cas, un post-octet (situé après le code opératoire) précise quelles sont les opérations de l'instruction. 5 Dans cet exemple, les opérandes sont A et B). Ce mode de l'adressage inhérent est est utilisé aussi dans les instructions d'accès aux piles, pour préciser quels sont les registres à dépiler/empiler. L'adressage immédiat: ===================== Dans ce mode, l'opérande que l'instruction doit prendre en compte est située après le code opératoire. Ex: LDA #$DF Chargement de A avec la valeur hexadécimal DF.( le symbole "$" précise que la donnée est en hexadécimal. Pour les instructions LDa (a: accu quelconque),la valeur a charger dans l'accu doit être du même type que cet accu (8 bits pour A,B et 16 bits pour X,Y,U,S,D). Les instructions de stockage en mémoire ( STa, a: accu du microprocesseur) n'existent pas en adressage immédiat, car ces instructions n'agissent que sur la mémoire. Ce mode d'adressage est utilisé pour configurer des registres (microprocesseur ou RAM) en vue de l'appel ultérieur d'une routine de l'ordinateur ou bien d'un sous-programme. L'appel de cette routine se fera par: JSR ADRESSE, ADRESSE étant le début du sous-programme (=point d'entrée). JSR (Jump to SubRoutine) est à l'assembleur ce que GOSUB est au BASIC. Un retour de sous-programme se fera par un RTS(Return of SubRoutine). RTS est l'équivalent de RETURN sous BASIC. L'adressage direct: =================== Ce mode d'adressage permet de travailler sur la mémoire. L'opérande d'une instruction en adressage direct ne sera constituée que d'un seul octet registre mémoire sur lequel il faut agir. Explications...: On notera que l'adresssage direct sera spécifié par le signe "<" placé devant l'opérande, dans la syntaxe assembleur. Ex: Si le registre de page vaut $A1: l'instruction STA <$45 stockera le contenu de l'accu A en $A145. et de l'opérande (poids faibles, $45). Ce mode présente l'avantage d'être exécuté rapidement, mais ne peut être utilisé que lorsqu'on ne travaille pas sur des zones de mémoire trop importantes (256 octets). Une toute autre façon de concevoir cet affichage, le tout étant d'arriver au résultat escompté. Nous commencerons par décider de l'endroit de la mémoire vive de notre programme en langage machine sera logé; en utilisant la directive ORG. . Avec ORG $8000, on va décider de l'implanter à partir de cette adresse dans la partie utilisateur non commutable de la RAM (voir page 189 guide du TO8). L'assembleur va alors, automatiquement, se charger de ranger séquentiellement le code de chacune des instructions ou données de votre programme à partir de l'adresse $8000. Notre programme commence donc ainsi: *affichage d'un caractère graphique mode 320X200 16 couleurs ORG $8000 PSHS U,Y,X,DP,B,A *communication mode TO7/70 LDA #$00 STA $E7DC Les lignes précédées d'un * sont des commentaires non pris en compte lors de l'assemblage. On a commencé par sauvegarder dans la pile système S, le contenu des registres U,Y,X,DP,B,A ;c'est une sage précaution à prendre ! Puis le programme choisit le mode TO7/70 en mettant la valeur 0 dans le registre &HE7DC. *mémorisation adresse 1er octet de l'écran. LDX #$4000 *calcul adresse de l'octet situé ligne L (coordonnée caractère) *et colonne C(en coordonnée caractère) donné par formule *adr=$4000+C+(L*8*($28)) avec 0<=L<=24 et 0<=C<=39 LDB COORL *calcul valeur d'octet pour ligne du dessous LDA COORL LDB #$08 MUL LDA #$28 MUL LEAX D,X Cette partie du programme mérite quelques explications. Le guide du TO8 nous informe page 189 que la mémoire vidéo s'étend de l'adresse &H4000 jusqu'à &H5FFF; cela nous intéresse. On va donc ranger dans le registre X de 16 bits la valeur de l'adresse mémoire du premier segment d'écran en haut à gauche. Mais ce qu'il faut connaître c'est l'adresse mémoire vidéo qui correspond à un segment quelconque situé colonne Cligne L. La formule de calcul est fournie en commentaire dans le programme. On peut la vérifier car si &H4000+1+(0*&H28)=&H4001. L'écran contenant 40 segments de 8 points (40=&H28). Les instructions du programme ont pour but de calculer la formule arithmétique explicitée. Pour cela on range dans le registre 8bits B la valeur du numéro de colonne (désigné par COORC) le logo va commencer à s'afficher, on additionne cette valeur à celle contenue dans X qui est une valeur du premier octet et on laisse le résultat dans X. Puis on met dans le deuxième registre 8 bits A, la valeur (COORL) du numéro de ligne (en coordonnée caractère) va s'afficher le logo. uploads/S4/ cours-assembleur-6809-e.pdf
Documents similaires










-
32
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 17, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.1968MB