MVN |
Déplacement et négation |
| ARM |
Syntaxe
|
MVN{S}{cond} Rd, 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 |
| Operand2 |
Ce paramètre permet d'indiquer le deuxième opérande flexible. |
Description
Cette instruction permet de copier une négation d'opérande dans un registre.
Remarques
- MVN effectue une négation binaire : L'instruction MVN ne se contente pas de copier une valeur comme MOV, elle effectue un NOT binaire, c'est-à-dire
une complémentation bit à bit (~Operand2). Elle est utile pour obtenir rapidement l'opposé logique d'une constante ou d'un registre.
- Instruction très utile pour créer des masques : Grâce à sa logique de négation, MVN est souvent utilisée pour créer des masques binaires, en complément
d'instructions comme AND ou ORR. Par exemple, pour désactiver certains bits dans un registre, on peut utiliser MVN pour générer un masque d'annulation.
- Operand2 flexible = puissance de l'instruction : Comme MVN utilise un deuxième opérande flexible (comme MOV, ADD,...), on peut spécifier non seulement des
registres mais aussi des valeurs immédiates transformées (ex : rotation d'une constante sur 8 bits). Cela offre une grande souplesse dans la manipulation de données.
- L'utilisation de S met à jour les drapeaux : En ajoutant le suffixe S, MVN modifie les drapeaux de condition du registre CPSR. Par exemple, si le résultat
est zéro, le drapeau Z sera mis à 1. Cela permet à MVN de s'intégrer dans des branches conditionnelles sans avoir à utiliser CMP.
- MVN peut être utilisé pour simuler des soustractions : Dans certains cas, MVN permet d'obtenir le complément à un d'un nombre, et combiné avec ADD ou ADC,
on peut reconstituer une soustraction. Cela peut être utile en assembleur bas niveau, pour des opérations où la soustraction n'est pas directement applicable.
- Alternative intelligente à MOV pour des constantes : Si une constante immédiate ne peut pas être encodée avec MOV, il est parfois plus simple de passer
par MVN avec une constante complémentaire. Par exemple, MOV R0, #0xFFFFFF00 peut être fait plus facilement via MVN R0, #0xFF.
- MVN est souvent utilisée pour désactiver tous les bits : L'instruction MVN Rd, #0 permet de rapidement remplir un registre avec tous les bits à 1 (0xFFFFFFFF).
C'est un moyen rapide de préparer une valeur par défaut, un masque total, ou un registre prêt à être combiné par AND/EOR.
- Compatible avec l'exécution conditionnelle : Comme de nombreuses instructions ARM, MVN supporte un code de condition {cond}, ce qui permet d'exécuter
l'instruction seulement si une condition est remplie (ex : MVNEQ R0, R1 exécuté uniquement si Z=1). Cela réduit le besoin d'instructions de branchement.
Dernière mise à jour : Dimanche, le 12 novembre 2017