CBZ |
Branchement et branchement si zéro |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| Rn |
Ce paramètre permet d'indiquer le registre contenant l'opérande. |
| label |
Ce paramètre permet d'indiquer la destination de l'adresse de branchement. |
Description
Cette instruction permet d'effectuer une comparaison et branchement si vaut zéro.
Remarques
- Instruction conditionnelle simplifiée : CBZ permet d'effectuer un branchement conditionnel si le contenu d'un registre est égal à zéro. Cela remplace
l'utilisation combinée d'une instruction de comparaison (CMP) suivie d'un branchement conditionnel (BEQ). Elle simplifie donc le code et permet d'économiser des cycles
d'horloge dans les processeurs ARM.
- Très utile pour vérifier des états ou des drapeaux : Dans de nombreux programmes, on utilise des registres pour stocker des états binaires (actif/inactif,
vrai/faux). CBZ permet de tester rapidement si un état est désactivé (valeur 0) pour prendre une décision de branchement, par exemple sortir d'une boucle ou éviter
l'exécution d'un bloc de code.
- Syntaxe claire et lisible : La syntaxe CBZ Rn, label est à la fois simple et facile à comprendre. Elle indique directement que si Rn est égal à zéro,
alors le programme saute à l'étiquette indiquée. Cela améliore la lisibilité du code assembleur, surtout pour les débutants qui peuvent facilement comprendre l'intention
du code.
- Optimisation du code et performance : Comme pour CBNZ, CBZ réduit le nombre d'instructions nécessaires pour un test conditionnel. Cela optimise la taille
du code et améliore la vitesse d'exécution. Cette instruction est donc particulièrement adaptée aux systèmes embarqués où la mémoire et les cycles processeur sont
précieux.
- Instruction non destructive : CBZ ne modifie aucun drapeau dans le registre d'état du processeur (CPSR). Cela permet de l'utiliser sans affecter les
résultats d'autres comparaisons précédentes. Elle est donc très pratique dans un code où plusieurs conditions doivent être testées successivement sans perturber le
contexte du processeur.
- Utilisation typique dans les conditions de boucle : CBZ est souvent utilisée pour terminer une boucle lorsqu'un compteur ou une condition atteint zéro.
Par exemple, après décrémentation d'un registre, CBZ peut vérifier si la valeur est nulle et ainsi interrompre le cycle. Cela remplace efficacement un CMP Rn, #0 suivi
d'un BEQ.
- Portée limitée du saut : Le label dans CBZ représente une adresse relative dans le code. Cela signifie que le saut doit se faire vers une
adresse proche, généralement dans une plage de +/-1 Mo (selon l'implémentation). Si la cible est trop éloignée, il faut alors utiliser une autre approche, comme une
combinaison d'instructions.
- Supportée par les architectures ARM modernes : CBZ fait partie des instructions introduites avec ARMv6T2 et plus, et est largement supportée dans
les microprocesseurs modernes utilisant les architectures ARMv7 et ARMv8. Elle fait partie de l'ensemble des instructions dites "Thumb-2", optimisées pour le code compact
et efficace.
Dernière mise à jour : Dimanche, le 12 novembre 2017