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 |
| #imm16 |
Ce paramètre permet d'indiquer un valeur immédiate de 16 bits. |
Description
Cette instruction permet de copier la partie du haut du mot d'une opérande dans un registre.
Remarques
- MOVT est complémentaire à MOVW : MOVT permet de charger la moitié supérieure (16 bits) d'un registre sans affecter la moitié inférieure. Elle est
souvent utilisée avec MOVW (Move Wide) pour charger une valeur 32 bits complète en deux temps dans un registre.
- Chargement précis de valeurs 32 bits : Lorsque MOVT est utilisé après un MOVW, la combinaison permet de spécifier exactement une valeur entière 32 bits.
Cela est crucial pour le traitement d'adresses, de pointeurs, ou de constantes entières importantes.
- Ne modifie que les bits [31:16] : L'opération MOVT ne modifie pas les bits [15:0] du registre de destination. Si ces bits contiennent déjà une valeur, elle
est conservée. Cela peut provoquer des erreurs si l'on oublie d'effacer ou d'initialiser correctement le registre avec MOVW d'abord.
- Utilisée dans des pseudo-instructions : Quand on écrit LDR r0, =0x12345678, l'assembleur le traduit souvent automatiquement en un couple MOVW + MOVT. Cela
évite au programmeur d'avoir à manipuler directement les deux instructions, mais il est utile de comprendre leur fonctionnement.
- Instruction utile pour des accès mémoire complexes : Si une adresse mémoire n'est pas atteignable directement par un déplacement, on peut charger
l'adresse avec MOVW/MOVT, puis l'utiliser dans des instructions de chargement (LDR, STR, etc.). C'est une méthode courante pour gérer des structures ou des tampons.
- Supporte l'exécution conditionnelle : Le paramètre {cond} permet de n'exécuter MOVT que si certaines conditions sont remplies, selon les drapeaux du
processeur (exemple : EQ, NE, LT, etc.). Cela permet d'optimiser le flot de contrôle sans branchement explicite.
- Attention aux limites du champ immédiat : Le paramètre #imm16 ne peut pas dépasser 16 bits (soit 0xFFFF). Il ne peut donc être utilisé seul pour des
constantes 32 bits. Il faut impérativement combiner MOVT avec MOVW si l'objectif est de charger une valeur complète en une seule fois.
- Optimisation mémoire et performance : L'usage de MOVT (et MOVW) pour charger une constante peut être plus rapide et moins coûteux en cycles qu'un accès
mémoire avec LDR, car il n'y a pas besoin de chercher la constante en RAM ou dans un segment de données en lecture seulement.
Dernière mise à jour : Dimanche, le 12 novembre 2017