Page 1 sur 1

Labels locaux dans as

Posté : mar. 22 mai 2018 19:19
par VincentLeboulou
Bonsoir à tous.
J'ai progressé dans la pratique de l'assembleur asm sur le raspberry (voir mon blog http://assembleurarmpi.blogspot.fr/) mais je rencontre un problème avec les labels locaux. En effet d'après la doc soit on peut appeler un label local dans une fonction en le faisant commencer par .L par exemple .L_saut1 soit on peut utiliser un label numérique par exemple 2:.
Or avec le premier cas si je mets le même nom d’étiquette (.L_saut1) dans 2 fonctions différentes, j'ai une erreur de compilation et dans le deuxième cas si dans une fonction j'ai oublié l'étiquette 2: un saut par b 2f va sauter à l'étiquette 2: d'une autre fonction.
Ce qui n'est pas très local !!!
Comment résoudre ce problème ?
Merci de vos conseils.

Re: Labels locaux dans as

Posté : jeu. 31 mai 2018 20:46
par VincentLeboulou
Comme je n'ai pas eu de conseils à ma question et que je n'ai rien trouvé sur internet sur ce problème, je me suis replongé dans la documentation de Gas. En fait je faisais une mauvaise interprétation des labels locaux de la forme n: (n numérique). Gas accepte d'avoir plusieurs labels identiques de ce type dans des fonctions différentes mais il ne les distingue pas les uns des autres car l'accès à ces labels ne peut se faire qu"en utilisant les codes b (pour accéder au label précédent ) ou f (pour accéder au label suivant) . C'est donc au programmeur de faire attention à avoir des labels corrects placés dans les bonnes fonctions. 8-)

Re: Labels locaux dans as

Posté : mar. 19 janv. 2021 21:33
par Artemus24
Salut Vincent Leboulou.
VincentLeboulou a écrit :Comment résoudre ce problème ?
Je n'utilise pas cette façon de faire.
Je nomme mes étiquettes du même nom que ma subroutine, en y ajoutant un chiffre afin de les distinguer.

Je tiens à préciser que ce n'est pas une fonction car il n'y a pas de valeur de retour, comme dans le cas du calcul d'un sinus.
Ni une procédure car normalement, elle doit gérer une pile à cause des appels récursifs.

Le mieux est de nommer cela une "subroutine" qui n'est en fait qu'un simple sous-programme.
Ne pas mettre cette subroutine dans la section ".global" mais dans la section ".text" car elle ne doit pas être accessible depuis l'extérieur.

@+