MRS (PSR à registre général) |
Déplace le registre |
|---|---|
| ARM | |
Syntaxe
| MRS{cond} Rd, psr |
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. | |
| psr | Ce paramètre permet d'indiquer l'opération à appliquer : | |
| Constante | Description | |
| APSR | Cette constante s'applique à n'importe quel processeur et n'importe quel mode. | |
| CPSR | Cette constante est un synonyme APSR avec un état de déboguage sous n'importe quel processeur sauf ARMv7-M et ARMv6-M. | |
| SPSR | Cette constante s'applique à n'importe quel processeur sauf ARMv7-M et ARMv6-M, dans l'exécution de privilège de logiciel. | |
| Mpsr | Cette valeur permet d'indiquer une des constantes suivantes : IPSR, EPSR, IEPSR, IAPSR, EAPSR, MSP, PSP, XPSR, PRIMASK, BASEPRI, BASEPRI_MAX, FAULTMASK ou CONTROL. | |
Description
Cette instruction permet de copier le contenu d'un PSR ver un registre général.
Remarques
- Passage d'état système à registre général : L'instruction MRS permet de transférer l'état interne du processeur contenu dans un PSR (Program Status Register) vers un registre général. Cela permet à un programme d'accéder à des informations système comme les drapeaux de condition, les masques d'interruption ou l'état du mode processeur.
- Outil crucial pour le débogage et les systèmes critiques : Cette instruction est particulièrement utile en débogage, ou dans des routines critiques, pour lire l'état du processeur à un moment donné. Elle permet d'analyser le comportement du programme et de prendre des décisions spécifiques en fonction du contexte d'exécution.
- Flexibilité grâce au paramètre psr : Le paramètre psr offre une grande flexibilité : selon le type d'état à lire, on peut cibler l'APSR, le CPSR, le SPSR ou encore des états spécifiques via les mpsr comme IPSR, CONTROL, ou FAULTMASK. Cela permet d'adapter l'instruction aux différents profils de processeur ARM, notamment les Cortex-M.
- Accès restreint selon le niveau de privilège : Certaines variantes de PSR, comme le SPSR, ne sont accessibles que dans des modes de privilège. Par conséquent, un programme tournant en mode utilisateur ne pourra pas toujours exécuter MRS sur tous les types de PSR, ce qui impose une gestion rigoureuse des droits d'accès.
- Comportement spécifique selon l'architecture : L'interprétation de CPSR ou SPSR change légèrement selon l'architecture : par exemple, ARMv7-M et ARMv6-M n'ont pas de CPSR, et utilisent des variantes comme xPSR ou CONTROL. Il est donc essentiel d'adapter l'instruction à la version du processeur cible pour éviter des comportements non définis.
- Incompatibilité avec certains registres comme PC : Bien que Rd puisse être n'importe quel registre général, il ne doit pas être le registre PC, car cela provoquerait un comportement indéterminé, voire un plantage du programme. Cette restriction est importante pour éviter des sauts non contrôlés ou une corruption du flot d'exécution.
- Complément de l'instruction MSR : L'instruction MRS est souvent utilisée en tandem avec MSR, effectuant l'opération inverse (copier un registre général vers un PSR). Ensemble, elles permettent de lire, modifier, puis restaurer des états système de manière fine et contrôlée, notamment dans des sections critiques ou pour le basculement de contexte.
- Utilisation typique : lecture des drapeaux d'état : Une des utilisations les plus fréquentes de MRS est la lecture de l'APSR (Application Program Status Register), contenant les drapeaux N, Z, C et V. Cela permet à un programme de prendre des décisions logiques sans dépendre uniquement des instructions conditionnelles, ce qui peut améliorer la clarté et la modularité du code.
Dernière mise à jour : Dimanche, le 12 novembre 2017