Assembleur : freescale mc9s12dp512
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Assembleur : freescale mc9s12dp512



  1. #1
    Ragnis

    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.

    EDIT: Il faut peut être faire une deuxième fois "INX" car on réserve 2 octets pour chaque valeur de "table" ?

    -----

  2. #2
    Jack
    Modérateur

    Re : Assembleur : freescale mc9s12dp512

    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
    Tout doit être dans le jeu d'instruction de la doc. Mais pourquoi voudrais-tu que ça ajoute 2? Une incrémentation, en principe, c'est +1.

  3. #3
    Jack
    Modérateur

    Re : Assembleur : freescale mc9s12dp512

    De plus, pourrais-tu présenter ton code plus lisiblement: une colonne pour les labels, une pour les mnémoniques et une pour les opérandes, voire une supplémentaire pour les commentaires (entre balises code bien sur)

  4. #4
    Ragnis

    Re : Assembleur : freescale mc9s12dp512

    Désolé pour la mauvaise écriture des codes, les voici mieux agencés.

    Code:
            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:

    Code:
            ORG $1000
            LDD #0
            LDY #4
            LDX #table
    DEB	ADDD 0,X
            INX
            INX
            DBNE	Y,DEB
            STD $2000
    FIN	BRA	FIN
    table	dw	12,34,300,500
    Et en fait je ne sais pas exactement ce que réalise "ADDD 0,X",
    1) soit on prend l'adresse de X et on lui rajoute 0, on obtient une nouvelle adresse et on prend donc la valeur de cette nouvelle adresse (que l'on ajoute à A)
    2) soit on prend la valeur de X et on lui ajoute 0, puis on ajoute cette nouvelle valeur à A.

    Et donc INX ajoute +$0001 donc j'ai supposé qu'il en faut deux pour pouvoir passer les deux octets de X (comme on est en 16bits ici et plus en 8bits comme sur l'exemple précédent).
    Dernière modification par Ragnis ; 19/05/2016 à 22h39.

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Assembleur : freescale mc9s12dp512

    Et en fait je ne sais pas exactement ce que réalise "ADDD 0,X",
    Encore une fois RTFM: il s'agit d'un adressage indexé avec offset. Bref, on additionne le contenu de D avec ce qui se trouve à l'adresse (X + offset)

  7. #6
    Ragnis

    Re : Assembleur : freescale mc9s12dp512

    D'accord j'ai compris merci.

    Le programme vous semble t-il bon du coup svp ? Il y a peut être mon deuxième INX qui n'est pas bon.

  8. #7
    Jack
    Modérateur

    Re : Assembleur : freescale mc9s12dp512

    Le programme vous semble t-il bon du coup svp ?
    Non, un programme additionnant 4 nombres de 16 bits ne peut se contenter d'un résultat sur 16 bits. De plus il faut gérer les retenues.

  9. #8
    Ragnis

    Re : Assembleur : freescale mc9s12dp512

    Citation Envoyé par Jack Voir le message
    Non, un programme additionnant 4 nombres de 16 bits ne peut se contenter d'un résultat sur 16 bits. De plus il faut gérer les retenues.
    Merci pour la réponse.
    Je ne dépasse pas 65535 avec mes valeurs c'est pourquoi je me permets de rester sur 16 bits. De même pour les retenues je suppose.

    Je demandais simplement au niveau de la structure déja établie, et notamment pour les INX.

  10. #9
    Jack
    Modérateur

    Re : Assembleur : freescale mc9s12dp512

    Ca fait un bail que je n'ai plus fait d'assembleur freescale, mais ça me semble correct

  11. #10
    Ragnis

    Re : Assembleur : freescale mc9s12dp512

    Encore merci pour toutes les réponses de la soirée.

Discussions similaires

  1. [Programmation] Microprocesseur - Assembleur : freescale mc9s12dp512
    Par Ragnis dans le forum Électronique
    Réponses: 16
    Dernier message: 19/05/2016, 20h22
  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. Freescale et Microcontroleur
    Par invitecb425c94 dans le forum Électronique
    Réponses: 2
    Dernier message: 12/04/2007, 15h27