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 :

[68HC11] Exercice d'Assembleur


Sujet :

Autres architectures Assembleur

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut [68HC11] Exercice d'Assembleur
    Bonjour à toutes et à tous !

    Voilà, je suis en train de suivre un cours sur les microprocesseurs (type motorola) et je bloque sur un exercice.
    Pourriez vous m'aider ?

    Voici l'énoncé :

    1) Ecrire un sous programme qui réalise l'addition du registre X avec Y et met le résultat dans X (seulement X est modifié)
    2) 00 11 22 33 44 55 66 77 88 sont des octets contenus dans la pile. Après avoir exécuté "RTI", donner la valeur de chaque registre puis donner l'adresse de la prochaine instruction
    3) Comment faire pour qu'un sous programme soit exécuté en un temps donné ? (par exemple, chaque millisecondes) ?

    Voici ce que je pensais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LDAA ,X    /* on charge dans l'accumulateur A l'adresse que pointe le registre x*/
    ADDA ,Y   /* on ajoute dans l'accumulateur A l'adresse que pointe le registre y*/
    STAA  $3000       /* on stocke le résultat de A à l'adresse $3000 (adresse prise au hasard)*/
    => Ce qui me dérange, c'est que X n'est pas modifié car j'utilise l'accumulateur A

    2) RTI correspond à un retour au programme de base après une interruption. Donc techniquement, la prochaine instruction est celle juste d'après celle où on a eu l'interrupteur. Je ne sais pas quelle est l'adresse par contre.
    Pour les valeurs de chaque registre, il faut regarder le CCR (controle d'état). Quand on a fini notre interruption, on met I=0 pour autoriser à en avoir des nouvelles.

    3) Pas trop d'idées pour le coup... Utiliser un timer ?

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Bonjour et bienvenue,

    Il est nécessaire que tu nous donnes le modèles exact du processeur pour lequel tu développes car si les Motorola sont très proches dans leur philosophie et leur conception, les différents modèles sont dotés d'un assembleur propre. Et les légères variations de l'une à l'autre vont sensiblement influer sur l'approche que tu vas choisir.

    Apparemment, tu utilises un 68HC11.

    1. Malheureusement, ta proposition additionne la valeur pointée par X à celle pointée par Y. Elle n'additionne pas les valeurs propres de X et Y. La question n'est pas anodine car elle montre que ton micro-processeur reste un 8 bits, notamment au niveau des dimensions de son ALU (unité arithmétique et logique) qui est chargée justement de faire les calculs simples comme l'addition, la soustraction, la multiplication et toutes les opérations logiques (AND, OR, XOR, NOT et également NEG). Sur 6809, il existe « LEA » qui sert à charger une adresse effective. Bien que pas spécialement étudiée pour à la base, cela permet d'ajouter astucieusement des valeurs 5 ou 8 bits à un registre 16 bits en une seule opération sur un processeur qui n'était prévu que pour huit ;
    2. Lire la doc. « RTS » signifie « return from subroutine » et sert à revenir d'un JSR/BSR (l'équivalent d'un CALL sur Intel). Le processeur va donc dépiler exactement deux octets dans la pile et les placer dans PC. Autrement dit, il va dépiler l'adresse de retour et y faire un saut. « RTI » signifie « return from interrupt ». Ça sert grosso-modo à la même chose mais pour sortir d'une routine appelée par une interruption (une IRQ ou un SWI). Dans ces conditions, comme on ne sait pas à quel moment l'interruption va se produire, le micro-processeur est obligé de prendre ses précautions : il sauvegarde la plupart des registres dans la pile en plus de l'adresse de retour, et inhibe en plus les interruptions pour éviter la réentrance. En appelant RTI, tous ces registres sont restaurés. Il faut donc lire la datasheet pour voir dans quel ordre ils sont empilés (et vont être dépilés) ;
    3. Le timer est une bonne idée mais, sur ce genre d'architecture, il était fréquent d'inhiber les interruptions et de calculer la durée exacte, en cycles machines, de la routine qui va être exécutée. Le nombre de cycles de chaque instruction en fonction du contexte et du mode d'adressage t'est donné dans la table des instructions à côté des codes-opérations eux-mêmes.

Discussions similaires

  1. Besoin d'aide pour un exercice en assembleur
    Par rayed dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 13/04/2013, 20h03
  2. Aide sur un petit exercice en assembleur
    Par sheridan08 dans le forum x86 16-bits
    Réponses: 0
    Dernier message: 22/01/2010, 11h27
  3. [MARIE] Cherche exercices en Assembleur avec l'architecture MARIE
    Par dja filali dans le forum Autres architectures
    Réponses: 0
    Dernier message: 18/01/2010, 19h14
  4. Exercice en Assembleur
    Par zakaria1 dans le forum Assembleur
    Réponses: 1
    Dernier message: 03/04/2009, 19h11
  5. Exercice sur le jeu d'instructions Assembleur
    Par azedsqfb dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/09/2007, 11h23

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