info:prog:ass6800

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
info:prog:ass6800 [2024/10/31 10:08] – [3.2 Un premier programme étape par étape] philinfo:prog:ass6800 [2024/11/14 15:19] (Version actuelle) phil
Ligne 2: Ligne 2:
  
 ===== Programmer en assembleur 6800 - 6811 ===== ===== Programmer en assembleur 6800 - 6811 =====
-[Mise à jour le : 31/10/2024]+[Mise à jour le : 14/11/2024]
  
   * **Ressources**   * **Ressources**
Ligne 9: Ligne 9:
     * **A télécharger** si travail maison     * **A télécharger** si travail maison
       * Logiciel : <html><a href="https://webge.fr/doc/logiciels/6800IDE.zip" target="_blank">simulateur SDK6800/6811</a></html>       * Logiciel : <html><a href="https://webge.fr/doc/logiciels/6800IDE.zip" target="_blank">simulateur SDK6800/6811</a></html>
-      * <html><a href="#" target="_blank">Document réponse</a></html> du TP+      * <html><a href="https://webge.direct.quickconnect.to:5001/ns/sharing/Ds7zI" target="_blank">Document réponse</a></html> du TP
  
-<callout type="default" title="Mots-clés">Adresse, donnée, instruction machine, mnémonique, opcode, opérande, directive d’assemblage, mode d’adressage, assembleur, variable, constante, opération symbolique.</callout>+<callout type="default" title="Mots-clés" icon="fa fa-wrench">Adresse, donnée, instruction machine, mnémonique, opcode, opérande, directive d’assemblage, mode d’adressage, assembleur, variable, constante, opération symbolique.</callout>
  
 \\ \\
Ligne 28: Ligne 28:
   * **Registre pointeur de pile** \\ Lorsqu'une fonction est appelée, le <html><a href="https://thecodest.co/fr/dictionnaire/pointeur-de-pile/" target="_blank">pointeur de pile</a></html> est utilisé pour allouer de l'espace sur la pile pour les variables locales de la fonction et pour stocker l'adresse de retour.   * **Registre pointeur de pile** \\ Lorsqu'une fonction est appelée, le <html><a href="https://thecodest.co/fr/dictionnaire/pointeur-de-pile/" target="_blank">pointeur de pile</a></html> est utilisé pour allouer de l'espace sur la pile pour les variables locales de la fonction et pour stocker l'adresse de retour.
 {{ :info:prog:flagregister.png?nolink|}} {{ :info:prog:flagregister.png?nolink|}}
-  * **Le registre d'état ** \\ Le registre d'état, ou registre de drapeaux (flags register), est un ensemble de bits représentant des drapeaux (flags) au sein d'un processeur. Le MC6800 possède six drapeaux.+  * **Le registre d'état ** \\ Le registre d'état, ou registre de drapeaux (flags register), est un ensemble de bits représentant des drapeaux (flags) au sein d'un processeur. Ils sont utilisés par les instructions de rupture de séquence telles que : jmp, bra, beq, bne, bcc, bcs, etc. \\ Le MC6800 possède six drapeaux.
     * **N** : passe à 1 lorsque le résultat d'une opération est négatif.     * **N** : passe à 1 lorsque le résultat d'une opération est négatif.
     * **Z** : passe à 1 lorsque le résultat d'une opération est nul.     * **Z** : passe à 1 lorsque le résultat d'une opération est nul.
Ligne 34: Ligne 34:
     * **C** : passe à 1 lorsque le résultat d'une opération est > 255.     * **C** : passe à 1 lorsque le résultat d'une opération est > 255.
     * **H** : donne l'état de la retenue lors d'une opération entre le bit3 et le bit4.     * **H** : donne l'état de la retenue lors d'une opération entre le bit3 et le bit4.
-    * **I** : autorise une interruption IRQ lorsqu'il est à 0.+    * **I** : autorise une interruption IRQ lorsqu'il est à 0. 
 \\ \\
  
Ligne 55: Ligne 55:
 {{ :info:prog:ligne_de_code_assembleur.png?nolink&350 |}} {{ :info:prog:ligne_de_code_assembleur.png?nolink&350 |}}
 {{ :info:prog:exassemb6800.png?nolink|Exemple}} {{ :info:prog:exassemb6800.png?nolink|Exemple}}
-  * Le champ **Étiquette** ou **Label** est utilisé pour définir un symbole. Pour ignorer ce champ, on introduit au moins un espace ou une tabulation. \\+  * Le champ **Étiquette**(**Label**est utilisé pour définir un symbole. Pour ignorer ce champ, on introduit au moins un espace ou une tabulation. \\
     * __Exemple__ : //msg//     * __Exemple__ : //msg//
  
Ligne 82: Ligne 82:
  
   -  **Fixer la position des variables dans la mémoire** avec la directive **.org** \\ ☛ **Fixez** la position de la zone des variables à partir de l’adresse **20**<sub>16</sub> comme ci-dessous. Le symbole **$** signifie que la valeur qui suit est en **hexadécimal** (base 16). {{ :info:prog:prog1a.png?nolink |}} \\   -  **Fixer la position des variables dans la mémoire** avec la directive **.org** \\ ☛ **Fixez** la position de la zone des variables à partir de l’adresse **20**<sub>16</sub> comme ci-dessous. Le symbole **$** signifie que la valeur qui suit est en **hexadécimal** (base 16). {{ :info:prog:prog1a.png?nolink |}} \\
-  - **Déclarer et initialiser des variables** \\ La position des variables étant fixée, vous allez les **identifier** à l'aide d'une **étiquette**, les **déclarer** à l'aide de la directive **.byte** et les **initialiser** en leur affectant une valeur. \\ ☛ **Complétez** le code source comme ci-dessous. Placez **v2** avec la valeur **80** puis  **v3** avec la valeur **0** sous v1. **Sauvegarder** le code source sous le nom **//add.asm//** sur le serveur (voir prof).+  - **Déclarer et initialiser des variables** \\ La position des variables étant fixée, vous allez les **identifier** à l'aide d'une **étiquette**, les **déclarer** à l'aide de la directive **.byte** et les **initialiser** en leur affectant une valeur. \\ ☛ **Complétez** le code source comme ci-dessous. Placez **v2** avec la valeur **80** puis  **v3** avec la valeur **0** sous v1. **Sauvegarder** le code source sous le nom **//add.asm//** sur le serveur dans **<color #ed1c24>home/TP/TP0_SDK68xx</color>**.
 {{ :info:prog:prog1b.png?nolink |}} {{ :info:prog:prog1b.png?nolink |}}
 {{ :info:prog:etiquette.png?nolink&200|}} {{ :info:prog:etiquette.png?nolink&200|}}
  
-<callout type="info" title="Etiquette ou Label" icon="true">Une **étiquette** ou **label** est une chaîne de caractères permettant de **nommer** une **instruction** ou une **variable**. Une étiquette correspond à une **adresse** dans le programme.</callout> +<callout type="info" title="Etiquette(Label)" icon="true">Une **étiquette** est une chaîne de caractères permettant de **nommer** une **instruction** ou une **variable**. Une étiquette correspond à une **adresse** dans le programme.</callout> 
  
-  *** ÉTAPE 2 - Fixer la position et écrire le code source du programme** \\ __Rappel__ : on souhaite effectuer l’opération v3 ← v1 + v2 \\ {{ :info:prog:prog1c.png?nolink|}}\\ L'opération d'addition entre v1 et v2 se fera à l'aide d'un **accumulateur** . Comme cela est décrit dans les généralités, le MC6800 possède deux accumulateurs (**A** et B). La manière dont les registres accèdent aux données est appelée : **mode d’adressage**. \\ \\ Le programme est réalisé avec **3 instructions** : {{ :info:prog:instructions.png?nolink |}} \\ ☛ **Complétez** le code source comme ci-dessous.  +  *** ÉTAPE 2 - Fixer la position et écrire le code source du programme** \\ __Rappel__ : on souhaite effectuer l’opération v3 ← v1 + v2 \\ {{ :info:prog:prog1c.png?nolink|}}\\ L'opération d'addition entre v1 et v2 se fera à l'aide d'un **accumulateur** . Comme cela est décrit dans les généralités, le MC6800 possède deux accumulateurs (**A** et B). La manière dont les registres accèdent aux données est appelée : **mode d’adressage**. \\ \\ Le programme est réalisé avec **3 instructions** : {{ :info:prog:instructions.png?nolink |}} \\ ☛ **Complétez** le code source comme ci-dessous. {{ :info:prog:prog1d.png?nolink |}} \\ __Remarque__ : dans **__ce__** programme, les instructions **ldaa** v1,  **adda** v2 et **staa** v3 mettent en œuvre le mode d’**adressage étendu**.
-{{ :info:prog:prog1d.png?nolink |}} \\ __Remarque__ : les instructions **ldaa** v1,  **adda** v2 et **staa** v3 mettent en œuvre le mode d’**adressage étendu**.+
  
 <callout type="info" title="Adressage étendu" icon="true">Dans le mode d’**adressage étendu**, l'adresse contenue dans le deuxième octet de l'instruction est utilisée comme octet supérieur de l'adresse de l'opérande. Le troisième octet de l'instruction est utilisé comme octet inférieur de l'adresse de l'opérande. Il s'agit d'une **adresse absolue** dans la mémoire.  ldaa //v1//, adda //v2// et staa //v3// sont codées sur **3 octets**. \\ \\ __Exemple__ : ldaa $1000 charge le contenu de la mémoire située à l’adresse 1000<sub>16</sub> dans l'accumulateur A. <callout type="info" title="Adressage étendu" icon="true">Dans le mode d’**adressage étendu**, l'adresse contenue dans le deuxième octet de l'instruction est utilisée comme octet supérieur de l'adresse de l'opérande. Le troisième octet de l'instruction est utilisé comme octet inférieur de l'adresse de l'opérande. Il s'agit d'une **adresse absolue** dans la mémoire.  ldaa //v1//, adda //v2// et staa //v3// sont codées sur **3 octets**. \\ \\ __Exemple__ : ldaa $1000 charge le contenu de la mémoire située à l’adresse 1000<sub>16</sub> dans l'accumulateur A.
Ligne 95: Ligne 94:
 \\ \\
  
-  * ** ÉTAPE 3 - Assembler le code source ** +  * ** ÉTAPE 3 - Assembler le code source ** \\ Le code source écrit dans l'étape 2 n'a pas encore été assemblé. La mémoire est "vide" comme dans l'exemple ci-dessous. \\ \\ {{ :info:prog:memvide.png?nolink |}} \\ Cliquez sur le bouton **Step** pour effectuer l'assemblage. La mémoire doit se remplir comme ci-dessous. \\ \\ {{ :info:prog:code1.png?nolink |}} \\
- +
-  - Le code source écrit dans l'étape 2 n'a pas encore été assemblé. La mémoire est "vide" comme dans l'exemple ci-dessous. \\ \\ {{ :info:prog:memvide.png?nolink |}} \\ Cliquez sur le bouton Step pour effectuer l'assemblage. La mémoire doit se remplir comme ci-dessous. \\ \\ {{ :info:prog:code1.png?nolink |}} \\+
  
   * ** ÉTAPE 4 - Tester le programme en mode pas à pas**   * ** ÉTAPE 4 - Tester le programme en mode pas à pas**
-    * Consultez la documentation suivante : "<html><a href="https://webge.fr/doc/1nsi/tp/Ressource_Doc_SDK6800_6811.pdf" target="_blank">Simulateur 6800</a></html>" pour mettre en oeuvre le simulateur.+    * Documentation "<html><a href="https://webge.fr/doc/1nsi/tp/Ressource_Doc_SDK6800_6811.pdf" target="_blank">Simulateur 6800</a></html>".
  
-<callout type="warning" title="Travail demandé" icon="true">Complétez le document réponse.</callout> +<callout type="warning" title="Travail demandé" icon="fa fa-user-o" color="red">Comlpétez le document réponse du TP(voir prof)</callout> 
  • info/prog/ass6800.1730365707.txt.gz
  • Dernière modification : 2024/10/31 10:08
  • de phil