STC |
Transfère vers le coprocesseur |
|---|---|
| ARM | |
Syntaxe
| STC{L}{cond} coproc, CRd, [Rn] |
| STC{L}{cond} coproc, CRd, [Rn, #{-}offset] |
| STC{L}{cond} coproc, CRd, [Rn, #{-}offset]! |
| STC{L}{cond} coproc, CRd, [Rn], #{-}offset |
| STC{L}{cond} coproc, CRd, [Rn], {option} |
Paramètres
| Nom | Description |
|---|---|
| cond | Ce paramètre optionnel permet d'indiquer le code de condition |
| L | Ce paramètre d'indiquer un suffixe spécifiant un long transfert. |
| coproc | Ce paramètre permet d'indiquer le nom de l'instruction du coprocesseur. Le nom standard doit être un entier dans l'intervalle de 0 à 15. |
| CRd | Ce paramètre permet d'indiquer le registre du coprocesseur à charger. |
| Rn | Ce paramètre permet d'indiquer le registre sur lequel l'adresse mémoire est basé. Si PC est spécifié, la valeur utilisé est l'adresse de l'instruction courante plus 8. |
| - | Ce paramètre optionnel permet d'indiquer qu'il faut soustraire le déplacement au paramètre Rn. Autrement, si le paramètre n'est pas indiquer, il additionnera le déplacement au paramètre Rn. |
| offset | Ce paramètre permet d'indiquer une expression à évaluer en la multipliant par 4, dans l'intervalle de 0 à 1020. |
| ! | Ce paramètre optionnel permet d'indiquer un suffixe indiquant que l'adresse est inclus dans le déplacement écrit dans le paramètre Rn. |
| {option} | Ce paramètre permet d'indiquer une option dans l'intervalle de 0 à 255 situé entre accolade. |
Description
Cette instruction permet de transférer des données entre la mémoire et le coprocesseur.
Remarques
- Transfert mémoire vers coprocesseur : L'instruction STC est conçue pour transférer des données depuis un registre du coprocesseur vers la mémoire. Elle agit donc comme une instruction d'entreposage spécialisée, utilisée lorsqu'un coprocesseur (comme un FPU ou un coprocesseur de sécurité) est intégré au système.
- Instruction complémentaire à LDC : STC est la contrepartie de l'instruction LDC (Load from Coprocessor). Tandis que LDC charge des données depuis la mémoire vers un registre du coprocesseur, STC fait l'opération inverse. Elles sont donc souvent utilisées en tandem pour la sauvegarde/restauration d'état.
- Souplesse d'adressage mémoire : L'instruction prend en charge de multiples modes d'adressage, avec incréments, décréments, déplacements, pré-indexation ou post-indexation. Cela permet de s'adapter à divers scénarios d'accès mémoire, notamment pour parcourir des blocs de mémoire ou implémenter des piles.
- Paramètre L pour transfert long : Le suffixe L spécifie que le transfert est un transfert long, ce qui peut modifier la taille des données transférées ou l'alignement mémoire attendu. Cette distinction est importante pour certains coprocesseurs comme le VFP (coprocesseur flottant vectoriel).
- Utilisation dépendante du coprocesseur : Le comportement de STC dépend fortement du coprocesseur ciblé (de 0 à 15). ARM ne définit pas le fonctionnement exact de cette instruction pour chaque coprocesseur?: il revient au matériel (ou à l'émulateur) d'interpréter la signification et la validité des transferts.
- Accès à des registres de coprocesseur : Le champ CRd identifie le registre cible à l'intérieur du coprocesseur. Cela peut être un registre de données, de contrôle ou d'état, selon l'implémentation du coprocesseur, ce qui rend l'instruction très souple mais aussi très spécifique au contexte matériel.
- Déplacement exprimé en mots : Le paramètre offset est exprimé en multiples de 4 octets (taille d'un mot ARM), avec une valeur effective dans l'intervalle [0, 1020]. Ce choix optimise l'espace d'encodage binaire de l'instruction et est cohérent avec l'architecture 32 bits du processeur.
- Instruction souvent restreinte ou désactivée : Sur certaines architectures modernes, STC peut être restreinte ou désactivée, notamment sur les coeurs ARMv7-A sans coprocesseur ou dans les environnements sécurisés. De plus, elle est souvent non supportée en mode Thumb, ce qui limite son usage dans certains cas.
Dernière mise à jour : Dimanche, le 12 novembre 2017