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.
Labels locaux dans as
Modérateur : Francois
-
- Messages : 35
- Enregistré le : jeu. 19 oct. 2017 10:11
Re: Labels locaux dans as
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.
Re: Labels locaux dans as
Salut Vincent Leboulou.
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.
@+
Je n'utilise pas cette façon de faire.VincentLeboulou a écrit :Comment résoudre ce problème ?
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
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32