MOV32 |
Déplacement 32 bits |
| ARM |
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 à charger |
| expr |
Ce paramètre permet d'indiquer n'importe quel expression parmi les suivantes : |
| symbol |
Cette expression permet d'indiquer une étiquette dans cette région ou dans une autre région du programme. |
| #constant |
Cette expression permet d'indiquer n'importe quel valeur immédiate 32 bits. |
| symbol + constant |
Cette expression permet d'indiquer une étiquette plus une valeur immédiate 32 bits. |
Description
Cette instruction permet de charger le registre avec une valeur immédiate de 32 bits ou n'importe quelle adresse.
Remarques
- MOV32 permet de charger une valeur 32 bits complète : Contrairement à l'instruction classique MOV, pouvant être limitée à une
valeur immédiate codée sur 12 bits, MOV32 permet de charger une valeur immédiate complète de 32 bits dans un registre. Cela évite de devoir assembler manuellement la
valeur via plusieurs instructions comme MOVW et MOVT.
- Utilisation flexible avec des symboles et des constantes : Le paramètre expr offre une grande souplesse : on peut lui fournir une valeur
constante, une étiquette (adresse symbolique), ou même une étiquette avec décalage constant. C'est idéal pour charger des adresses de fonctions, de variables globales,
ou de structures mémoire.
- MOV32 est souvent un pseudo-opcode : Il ne correspond pas toujours à une instruction machine unique. Le compilateur ou l'assembleur traduit généralement
MOV32 en une séquence d'instructions, typiquement MOVW + MOVT. Ce pseudo-opcode simplifie l'écriture du code assembleur pour le programmeur.
- L'usage de labels rend le code plus lisible : En utilisant des symboles comme expr, MOV32 permet de référencer des éléments du programme de façon plus
abstraite et maintenable. Par exemple, au lieu de coder une adresse hexadécimale en dur, on peut écrire MOV32 r0, =MaTable.
- Accès direct à des adresses mémoire éloignées : MOV32 est utile dans des cas où l'adresse cible est hors de portée d'un simple offset ou au-delà de
l'intervalle immédiate autorisée par d'autres instructions. Cela permet par exemple de charger l'adresse d'un périphérique mémoire-cartographié ou d'une zone tampon
spécifique.
- Compatible avec l'exécution conditionnelle : Le champ {cond} permet d'exécuter cette instruction sous certaines conditions définies par les drapeaux
d'état du processeur (EQ, NE, GT,...). Cela permet d'intégrer MOV32 dans des séquences de branchement conditionnel sans saut explicite.
- Risque d'ambiguïté si expr n'est pas correctement déclaré : Si expr est un symbole mal défini ou une combinaison incorrecte (comme symbol +
undefined_constant), cela peut entraîner une erreur à l'édition de liens. Il est important de bien structurer les définitions symboliques dans le code ou le fichier de
liens.
- Très utile pour l'initialisation de pointeurs : L'instruction MOV32 est très pratique pour initialiser des pointeurs vers des structures, des tableaux
ou des zones mémoire dynamiques. Elle permet une configuration rapide et lisible des registres pour accéder aux bonnes zones mémoire.
Dernière mise à jour : Dimanche, le 12 novembre 2017