Labels locaux dans as

On peut difficilement être plus proche du cœur du CPU qu'avec l'assembleur...

Modérateur : Francois

Répondre
VincentLeboulou
Messages : 34
Enregistré le : jeu. 19 oct. 2017 10:11

Labels locaux dans as

Message par VincentLeboulou » mar. 22 mai 2018 19:19

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.

VincentLeboulou
Messages : 34
Enregistré le : jeu. 19 oct. 2017 10:11

Re: Labels locaux dans as

Message par VincentLeboulou » jeu. 31 mai 2018 20:46

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-)

Artemus24
Raspinaute
Messages : 737
Enregistré le : ven. 15 sept. 2017 19:15

Re: Labels locaux dans as

Message par Artemus24 » mar. 19 janv. 2021 21:33

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.

@+
--> RPI4B/8GB + Argon FanHAt
--> RPi0v1.3, RPi0W, Rpi3A+, Rpi3B+
--> Rpi0WH + Tuner TV HAT
--> RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
--> RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB

Répondre

Retourner vers « Assembleur »