SUB |
Soustraction |
|---|---|
| ARM | |
Syntaxe
|
SUB{S}{cond} {Rd}, Rn, Operand2 SUB{cond} {Rd}, Rn, #imm12 |
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. |
| #imm12 | Ce paramètre permet d'indiquer une valeur dans l'intervalle de 0 à 4095. |
Description
Cette instruction permet d'effectuer une soustraction.
Remarques
- SUB est l'instruction de base pour effectuer des soustractions : L'instruction SUB soustrait le deuxième opérande (Operand2 ou #imm12) de la valeur contenue dans Rn, et entrepose le résultat dans Rd. Elle est très utilisée pour des opérations arithmétiques, des décalages d'adresses, ou pour ajuster des compteurs et pointeurs.
- L'option {S} permet de mettre à jour les drapeaux : Avec le suffixe S, l'instruction met à jour les drapeaux de condition du CPSR (comme Zéro, Négatif, Overflow). Cela permet d'enchaîner avec des instructions conditionnelles (exemple BEQ, BNE,...), et donc de construire des branches intelligentes en fonction du résultat.
- Operand2 est très flexible : Operand2 peut être un registre, un registre avec décalage, ou une constante immédiate encodée dans un format spécial. Cela permet d'effectuer des soustractions complexes sans avoir à charger ou préparer plusieurs registres au préalable, ce qui optimise l'espace et les cycles.
- L'utilisation de #imm12 simplifie les opérations immédiates : La variante immédiate permet de soustraire des valeurs constantes jusqu'à 4095, ce qui couvre une large plage d'opérations. Cela est utile pour ajuster des adresses, faire des boucles décrémentales, ou gérer des index de tableau directement sans variables intermédiaires.
- SUB est non-destructif sur les opérandes sources : Les registres Rn et Operand2 (ou #imm12) ne sont pas modifiés pendant l'exécution de l'instruction. Cela permet de les réutiliser après la soustraction, ce qui est fondamental dans les algorithmes où l'on manipule les mêmes valeurs à plusieurs reprises.
- SUB peut être utilisé pour simuler des opérations d'addition négative : En combinant SUB avec une valeur négative ou en inversant les opérandes dans des contextes spécifiques, on peut simuler des déductions conditionnelles ou des ajustements relatifs, comme dans le calcul d'un décalage mémoire ou une date.
- Les instructions SUBS, SUBEQ,..., permettent des logiques conditionnelles puissantes : On peut combiner SUB avec des conditions (exemple : SUBEQ, SUBNE, SUBGT, etc.) pour exécuter l'instruction seulement si un certain état de drapeau est actif. Cela économise des branchements explicites et rend le code plus compact et rapide.
- Peut être utilisée pour créer des boucles décrémentales efficaces : En décrémentant un compteur avec SUB, et en testant le résultat avec les drapeaux, on peut créer une boucle de type for/while entièrement en assembleur sans instructions de comparaison explicite. Cela permet d'optimiser les performances sur des microcontrôleurs.
Dernière mise à jour : Dimanche, le 12 novembre 2017