TBH |
Branchement d'une table de demi-mot |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| Rn |
Ce paramètre permet d'indiquer le registre de base. |
| Rm |
Ce paramètre permet d'indiquer le registre d'index. Ce paramètre ne pas être PC ou SP. |
Description
Cette instruction permet de brancher un demi-mot.
Remarques
- Principe du branchement indirect : L'instruction TBH permet de réaliser un branchement indirect basé sur une table de demi-mots (16 bits). L'adresse
de saut est calculée dynamiquement à partir d'un offset lu dans la mémoire, ce qui est très efficace pour mettre en ouvre des automates d'états complexes ou des
répartiteur de tables.
- Accès à des tables plus grandes : Par rapport à TBB qui travaille sur des octets (8 bits), TBH lit des demi-mots (16 bits). Cela permet d'utiliser des
déplacements plus grands, donc de gérer des sauts plus éloignés en mémoire. C'est crucial dans les applications où le code est plus volumineux ou dispersé.
- Restriction sur les registres Rm : Comme pour TBB, l'instruction TBH interdit d'utiliser PC ou SP comme registre d'index (Rm). Cela garantit que le calcul
de l'adresse d'accès reste prévisible et sécurisé, et empêche des comportements erratiques liés à la pile ou au compteur de programme.
- Multiplication implicite par 2 : La syntaxe TBH [Rn, Rm, LSL #1] indique que Rm est décalé à gauche d'un bit (LSL #1), ce qui équivaut à multiplier Rm par
2. Cela s'explique parce que chaque entrée de table occupe 2 octets, et cela simplifie la logique d'accès mémoire pour l'assembleur.
- Lecture mémoire de type 16 bits : L'instruction TBH effectue une lecture mémoire 16 bits, ce qui implique que l'alignement mémoire est important. Un mauvais
alignement peut entraîner des exceptions matérielles ou des pénalités de performance sur certaines architectures ARM.
- Optimisation des tables de répartiteur : TBH est extrêmement utile pour créer des structures de répartiteur très rapides où chaque cas (par exemple, dans
un switch-case) peut être traité avec un saut direct sans tests intermédiaires. Cela réduit le nombre d'instructions et accélère fortement les traitements décisionnels.
- Programmation de FSM (Finite State Machines) : Grâce à la capacité de TBH à accéder dynamiquement à des tables de sauts, il devient très simple d'implémenter des
machines à états. On peut ainsi changer de comportement en modifiant uniquement le contenu de la table sans avoir besoin de recompiler le programme.
- Comparaison avec TBB : La principale différence avec TBB est la taille de l'offset lu : TBH utilise 16 bits, contre 8 bits pour TBB. TBH permet donc
d'adresser un espace mémoire beaucoup plus large, au prix d'une table légèrement plus lourde en mémoire, ce qui est à prendre en compte dans les systèmes embarqués.
Dernière mise à jour : Dimanche, le 12 novembre 2017