RSB |
Inverse la soustraction |
| ARM |
Syntaxe
|
RSB{S}{cond} {Rd}, Rn, Operand2
|
Paramètres
| Nom |
Description |
| S |
Ce paramètre optionnel permet d'indiquer le suffixe. Si ce paramètre est spécifié, les drapeaux de condition sont mise à jour dans le résultat de l'opérande |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rd |
Ce paramètre permet d'indiquer le registre de destination. |
| Rn |
Ce paramètre permet d'indiquer le registre contenant le premier opérande. |
| operand2 |
Ce paramètre permet d'indiquer le deuxième opérande flexible. |
Description
Cette instruction permet d'effectuer une soustraction inversé.
Remarques
- Opération de soustraction inversée atypique mais utile : Contrairement à l'instruction classique SUB, RSB inverse l'ordre des opérandes : elle calcule
Operand2 - Rn au lieu de Rn - Operand2. Cette inversion permet de manipuler certaines expressions arithmétiques sans avoir à réorganiser les registres, ce qui est très
pratique dans certains cas algorithmiques.
- Utile pour obtenir un opposé : Une des utilisations les plus simples de RSB est de calculer l'opposé d'une valeur, par exemple RSB Rd, Rn, #0 donne -Rn.
C'est une façon plus directe et souvent plus performante d'obtenir la négation d'un entier, surtout dans des boucles mathématiques.
- Utilise un opérande flexible puissant : Le deuxième opérande (Operand2) peut inclure des valeurs immédiates, des registres avec décalages ou des
rotations. Cela donne à RSB une grande souplesse dans l'expression arithmétique, sans devoir recourir à plusieurs instructions intermédiaires.
- Peut mettre à jour les drapeaux du processeur : L'utilisation du suffixe S permet de mettre à jour les drapeaux de condition (N, Z, C, V) en fonction du
résultat. Cela permet à RSB d'être utilisée dans des séquences conditionnelles sans avoir à ajouter une instruction CMP supplémentaire.
- Instruction essentielle dans certaines structures de contrôle : L'instruction RSB est souvent utilisée dans la génération de structures de contrôle comme
les comptages à rebours ou les opérations de borne supérieure inversée dans des boucles. Elle est donc utile en compilation optimisée ou en programmation de bas niveau.
- Complémentaire de SUB et NEG : Elle complète utilement SUB et NEG. Tandis que NEG inverse une seule valeur, et SUB effectue une soustraction classique,
RSB offre la flexibilité de renverser les termes dans une opération de soustraction à deux opérandes, tout en gardant la logique arithmétique cohérente.
- Exploitable pour le calcul de distances ou d'écarts : Dans les calculs où l'on veut mesurer un écart entre deux valeurs (exemple abs(a - b)), RSB peut
être utilisée avec une séquence conditionnelle pour gérer les cas où le second opérande est plus petit que le premier, sans forcément faire appel à une fonction de
valeur absolue.
- Attention aux effets de bord sur les drapeaux : Lorsque le suffixe S est utilisé, il faut prendre garde aux effets de bord sur les drapeaux, notamment
dans les contextes critiques comme les interruptions, où l'état du programme dépend de ces drapeaux. Une mauvaise gestion pourrait entraîner des erreurs de logique
subtiles.
Dernière mise à jour : Dimanche, le 12 novembre 2017