Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| .W |
Ce paramètre optionnel permet d'indiquer la largeur de l'instruction |
| destination |
Ce paramètre permet d'indiquer une expression relative du PC |
Description
Cette instruction permet d'appeler un sous-programme. Ainsi, il place l'adresse de retour dans le registre de liaison et fixe le PC vers l'adresse du sous-programme.
Algorithme
LR ← adresse de la prochaine instruction
PC ← destination
|
Remarques
- Instruction utilisée pour appeler des sous-programmes : L'instruction BL permet de transférer l'exécution vers une autre portion de code, généralement
une fonction ou une routine. Contrairement à B, elle sauvegarde l'adresse de retour dans le registre LR (Link Register), ce qui permet de revenir au point d'appel via une
instruction BX LR ou équivalente.
- Création d'un lien avec l'appelant : En sauvegardant le PC (adresse suivante) dans LR, BL permet une gestion efficace des appels de fonctions. Ce mécanisme
est à la base de la structure de la pile d'appels dans de nombreux programmes, et est essentiel pour l'implémentation de la récursivité ou de l'encapsulation
fonctionnelle.
- Destination relative au PC pour plus de flexibilité : La cible (destination) est une adresse relative au compteur de programme (PC), ce qui facilite la
génération de code position-indépendant. Cela signifie que le code peut être chargé à n'importe quelle adresse mémoire, tant que les labels relatifs restent valides.
- Utilisation conditionnelle avec cond : Comme d'autres instructions ARM, BL peut être conditionnelle grâce au suffixe cond. Par exemple,
BLEQ fonction appellera une fonction uniquement si le résultat précédent était égal à zéro. Cela permet un contrôle de flux structuré et compact sans
branchement explicite.
- Possibilité d'utiliser .W pour étendre la portée : Le suffixe .W force un encodage de 32 bits, utile surtout dans le mode Thumb où certaines
instructions peuvent être encodées sur 16 bits. L'utilisation de .W permet donc d'appeler des fonctions situées plus loin en mémoire grâce à un offset plus grand.
- Souvent associée à BX LR pour le retour : Une fois la fonction exécutée, on retourne au point d'appel via BX LR, qui saute à l'adresse contenue dans le
registre LR. Ce mécanisme simple et direct permet d'implémenter des appels de fonctions sans pile si on ne fait pas de récursivité ou d'appels imbriqués.
- Essentielle dans l'appel de fonctions système ou bibliothèques : Dans un système embarqué, BL est utilisée pour appeler des fonctions système (par
exemple, pour configurer un périphérique) ou des fonctions dans une bibliothèque logicielle. C'est l'instruction de base pour structurer le programme en modules et
fonctions réutilisables.
- Impact sur le registre LR à prendre en compte : Puisque BL modifie le registre LR, il faut faire attention à sauvegarder ce registre si on effectue un
autre BL à l'intérieur de la fonction appelée. Sinon, l'adresse de retour serait écrasée. En pratique, cela implique l'utilisation d'une pile pour sauvegarder/restaurer
LR lors d'appels imbriqués.
Dernière mise à jour : Mardi, le 6 décembre 2016