MCR |
Déplace du coprocesseur au registre |
| ARM |
Syntaxe
|
MCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
|
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| coproc |
Ce paramètre permet d'indiquer le nom de l'instruction de coprocesseur |
| opcode1 |
Ce paramètre permet d'indiquer le opcode de coprocesseur en 3 bits. |
| Rt |
Ce paramètre permet d'indiquer le registre source ARM. Le registre ne doit pas être PC. |
| CRn |
Ce paramètre permet d'indiquer le premier opérande de registre de coprocesseur. |
| CRm |
Ce paramètre permet d'indiquer le deuxième opérande de registre de coprocesseur. |
| opcode2 |
Ce paramètre optionnel permet d'indiquer le opcode de coprocesseur en 3 bits. |
Description
Cette instruction permet de déplacer des données du coprocesseur vers un registre ARM.
Remarques
- Interaction entre ARM et coprocesseur : L'instruction MCR permet à un registre ARM standard de transférer une donnée vers un registre d'un coprocesseur.
Elle est essentielle pour configurer ou piloter des modules matériels spécialisés (comme le coprocesseur CP15 utilisé pour la gestion mémoire).
- Instruction souvent utilisée pour le système : MCR est notamment utilisée dans les systèmes embarqués pour accéder à des registres de contrôle, comme ceux
du système mémoire (TLB, MMU), caches, ou contrôleurs spécifiques. On la retrouve souvent dans des séquences d'initialisation ou de configuration bas niveau.
- Pas pour le registre PC : Le registre Rt (source ARM) ne doit jamais être le registre PC (R15). Utiliser le PC peut produire un comportement
imprévisible ou non défini, car l'opération ne correspond pas à un saut ou une instruction logique.
- Instruction privilégiée : L'accès à l'instruction MCR peut être restreint aux modes privilégiés (comme le mode superviseur ou système), car elle touche
souvent à des registres sensibles de configuration. Une tentative d'exécution en mode utilisateur peut entraîner une exception.
- Structure complexe de l'opération : Le découpage en coproc, opcode1, opcode2, CRn, CRm permet de spécifier avec précision le registre cible du
coprocesseur, parfois selon une topologie propre au coprocesseur (comme CP15). Cette structure rend l'instruction très flexible mais un peu lourde à lire sans
documentation du coprocesseur ciblé.
- Instruction dépendante du coprocesseur : MCR est une instruction générique, mais sa signification exacte dépend du coprocesseur ciblé (comme CP10,
CP15,...). Chaque coprocesseur définit son propre jeu de registres CRn, CRm et opcodes, ce qui signifie que l'effet de l'instruction change totalement selon le contexte.
- Complémentaire avec MRC : MCR a une instruction complémentaire : MRC (Move from Coprocessor to ARM register). Là où MCR envoie des données vers le
coprocesseur, MRC permet de lire une valeur à partir du coprocesseur et de la stocker dans un registre ARM. Ces deux instructions sont souvent utilisées en paire.
- Utilisée pour les instructions système spécifiques : Avant l'arrivée d'instructions système dédiées dans ARMv7+ (comme ISB, DSB,...), MCR était utilisée
pour générer manuellement des effets système, par exemple : invalider les caches, vider les TLB, changer des modes,... Aujourd'hui, elle reste encore utilisée dans
les versions plus bas niveau ou spécifiques.
Dernière mise à jour : Dimanche, le 12 novembre 2017