MSR (registre à PSR) |
Déplace le registre |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition. |
| flags |
Ce paramètre permet d'indiquer le drapeau de déplacement à appliquer : |
| nzcvq |
Cette valeur permet d'indiquer un masque de champ de drapeau ALU, mode utilisateur PSR[31:27]. |
| g |
Cette valeur permet d'indiquer un masque de champ de drapeau GE de SIMD, mode utilisateur PSR[19:16]. |
| Rm |
Ce paramètre permet d'indiquer le registre source. |
Description
Cette instruction permet de charger immédiatement une valeur ou le contenu d'un registre général dans les champs spécifié d'un PSR (Program Status Register).
Remarques
- Incohérence dans la syntaxe affichée : La syntaxe présentée est MSR{cond} APSR_flags, Rm, mais la norme ARM utilise généralement la forme MSR{cond}
psr_fields, Rm. La mention de APSR_flags est inhabituelle ; il serait plus clair d'écrire MSR APSR_nzcvq, Rm ou simplement MSR APSR, Rm avec un champ de masque
précisé à part.
- Erreur dans la description de l'effet : La phrase «permet de charger immédiatement une valeur » pourrait induire en erreur. Cette version de
l'instruction ne permet pas de charger une constante immédiate, contrairement à d'autres instructions. Elle copie uniquement le contenu d'un registre général (Rm) dans
les champs désignés du PSR. La formulation devrait être précisée.
- Utilisation pour modifier les drapeaux du processeur : Cette instruction est surtout utilisée pour forcer la valeur des drapeaux conditionnels
(N, Z, C, V, Q), utiles pour modifier le comportement du processeur sans devoir effectuer une opération arithmétique classique. C'est un outil précieux pour manipuler
l'état d'exécution de manière contrôlée.
- Instruction réservée à des contextes privilégiés : L'usage de MSR pour écrire dans certains champs du PSR est réservé aux niveaux de privilège élevés
(mode superviseur, gestionnaire,...). En mode utilisateur, seul un sous-ensemble restreint du PSR peut être modifié.
- Les masques nzcvq et g doivent être mieux expliqués : Les valeurs nzcvq et g indiquent des masques de bits spécifiques dans
le PSR, mais cela pourrait être mieux détaillé. Par exemple, nzcvq concerne les bits [31:27], utilisés pour les flags de l'unité arithmétique, tandis que g concerne
les bits [19:16], utilisés pour les comparaisons SIMD. Il serait pertinent de montrer un exemple binaire.
- Le champ Rm doit être un registre, pas une constante : Contrairement à d'autres formes de MSR autorisant un littéral, cette instruction ne
fonctionne qu'avec un registre général comme source. Ce détail est important et doit être souligné pour éviter les confusions chez les programmeurs débutants.
- L'instruction dépend de l'architecture ARM ciblée : L'instruction MSR avec accès au PSR n'est pas disponible de la même manière selon les architectures
ARM. Par exemple, les ARMv7-M utilisent un modèle PSR différent des ARMv7-A, et certains champs sont même inaccessibles ou virtuels dans ARMv8. Cette dépendance devrait
être mentionnée.
- Fréquemment utilisée dans la restauration de contexte : Dans les routines d'interruption ou les contextes d'échanges, cette instruction est souvent
utilisée pour restaurer les drapeaux d'état après avoir traité une interruption ou un appel système. Elle s'inscrit donc dans une logique de gestion de contexte,
essentielle en programmation bas-niveau ou en système d'exploitation embarqué.
Dernière mise à jour : Dimanche, le 12 novembre 2017