Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

MPASM, Bug, Astuces, Questions, ...
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » jeu. 6 juin 2019 10:39

Bonjour à tous,
Tout le monde s'en sert quotidiennement, mais on n'en n'en parle jamais. J'ouvre ce sujet à la ronde en espérant que plusieurs d'entre nous auront des choses à y mettre.
En parallèle, j'ouvre le même sujet dans Partage et entraide/Tutoriels où chacun pourra écrire une page d'explication sur un point précis de MPASM.
Pour chaque nouvelle participation, je m'engage à mettre, dans ces premiers posts un lien vers ce nouveau sujet (sujet dans le sujet :sifflotte: )
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM, Bug, Astuces, Questions, ...
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#2 Message par JJE » mer. 12 juin 2019 17:12

Ce sujet ne semble pas attirer les foules :sad:, cependant, je m'y lance pour décrire ce qui pourrait bien apparaître comme une bizarrerie. :shock:

Accédez à l'aide de MPASM depuis MPLAB menu Help/Topics/MPASM Assembler. Dans l'onglet sommaire sélectionnez Macro Langage/Macro Definition. La page parle d'un opérateur texte &v(expr ) de manière relativement succincte. Heureusement, la page suivante Macro Invocation est un peu plus explicite.
J'ai écrit une macro qui permettait d'incrémenter une variable V d'un nombre quelconque d'octets. Elle s'invoque par :
AnBS_Incf V, 3 si la variable est un compteur sur 24 bits (3 octets). Il faut bien dire à l'assembleur la taille de la variable puisqu'on n'a pas de directive dans ce sens comme le int ou le long du C, ou le integer du basic.
Fort de la lecture le la page mentionnée ci-dessus, je voulais améliorer la situation en fournissant une "sur-couche" qui éviter à l'utilisateur de préciser cette taille. Par exemple A24BS_Incf. C'est bien sûr très facile à la main, mais comme vous vous en e^tes peut-être rendu compte, j'aime bien faire bosser l'assembleur, je croyais avoir trouvé l'outil. d'où le code suivant :

Code : Tout sélectionner

    variable i = 8
    while i
!=0
A
#v(8*i)BS_Incf macro V1
        AnBS_Incf   V1, .#v(i)
    endm
-=1    
    endw

Simple, n'est-ce pas ? L'assembleur ne râle pas, mais, pas de chance, le code généré ne marche pas :cry:. Je vais donc consulter le .lst généré, Claudius serait probablement, et avec raison, allé voir avant l'échec et voilà ce que je lis :

Code : Tout sélectionner

                      00090     A24BS_Incf   Var1      
                          M         AnBS_Incf   Var1
, .0

Le premier #v(8*i) est bien remplacé par sa valeur en ascii décimal, parfait, mais le deuxième #v(i) est remplacé par 0, ce qui bien sûr ne fait pas mon bonheur :cry:.
Il y a bien sûr une bonne raison, l'assembleur ne traite cette ligne que quand la macro qui la contient a été invoquée, Dans cette invocation, il remplace alors la ligne d'invocation par les lignes définies dans la macro, mais alors le i n'a plus de sens. Dans probablement sa première passe, quand il rencontre la déclaration de macro, il doit se contenter d'engranger quelque part sa définition (nom, liste de paramètres) et la liste des lignes comme du simple texte.
Pour s'en convaincre, il suffit d'écrire une déclaration de macro avec une erreur de syntaxe par exemple dans le corps, sans jamais invoquer cette macro. L'assembleur ne dit rien. Pas grand chose à dire, c'est un choix.
Il ne me reste plus qu'à bosser moi-même, pas de sous-traitance, à moins que quelqu'un me soufle une parade Merci !
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités