exercice programmation assembleur d'un microcontroleur 68HC11
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

exercice programmation assembleur d'un microcontroleur 68HC11



  1. #1
    invitee2f3230c

    Question exercice programmation assembleur d'un microcontroleur 68HC11


    ------

    bonjour
    c'est un exercice de programmation assembleur pour un microcontrôleur 68HC11;
    énoncé:additionner deux octets
    N1(d'@=$0100)
    et
    N2(d'@=$0102)
    et mettre le résultats dans l'@ $0104.
    Bon voilà la correction (le code machine d'après Instruction set of 68HC11)

    adresse| code machine | instruction | commentaire |
    F800 B6 0101 LDAA $0101 A<-($0101)
    F803 BB 0103 LDAA $0103 A<-A+($0103)
    F806 B7 0105 STAA $0105 ($0105)<- A
    F809 B6 0100 LDAA $0100 A<-($0100)
    F80C B9 0102 ADCA $0102 A<-A+c+($0103)
    F80F B7 0103 LDAA $0104 ($0104)<- A

    donc ou est le probléme ?
    je m'est pas bien compris la correction :
    1.pourquoi on a un adressage entendu(code machine )?

    2. si vous regardez la 1 colonne (adresse) on F800 et puis F803 ???
    si on shématise le memiore,par exemple nous avons
    N1:$1030
    N2:$2F34
    on aura :
    adresse|case mémoire
    F800 B6
    F801 30

    donc l'instruction suivante doit avoir l'@ F802 et mon pas F803!!!


    j'espére que vous avez compris ce que j'ai dit

    j'aimerai bien que vous m'aidez ;je suis vraiment perdue

    -----

  2. #2
    sdec25

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    Bonjour,
    Je ne connais pas cet assembleur mais on dirait bien qu'un instruction prend 3 octets.

  3. #3
    schmo

    Thumbs up Re : exercice programmation assembleur d'un microcontroleur 68HC11

    salut,

    Il y a une erreur dans la ligne à l'adresse F803:
    le code machine BB 01 03 correspond à l'instruction : ADDA $0103
    Après on comprend mieux :
    Code:
     LDAA $0101
     ADDA $0103 --> N1_lsb+N2_lsb 
     STAA $0105 --> stockage dans resultat_lsb
     LDAA $0100 
     ADCA $0102 --> N1_msb + N2_msb + carry
     STAA $0104 --> stockage dans resultat_msb
    C'est une addition de 2 nombres de 16bits et non de 2 octets comme tu le dis.

    L'adressage est étendu car l'adresse RAM utilisé est sur 16bits.

    A+

  4. #4
    invitee2f3230c

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    vous avez tout a fait raison !
    il a une erreur :
    F803 BB 0103 ADDA $0103 A<-A+($0103)!
    2 octet =16bit donc ça revient eu même!
    ce que je ne comprend pas c'est F800 et aprés l'instruction on ce re trouve au niveau de l'@ F803 !!!!!
    normalement cette instruction prend que 2 octet :
    1 case memoire <- B6;
    2 case memoire <- ($ 0101) //c a d le contenue du case mémoire d'@ 0101;
    donc on devrait se retrouver au niveau de l'@ F802

    Que pensez_vous ?

  5. A voir en vidéo sur Futura
  6. #5
    sdec25

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    Bonjour,
    Citation Envoyé par hindou90 Voir le message
    ce que je ne comprend pas c'est F800 et aprés l'instruction on ce re trouve au niveau de l'@ F803 !!!!!
    normalement cette instruction prend que 2 octet :
    1 case memoire <- B6;
    2 case memoire <- ($ 0101) //c a d le contenue du case mémoire d'@ 0101;
    donc on devrait se retrouver au niveau de l'@ F802
    J'ai déjà répondu : une instruction prend 3 octets :
    B6 01 01 = 3 octets.

  7. #6
    schmo

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    salut,

    1 case memoire <- B6;
    2 case memoire <- ($ 0101) //c a d le contenue du case mémoire d'@ 0101;
    C'est la que tu fais erreur !: le code machine ne contient pas le contenu de la ram à l'adresse 0101 mais l'adresse en elle même. Le contenu quand à lui est transferé dans l'accumulateur A.

    Si tu prend l'instruction : LDAA #$82
    le code machine correspondant est : 86 82 soit 2 octets
    Dans ce cas la valeur codée correspond à une valeur fixe qui est sur 8bits
    Comme l'instruction : LDAA $75
    elle est codée : 96 75
    La valeur codée correspond à une adresse ram qui est $0075

    Voila pourquoi les instructions sont codée sur 2 ou 3 octets suivant le mode d'adressage immédiat, direct,.....
    A+

  8. #7
    invitee2f3230c

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    j'aimerai bien que m'expliquez d'avantage slp please !!
    si j'ai compris :le code machine va recevoir l'adresse lui c ad :
    F800=B6
    F800=10
    F802=01
    et comme ça on pourra justifier F803.
    mais bon pourquoi on a pas utilser un adressage direct ne me dit pas parce que N1 il est sur 2 octet, puis qu'il n'y a pas de relation entre l'@ sur la RAM et celui du code machine !!

    excusez moi pour ces stupides question mais bon je suis vraiment perdue

  9. #8
    invitee2f3230c

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    please aidez moi !

  10. #9
    schmo

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    salut,

    Tu es d'accord avec moi, il existe plusieur mode d'adressage sur le 68hc11.
    prenons l'instruction LDAA et ses différents adressages.
    1-immédiat:
    l'instruction est codée sur 1 octet (0x86), l'operande est codée sur 1 octet aussi.
    on peut faire une addition de 2 nombre de 8bits qui donnerai:
    Code:
    F800 86 03  LDAA #$03  -> A=3
    F802 8B 01  ADDA #$01  -> A = A+1
    2-direct:
    l'instruction est toujours codée sur 1 octet (0x96), l'opérande est aussi codée sur 1 octet. La différence avec l'imédiat c'est que cette opérande correspond à une adresse RAM (le poids fort etant égal à 0)et non plus à une valeur.
    Notre addition donnerai:
    Code:
    F800 96 03  LDAA $03  -> A = contenu de l'adresse $0003
    F802 9B 01  ADDA $01  -> A = A + contenu de l'adresse $0001
    F804 97 05  STAA $03  -> place résultat à l'adresse $0005
    3-Etendu:
    L'instruction est codée sur 1 octet (B6), l'opérande sur 2. Contrairement à l'adressage direct, l'opérande correspond à l'adresse complete (adresse sur 16bits)
    Ce qui donne:
    Code:
    F800 86 03  LDAA #$03  --> charge A avec la valeur 03
    F802 B7 01 00 STAA $0100 -> stockage à l'adresse $100
    F805 86 01  LDAA #$01  --> charge A avec la valeur 01
    F807 B7 01 01 STAA $0101 -> stockage à l'adresse $101
    F80A B6 01 00 LDAA $0100 -> charge le contenu de $100 dans A
    F80D B5 01 01 ADDA $0101 -> additionne avec le contenu de $101
    F810 B7 01 02 STAA $0102  -> met le résultat à l'adresse $102
    Comme tu vois, le fait de coder l'instruction sur 2 ou 3 octets dépend surtout de la manière d'écrire l'instruction. En gros tu écris ce que tu veux faire, l'assembleur fait le reste. Savoir comment est codé l'instruction peut être interressant quand tu compte les cycles d'une routine ou quand tu cherche de l'espace mémoire...

    J'espére que ceci pourras t'aider à mieux comprendre.
    A+

    PS: je me souviens plus si le terme d'opérande est le bon ....

  11. #10
    invitee2f3230c

    Re : exercice programmation assembleur d'un microcontroleur 68HC11

    si j'avis compris donc l'adressage direct ou étendue dépend de l'adresse .
    merci c'execellent et simple

    merci une autre fois j 'ai compris

Discussions similaires

  1. programmation d'un microcontroleur
    Par Hayuki dans le forum Électronique
    Réponses: 2
    Dernier message: 12/08/2009, 11h08
  2. Choix et options de programmation d'un microcontrôleur
    Par jo-electrons dans le forum Électronique
    Réponses: 0
    Dernier message: 15/06/2009, 09h19
  3. programmation 68HC11
    Par invite677288f1 dans le forum Électronique
    Réponses: 7
    Dernier message: 23/05/2008, 19h36
  4. Programmation BASIC11 (68HC11)
    Par invite574675fd dans le forum Électronique
    Réponses: 9
    Dernier message: 25/01/2008, 17h13
  5. programmation 68HC11
    Par invitee500b770 dans le forum Électronique
    Réponses: 5
    Dernier message: 31/12/2005, 00h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.