IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres architectures Assembleur Discussion :

[6809] Addition élément par élément de deux tableaux


Sujet :

Autres architectures Assembleur

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut [6809] Addition élément par élément de deux tableaux
    Bonsoir tout le monde

    J'ai des problèmes dans cet exercice ci-dessous :

    Nom : adition.png
Affichages : 350
Taille : 144,3 Ko

    Mon essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    table1 EQU $0100 
    table2 EQU $1002
     
    org $0000
    ldx #table1  // x=$0100
    ldy #table2 // y=$0102
     
    lda ,x+ //a=la valeur pointe par x 
    ldb ,y+ //b=la valeur pointe par y
     
     /*
    a partir d'ici je ne sais pas quoi faire encore !
    comment faire a=a+b et puis le stocker dans $0110 
    */
    Des idées s'il vous plaît.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 411
    Points : 23 839
    Points
    23 839
    Par défaut
    Bonjour,

    N'oublie pas que les accumulateurs (et les registres du processeur en général) ne sont pas de simples variables. Ce sont des outils qui te permettent de lire une donnée quelque part, de la conserver en suspens, et de la réécrire éventuellement ailleurs. Autrement dit : c'est justement en se servant des registres du processeur que l'on gère les variables dans les langages de plus haut niveau. À toi, donc, de minimiser leur usage ou de sauvegarder leur état en mémoire si c'est nécessaire, notamment en utilisant la pile (avec PSHS/PULS ou PSHU/PULU).

    Mais en l'occurrence, tu n'as pas besoin de tout cela : il faut simplement utiliser les bons modes d'adressages. Et coup de bol, le mode indexé du 6809 admet si nécessaire un offset soit sous la forme d'une constante immédiate, soit sous celle d'un accumulateur (A, B ou D). Par exemple :

    Code Asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        LDA    ,X    ; Charge l'octet pointé par X
        LDA    5,X   ; Charge l'octet situé en X+5
        LDA    B,X   ; Charge l'octet situé en X+B

    Donc, à partir du moment où tes tables sont à des adresses fixes les unes par rapport aux autres, tu n'as besoin que d'un seul registre d'index. Donc, tu utilises « X », tu le fais pointer en #$0100, et « 5,X » pointe donc cinq octets plus loin, donc sur la table d'à côté. Et « $10,X » pointe seize octets plus loin, donc sur la table de résultat (attention à l'hexadécimal, comme spécifié dans l'énoncé. À se demander d'ailleurs si c'est volontaire ou non de la part du prof').

    Pour faire une addition, tu ne peux pas additionner directement deux registres. Par contre, tu peux te servir des mêmes modes d'adressages pour récupérer en mémoire un octet donné, qui sera ensuite additionné au contenu déjà existant d'un registre plutôt que directement chargé dedans. Par exemple, « ADDB 9,X » ajoute à B la valeur de l'octet situé en X+9.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut
    que pensez vous maintenant monsieur le responsable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
               ORG  $0000
               LDX  #$0100
               LDY  #$0110
    Boucle  CMPX #$0105 +1
               BEQ  FIN 
               LDA,X+ 
               LDB 5,X
               ADDA B
               STA ,Y+
               BRA  Boucle
    FIN      SWI

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 411
    Points : 23 839
    Points
    23 839
    Par défaut
    Ce n'est pas mal du tout.
    Cela pourrait encore être optimisé mais c'est déjà du code tout-à-fait recevable en l'état, à une ou deux petites erreurs près :

    Aux lignes 7 et 8 :


    Tu incrémentes X avant de lire B, ce qui fait que cette lecture aura lieu un octet trop loin. Si tu comptes incrémenter X à cet endroit, utilises plutôt « 4,X ».

    Ligne 9 :


    Tu ne peux malheureusement pas additionner les deux accumulateurs arithmétiques entre eux de cette façon. Par contre, tu as tout-à-fait le droit d'écrire « ADDA 4,X », ce qui te permet de te passer complètement de l'utilisation de B.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut
    merci bien monsieur le responsable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR 8] Split d'un champ élément par élément
    Par mscpleaz dans le forum Formules
    Réponses: 2
    Dernier message: 19/06/2015, 11h19
  2. Remplir un tableau élément par élément
    Par Piroh dans le forum Pascal
    Réponses: 4
    Dernier message: 10/02/2015, 16h23
  3. Faire des opérations élément par élément
    Par fahimonasri dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/11/2013, 16h06
  4. [CSV] Parcourir un CSV élément par élément
    Par malvax dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2009, 00h44
  5. [Dates] pb pour afficher éléments par éléments
    Par linouline dans le forum Langage
    Réponses: 9
    Dernier message: 04/06/2006, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo