Syntaxe
Paramètres
| Nom |
Description |
| 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 la valeur à diviser. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant le diviseur. |
Description
Cette instruction permet d'effectuer une division de nombre entier.
Remarques
- Division entière avec gestion du signe : L'instruction SDIV effectue une division entière signée, ce qui signifie que le quotient résultant conserve le
signe mathématiquement correct selon les règles de l'arithmétique des entiers. Le résultat est tronqué vers zéro, comme dans le langage C.
- Aucune gestion automatique du reste : Contrairement à certaines architectures, SDIV ne calcule que le quotient de la division. Si l'on souhaite obtenir
le reste de la division, il faudra utiliser une instruction distincte ou recalculer manuellement via Rn - (Rm * quotient).
- Diviseur nul = comportement imprévisible : Diviser par zéro avec SDIV n'est pas détecté par l'instruction : aucun signal d'erreur ou exception n'est levé
automatiquement. Le résultat est imprévisible ou dépend de l'implémentation du processeur, ce qui impose une vérification manuelle préalable du diviseur.
- Instruction parfois plus lente : Comparée aux opérations comme l'addition ou la multiplication, la division est souvent plus coûteuse en cycles
d'horloge. Bien que SDIV soit pratique, elle peut avoir un impact non négligeable sur les performances dans des boucles critiques.
- Support conditionnel selon l'architecture : SDIV est prise en charge à partir de l'architecture ARMv7. Sur les architectures antérieures, elle n'est pas
disponible, ce qui impose d'utiliser des solutions logicielles de repli, comme des divisions par multiplication inverse.
- Support des suffixes conditionnels : Comme de nombreuses instructions ARM, SDIV accepte un code conditionnel (cond) permettant d'exécuter l'instruction
uniquement si une condition est remplie (par exemple EQ, NE, LT...), ce qui est utile dans les contextes de branchement optimisé.
- Particulièrement utile pour le traitement arithmétique : SDIV est souvent utilisée dans des algorithmes mathématiques, comme ceux impliquant des
transformations numériques, des calculs de moyennes, ou des normalisations, lorsqu'une division entière signée est nécessaire avec une implémentation native.
- Rd peut être identique à Rn ou Rm : Le registre de destination Rd peut être le même que Rn ou Rm, ce qui autorise une réutilisation des registres sans
instructions supplémentaires pour le stockage intermédiaire. Cela permet un codage plus compact et des programmes plus rapides.
Dernière mise à jour : Dimanche, le 12 novembre 2017