Syntaxe
MOV{S}{cond} Rd, Operand2
|
MOV{cond} Rd, #imm16
|
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. |
#imm16 |
Ce paramètre permet d'indiquer n'importe quel valeur dans l'intervalle de 0 à 65535. |
Description
Cette instruction permet de copier une opérande ou une valeur immédiate dans un registre.
Remarques
- Instruction de transfert de données la plus simple : MOV est l'instruction de transfert de registre la plus simple en ARM : elle copie une valeur immédiate
ou le contenu d'un autre registre (avec éventuel décalage) dans le registre de destination. Elle n'effectue aucun calcul complexe, seulement un transfert pur.
- Peut copier un registre ou une constante immédiate : L'instruction peut prendre deux formes principales : MOV Rd, Rn (copie de registre à registre), ou
MOV Rd, #imm16 (chargement immédiat). La deuxième forme permet de charger des valeurs immédiates sur 16 bits, ce qui est utile mais limité comparé à des instructions
comme MOVW/MOVT.
- Possibilité d'ajouter une mise à jour des drapeaux : Avec le suffixe S, comme dans MOVS, l'instruction met à jour les drapeaux de statut (Negative, Zero,
Carry, Overflow). Cela est utile pour préparer des branches conditionnelles sans ajouter une instruction de comparaison dédiée (CMP).
- Instruction conditionnelle grâce au suffixe {cond} : Comme beaucoup d'instructions ARM classiques, MOV peut être rendue conditionnelle avec un suffixe
cond (EQ, NE, GT,...). Par exemple, MOVEQ exécute le transfert seulement si le drapeau Z est activé, ce qui rend le code ARM très compact et efficace.
- Support de Operand2 avec décalage : Dans la forme MOV Rd, Operand2, Operand2 peut être un registre avec un décalage logique (LSL/LSR) ou arithmétique,
voire une rotation. Cela permet de transformer la donnée en vol lors du transfert, sans recourir à des instructions de traitement séparées.
- Utile pour l'initialisation ou le masquage : MOV est très souvent utilisée pour initialiser des registres, notamment avec MOV Rd, #0 pour une remise
à zéro. Elle peut également servir à préparer des masques binaires avant une opération logique, ou simplement copier une valeur sans la modifier.
- Limitée en taille d'immédiat sur ARM classique : En architecture ARM traditionnelle, MOV ne permet pas de charger toute valeur 32 bits en immédiat
directement. Pour cela, on utilise généralement MOVW et MOVT combinés, ou bien des séquences avec LDR pour accéder à des constantes en mémoire.
- Fonctionne comme un alias dans certaines architectures : Dans ARMv8-A (AArch64), MOV est souvent un alias pour d'autres instructions comme ORR ou MOVZ,
selon le contexte et les opérandes. Par exemple, MOV X0, X1 peut être une forme abrégée de ORR X0, XZR, X1, ce qui reflète la logique du processeur moderne.
Dernière mise à jour : Dimanche, le 12 novembre 2017