STR (déplacement immédiat) |
Entreposage |
|---|---|
| ARM | |
Syntaxe
| STR{type}{cond} Rt, [Rn {, #offset}] |
| STR{type}{cond} Rt, [Rn, #offset]! |
| STR{type}{cond} Rt, [Rn], #offset |
| STRD{cond} Rt, Rt2, [Rn {, #offset}] |
| STRD{cond} Rt, Rt2, [Rn, #offset]! |
| STRD{cond} Rt, Rt2, [Rn], #offset |
Paramètres
| Nom | Description | |
|---|---|---|
| type | Ce paramètre optionnel permet d'indiquer le type de données à appliquer : | |
| Constante | Description | |
| B | Cette constante permet d'indiquer un octet. | |
| H | Cette constante permet d'indiquer un demi-mot. | |
| - | Cette constante permet d'indiquer un mot. | |
| cond | Ce paramètre optionnel permet d'indiquer le code de condition. | |
| Rt | Ce paramètre optionnel permet d'indiquer un registre à entreposer | |
| Rn | Ce paramètre optionnel permet d'indiquer un registre sur lequel l'adresse mémoire est basé. | |
| offset | Ce paramètre permet d'indiquer une déplacement. | |
| Rt2 | Ce paramètre permet d'indiquer un registre additionnel où entreposer les opérations de double mot. | |
Description
Cette instruction permet d'entreposer un déplacement immédiat, un déplacement de registre de pré-index, ou un déplacement postage d'index immédiat.
Remarques
- Instruction de base pour l'entreposage en mémoire : STR (Store Register) est l'une des instructions ARM les plus fondamentales. Elle permet de copier la valeur d'un registre général (Rt) vers une adresse mémoire. Cela en fait un outil essentiel pour la gestion de variables, de piles, ou de structures de données en mémoire.
- Trois modes de calcul d'adresse : L'instruction prend en charge trois formes de déplacement immédiat?: déplacement simple, pré-indexé avec écriture dans Rn, ou post-indexé après utilisation de l'adresse initiale. Cette variété donne une grande souplesse dans l'écriture de boucles ou de fonctions manipulant des tableaux ou des piles.
- Support des tailles de données : Grâce au suffixe {type}, l'instruction peut entreposer un octet (B), un demi-mot (H) ou un mot (-). Ce mécanisme permet d'adapter l'entreposage selon le type de données manipulées, tout en gardant une syntaxe uniforme dans l'assembleur ARM.
- Gestion avancée avec STRD : STRD (Store Register Double) est une extension de STR permettant de stocker deux registres adjacents en mémoire, généralement utilisés pour des types 64 bits ou des transferts optimisés. Cela améliore l'efficacité dans les architectures orientées performance ou pour la gestion de types longs.
- Utilisation de décalages immédiats efficaces : Le déplacement immédiat est une valeur qui peut être positive ou négative, ce qui permet un accès flexible aux adresses proches de Rn sans nécessiter d'instructions arithmétiques intermédiaires. Cela réduit le nombre d'instructions nécessaires pour un accès mémoire courant.
- Indexation implicite via "!" : La présence du point d'exclamation (!) dans certaines variantes signifie que l'adresse résultante sera réécrite dans le registre de base (Rn). Cela permet de faire avancer le pointeur sans instruction supplémentaire, pratique dans la gestion de structures de données séquentielles.
- Dépendance à l'alignement mémoire : Même si STR supporte différents types de données, les contraintes d'alignement mémoire doivent être respectées, notamment pour les STRD (double-mot), qui doivent être alignés sur 8 octets dans beaucoup de configurations. Le non-respect de cette contrainte peut entraîner des erreurs matérielles ou des accès inefficaces.
- Instruction conditionnelle pour un code plus compact : Comme beaucoup d'instructions ARM, STR peut être conditionnelle grâce au champ {cond}. Cela permet d'implémenter des branchements conditionnels implicites sans passer par une instruction B, rendant le code plus compact et parfois plus rapide dans les séquences critiques.
Dernière mise à jour : Dimanche, le 12 novembre 2017