BX |
Branchement et échange |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rm |
Ce paramètre permet d'indiquer un registre contenant l'adresse de branchement. |
Description
Cette instruction permet d'effectuer un saut et change l'ensemble d'instructions.
Remarques
- Permet le branchement vers une adresse contenue dans un registre : L'instruction BX effectue un saut vers l'adresse contenue dans un registre (Rm).
Contrairement à une instruction B ou BL, elle ne prend pas d'étiquette ou d'adresse immédiate, mais agit comme un branchement
indirect, ce qui la rend utile pour le retour de fonctions ou les appels dynamiques.
- Change le mode d'exécution selon le bit 0 de l'adresse cible : La particularité de BX est qu'elle peut changer le mode du processeur entre ARM (32 bits)
et Thumb (16/32 bits). Si le bit 0 de l'adresse dans Rm est à 1, le processeur passe en mode Thumb ; s'il est à 0, il reste en ARM. Ce mécanisme est essentiel pour
assurer la compatibilité entre modules compilés dans différents modes.
- Souvent utilisée pour retourner d'une fonction (BX LR) : La forme la plus fréquente de BX est BX LR, servant à retourner d'une fonction en sautant
à l'adresse précédemment entreposée dans le registre LR. Cela remplace l'équivalent d'un RET dans d'autres architectures, en assurant aussi un éventuel changement de
mode si nécessaire.
- Instruction indispensable pour l'interopérabilité ARM/Thumb : Dans les systèmes qui combinent des bibliothèques compilées en ARM et d'autres
en Thumb (souvent pour économiser de l'espace mémoire), BX est utilisé pour passer d'un mode à l'autre au moment de l'appel ou du retour de fonction. C'est un élément
clef de l'architecture ARM inter-mode.
- Peut être conditionnelle avec le suffixe cond : Comme beaucoup d'instructions ARM, BX accepte un suffixe conditionnel (BXNE, BXEQ,...). Cela permet
d'effectuer un saut indirect uniquement si une condition est remplie, sans avoir à insérer une structure IF ou B. Cela rend le code plus compact et plus efficace.
- Doit être utilisée avec prudence concernant l'alignement des adresses : L'adresse contenue dans Rm doit être alignée correctement (souvent sur 2 ou 4
octets), selon le mode. Une adresse invalide ou mal alignée peut causer une exception de type "unaligned access" ou faire planter le programme. Il faut donc s'assurer
que le bit 0 correspond bien au mode voulu et que l'adresse est valide.
- Très utilisée pour gérer les pointeurs de fonctions ou les vecteurs d'interruption : BX est idéal pour appeler une fonction dont l'adresse a été
déterminée dynamiquement (exemple : depuis un tableau de pointeurs ou un vecteur d'interruptions). Cela permet une architecture souple, où les fonctions peuvent être
configurées ou redirigées à l'exécution.
- Ne sauvegarde pas l'adresse de retour : Contrairement à BL ou BLX, l'instruction BX ne sauvegarde pas l'adresse de retour dans le registre LR. Elle
effectue un simple saut sans lien. Cela signifie qu'elle est à utiliser uniquement lorsqu'un retour n'est pas nécessaire, ou lorsqu'on retourne à une adresse déjà
entreposée dans LR.
Dernière mise à jour : Dimanche, le 12 novembre 2017