Syntaxe
|
MUL{S}{cond} {Rd}, Rn, Rm
|
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 la première valeur à multiplier. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant la deuxième valeur à multiplier. |
Description
Cette instruction permet d'effectuer une multiplication.
Remarques
- Instruction simple mais essentielle : MUL est l'instruction de multiplication de base en assembleur ARM. Elle prend deux opérandes (Rn et Rm) et place le
résultat dans un registre de destination (Rd). Elle est largement utilisée dans de nombreuses routines mathématiques de bas niveau.
- Résultat tronqué sur 32 bits : La multiplication retourne uniquement les 32 bits de poids faible du résultat, même si les registres sont de 32 bits. Si le
résultat réel dépasse cette taille, les bits de poids fort sont perdus. Pour une multiplication complète sur 64 bits, il faut utiliser l'instruction SMULL ou UMULL.
- Mise à jour des drapeaux conditionnels : Avec le suffixe S, MUL peut mettre à jour les drapeaux du registre CPSR, en particulier le Zero (Z) et
Négatif (N). Cela permet d'intégrer la multiplication dans des séquences de contrôle conditionnel, sans avoir à ajouter une instruction de comparaison.
- L'ordre des opérandes Rn et Rm : Techniquement, dans ARM, les deux opérandes sont interchangeables pour MUL, car la multiplication est commutative.
Cependant, certaines architectures optimisent selon un ordre précis, donc il est préférable de suivre la documentation officielle ou les conventions du compilateur.
- Disponible dans toutes les architectures ARM : L'instruction MUL est présente dans toutes les versions principales de l'architecture ARM, y compris
ARMv4 et au-delà. Elle fait partie des instructions fondamentales, garantissant une compatibilité et une portabilité élevée du code.
- Instruction plus lente que les instructions arithmétiques simples : La multiplication est plus complexe en termes de cycles CPU que des instructions comme
ADD ou SUB. Son temps d'exécution dépend du processeur, certains ayant une unité de multiplication rapide, d'autres l'effectuant sur plusieurs cycles.
- Code conditionnel grâce à {cond} : L'ajout d'un code de condition {cond} permet d'exécuter MUL seulement si certaines conditions sont remplies,
comme EQ (equal), NE (not equal),... Cela permet d'écrire du code très compact, sans brancher, en utilisant l'exécution conditionnelle propre à ARM.
- Optimisations possibles via le compilateur : Les compilateurs modernes peuvent remplacer des séquences d'additions répétées par une MUL pour optimiser
les performances. À l'inverse, dans certains cas, des multiplications par des puissances de 2 peuvent être converties en décalages logiques (LSL) pour gagner du temps.
Dernière mise à jour : Dimanche, le 12 novembre 2017