Ce sujet ne semble pas attirer les foules

, cependant, je m'y lance pour décrire ce qui pourrait bien apparaître comme une bizarrerie.
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 :
Simple, n'est-ce pas ? L'assembleur ne râle pas, mais, pas de chance, le code généré ne marche pas

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

.
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
