[Programmation] Microprocesseur - Assembleur : freescale mc9s12dp512
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Microprocesseur - Assembleur : freescale mc9s12dp512



  1. #1
    Ragnis

    Microprocesseur - Assembleur : freescale mc9s12dp512


    ------

    Bonjour,

    Je fais de la programmation en assembleur mais certaines notions sont assez floues. Je me perds sur les appels de valeurs immédiates ou d'adresses (# #$ $).

    Par exemple:
    Quelle est la différence entre "LDAA #$12" et "LDAA #12" ? Le premier est la valeur immédiate en héxadécimale et la deuxième la valeur immédiate en base 10 ?
    De même, "LDAA $FF"est utilisée pour charger la valeur contenu dans la case à l'adresse "FF" (hexa) ?

    Merci d'avance pour les réponses (et si vous avez de la documentation sur les codes opératoires pour la programmation en assembleur je ne dis pas non).

    -----

  2. #2
    ced78370

    Re : Microprocesseur - Assembleur

    Bonjour,

    Pour l'assembleur :
    # : prend la valeur immédiate donné après (si tu ajoute $ c'est en hexadécimal sans c'est en décimal)
    Si il n'y a pas de # tu prend la valeur présente à l'adresse qui suis.

    Dans tes exemples :
    LDAA #$12 charge A avec la valeur hexadécimal 12
    LDAA #12 charge A avec la valeur décimal 12
    LDAA $FF charge A avec la valeur présente à l'adresse FF

  3. #3
    gcortex

    Re : Microprocesseur - Assembleur

    Il y a autant de langages que de µP. Tu parles d'un freescale (motorola)?

  4. #4
    Ragnis

    Re : Microprocesseur - Assembleur

    Bonjour,

    Tout d'abord merci ced78370 pour les instructions.
    Je me demandais donc pourquoi avec l'instruction "ADD" on n'écrit pas de "#" ou/et de "$", par exemple "ADDA 80" va additionner la valeur de l'adresse 80 avec celui du registre A et le stocker dans A (sauf erreur de ma part). Or personnellement j'aurais écrit "ADDA $80" et je ne comprends pas trop pourquoi.

    gcortex, je commence actuellement à travailler sur un freescale mc9s12dp512 (c'est vrai que j'aurais du le préciser désolé).


    Merci d'avance !

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

    Re : Microprocesseur - Assembleur

    A mon avis : c'est ton compilateur qui doit interpréter que ADDA 80 = ADDA $80, ce qui serait logique vu qu'un adressage se fait en hexa (code machine 9B)
    Si tu ajoutes le # alors il prendra la valeur qui suis. (code machine 8B)

    Pour en être sur tente la commande LDAA FF voir ce qu'il fait (normalement il prendra l'adresse FF et non la valeur comme pour ADDA)
    Dernière modification par ced78370 ; 19/05/2016 à 13h11.

  7. #6
    gcortex

    Re : Microprocesseur - Assembleur

    Je ne pense pas qu'il va interpréter. En programmation, il faut être très précis.

  8. #7
    satinas

    Re : Microprocesseur - Assembleur

    ADDA 80
    ADDA $50
    sont deux instructions assembleur exprimées dans 2 bases numériques différentes, elles aboutissent à la même instruction en langage machine lors de l'assemblage. Aucune n'est "mieux" que l'autre.

    ADDA #80
    ADDA #$50
    elles aussi sont assemblées de façon identique, mais l'instruction en langage machine qui en découle sera différente de la précédente.

  9. #8
    ced78370

    Re : Microprocesseur - Assembleur

    Citation Envoyé par satinas Voir le message
    ADDA 80
    ADDA $50
    sont deux instructions assembleur exprimées dans 2 bases numériques différentes, elles aboutissent à la même instruction en langage machine lors de l'assemblage. Aucune n'est "mieux" que l'autre.
    Ce qu'il demande dans son poste c'est pourquoi quand il compile ADDA 80 le programme fonctionne comma si il avait programmer ADDA $80....
    Mais on est bien d'accord que 50 en hexa est égal à 80 en décimal.

    Maintenant ce que je me demande c'est si quand il écrit ADDA 80 ou ADDA $80 son compilateur n'utilise (plutot qu'interprète....) pas la même code machine 9B et l'adresse '80' en hexa (d'ou le test a effectuer... Je ne sais pas sous quelle compilateur il travail)

  10. #9
    satinas

    Re : Microprocesseur - Assembleur

    LDAA et ADDA, et plein d'autres instructions ont exactement les mêmes mode d'adressage : immédiat, direct, indirect, ect
    Et bien sur la même syntaxe d'utilisation, que dire de plus ...

    ADDA #opr8i
    ADDA opr8a
    ADDA opr16a
    ADDA oprx0_xysp
    ADDA oprx9,xysp
    ADDA oprx16,xysp
    ADDA [D,xysp]
    ADDA [oprx16,xysp]

  11. #10
    Ragnis

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    Merci pour les réponses.

    Si j'ai bien compris, "ADDA 80" additionnera la valeur du registre A avec la valeur contenu dans la case 50 (comme 80 décimal =50 héxa) alors que "ADDA $80" additionnera avec le contenu de la case 80 ?

    Et je pose toutes ces questions car je n'ai pas mon compilateur avec moi aujourd'hui malheureusement (sinon j'aurais réaliser des tests dessus pour mieux comprendre).

  12. #11
    satinas

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    oui, mais tu as l'air d'associer adresses et heaxadécimal, ce n'est pas obligatoire.
    Les adresses d'une mémoire 64k vont de 0 à 0xFFFF en hexa, et de 0 à 65535 en décimal.
    Donc ce que tu appelles la case 50 (case d'adresse 0x0050), c'est aussi la case 80 si on l'exprime l'adresse en décimal.
    On utilise l'hexa pour les adresses parce que c'est plus pratique, mais l'assembleur (et pas le compilateur) lui il accepte les deux, il suffit de lui dire quelle base tu utilises, rien pour une valeur décimale, préfixe $ pour une valeur hexa.
    le préfixe # concerne le type d'adressage à utiliser pour l'instruction machine, comme indiqué plus haut.

  13. #12
    Ragnis

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    Merci une nouvelle fois !

    Et aurais tu des informations sur certaines commandes que tu as noté plus haut stp:
    ADDA oprx0_xysp
    ADDA oprx9,xysp
    ADDA oprx16,xysp
    ADDA [D,xysp]
    ADDA [oprx16,xysp]

    Par exemple pour la première "ADDA oprx0_xysp"
    si on note: "ADDA 0,X" (avec X initialisé plus tôt) à quoi correspond cette instruction ?

    Merci d'avance.

  14. #13
    satinas

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    http://cache.nxp.com/files/microcont...l/S12CPUV2.pdf
    J'espère que c'est la bonne doc, ça y ressemble.

    page 29 pour voir tous les modes d'adressage, et il y en a un paquet.

    page 37 pour ta question, c'est un adressage indexé sur X avec offset 5 bits.
    l'offset est de 0. Il peut aller de -16 à +15 (5 bits). On l'ajoute au contenu du registre X. cela donne une adresse, on ajoute au registre A le contenu de cette adresse.

  15. #14
    Ragnis

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    Merci pour le lien.

    Et pour l'explication si j'ai bien compris, "ADDA 0,X" prend l'adresse de X en héxa et prend la valeur "0" en décimale (je suppose décimale mais je n'en suis pas certain) puis les additionne pour donner la nouvelle adresse à laquelle il faut aller ? (on ajoute ensuite au registre A le contenu de cette nouvelle adresse)
    Si c'est cela, on pourrait simplement noter "ADDA X" pour cette exemple ?

    Merci d'avance.

  16. #15
    Ragnis

    Microprocesseur - Assembleur : freescale mc9s12dp512

    Bonjour,

    J'essaye de faire un programme capable de calculer la somme de nombres en assembleur. J'ai donc commencé avec un tableau de quatre valeurs simples (1, 2, 3, 4)

    j'obtient donc:
    ORG $1000
    LDAA #0
    LDAB #4
    LDX #table
    DEB ADDA 0,X
    INX
    DBNE B,DEB
    STAA $2000
    FIN BRA FIN
    table db 1,2,3,4

    Maintenant je voudrais faire la même chose mais avec 12,34,300,500 mais je ne suis pas sur de ce programme, j'obtient:

    ORG $1000
    LDD #0
    LDY #4
    LDX #table
    DEB ADDD 0,X
    INX
    DBNE Y,DEB
    STD $2000
    FIN BRA FIN
    table dw 12,34,300,500

    Je ne suis pas sur pour:
    "ADDD 0,X
    INX"
    car je ne sais pas si "INX" va me permettre de prendre la 2è valeur de mon tableau ou s'il rajoute seulement la valeur "1" à X (puisque dans le programme précédent dans les deux cas ça fonctionnerait).


    Merci d'avance.
    Dernière modification par Ragnis ; 19/05/2016 à 20h15.

  17. #16
    Ragnis

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    Il faut peut être faire une deuxième fois "INX" car on réserve 2 octets pour chaque valeur de "table" ? (désolé pour le double post, je ne pouvais plus modifier mon précédent post)

  18. #17
    satinas

    Re : Microprocesseur - Assembleur : freescale mc9s12dp512

    Il prend le contenu de X qui est une valeur numérique tout court, pas en hexa ni en décimal, une valeur numérique 16 bits stockée dans X. Il ajoute ce contenu à l'offset fourni en décimal (car pas de préfixe $) et il l'ajoute ces 2 valeurs numériques à sa façon, c'est à dire en binaire car il ne connaît que le 0 et le 1. Le résultat fournit l'adresse pour l'addition. X reste inchangé dans l'histoire.
    Les assembleurs sont assez stricts, ils attendent une syntaxe précise, et il faut s'y tenir. Mais peut-être considère-t-il effectivement que ADDA X, est un raccourci pour ADDA 0,X et l'acceptera, tu le vérifieras par toi même, si c'est le cas.

    Ici c'est l'électronique, poste plutôt dans la partie Informatique - Programmation

Discussions similaires

  1. microcontroleur avr /arm /freescale
    Par invite60546543 dans le forum Électronique
    Réponses: 13
    Dernier message: 16/02/2011, 21h38
  2. µC Freescale ???
    Par BastienBastien dans le forum Électronique
    Réponses: 11
    Dernier message: 16/04/2008, 19h35
  3. Mc9S12DP512
    Par inviteb6a8e43c dans le forum Électronique
    Réponses: 2
    Dernier message: 28/10/2007, 16h23
  4. microproceseur Freescale
    Par invite5855bed4 dans le forum Électronique
    Réponses: 31
    Dernier message: 22/10/2007, 18h12
  5. Freescale et Microcontroleur
    Par invitecb425c94 dans le forum Électronique
    Réponses: 2
    Dernier message: 12/04/2007, 15h27
Découvrez nos comparatifs produits sur l'informatique et les technologies.