TBB |
Branchement d'une table d'octet |
| 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 octet.
Remarques
- Branchement indirect par table : L'instruction TBB permet de réaliser un branchement indirect en utilisant une table d'octets. L'adresse de saut est
déterminée dynamiquement en ajoutant la valeur contenue dans Rm à la base Rn, puis en lisant un octet dans la mémoire pour obtenir le déplacement. Cela rend TBB très
utile pour implémenter rapidement des machines à états ou des tables de sauts.
- Accès optimisé à des tables compactes : Comme TBB utilise des octets (8 bits) pour les déplacements, cela permet d'avoir des tables de branchement très
compactes en mémoire. C'est particulièrement avantageux dans les systèmes embarqués où la mémoire est limitée, car chaque entrée de table n'occupe qu'un seul octet.
- Restrictions sur les registres utilisés : Le registre Rm ne peut pas être PC (Program Counter) ni SP (Stack Pointer). Cette
restriction vise à préserver la cohérence du saut dynamique et éviter des comportements non prévisibles, car utiliser PC ou SP comme index pourrait introduire de fortes
instabilités dans le programme.
- Calcul de l'adresse de saut : La valeur finale d'adresse de saut est obtenue en ajoutant le déplacement d'un octet à l'adresse de l'instruction suivante
(PC + 4 ou PC + 8 selon le pipeline ARM). Ainsi, l'offset est relatif, ce qui facilite la création de codes indépendants de leur position en mémoire (position-independent
code).
- Utilisation dans les tables de répartiteur : TBB est souvent utilisée dans la mise en oeuvre de tables de répartiteur rapide, par exemple pour traiter
rapidement différentes valeurs d'un switch-case dans le langage C. Cela permet d'accélérer considérablement l'exécution par rapport
à une suite d'instructions de comparaison classique.
- Performance améliorée grâce à l'instruction dédiée : L'utilisation de TBB améliore les performances, car au lieu de multiples tests et comparaisons, un seul
accès mémoire et un saut suffisent pour prendre la décision d'exécution. Cela réduit le nombre de cycles processeur nécessaires et améliore le débit des programmes critiques.
- Flexibilité du branchement par calcul : TBB donne au programmeur une grande flexibilité : en modifiant simplement la table d'octets, on peut modifier la
logique de branchement sans changer le code principal. Cela permet par exemple de reprogrammer dynamiquement des comportements, comme des FSM (Finite State Machines)
évolutives.
- Différence avec TBH : Il est important de noter que TBB utilise un octet pour l'offset, alors que son instruction sour, TBH (Table Branch Halfword),
utilise un demi-mot (16 bits). TBB est donc plus adaptée aux tables petites ou aux déplacements limités, tandis que TBH permet des sauts plus éloignés.
Dernière mise à jour : Dimanche, le 12 novembre 2017