Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| reglist |
Ce paramètre permet d'indiquer la liste des registres à désempiler entre accolade. |
Description
Cette instruction permet de désempiler des registres d'une pile descendante complète.
Remarques
- L'instruction POP est utilisée pour restaurer des registres depuis la pile : POP retire une ou plusieurs valeurs de la pile (stack) et les place dans les
registres spécifiés dans la liste reglist. Elle est souvent utilisée à la fin d'une routine pour restaurer l'état du processeur avant de retourner à l'appelant.
- La pile ARM est descendante et croissante vers les adresses basses : Lorsqu'un POP est exécuté, la pile est lue à partir de l'adresse pointée par
SP (Stack Pointer), et celle-ci est incrémentée après chaque lecture. Cela correspond à une pile post-incrémentée, typique des architectures ARM.
- Souvent combinée avec PUSH pour préserver le contexte : Une pratique courante en programmation ARM est de faire un PUSH des
registres au début d'une fonction, puis un POP à la fin. Cela garantit que les registres modifiés n'affecteront pas le reste du programme (sauvegarde/restauration
du contexte).
- reglist permet de spécifier plusieurs registres à la fois : Le paramètre reglist est une liste de registres entre accolades : par
exemple {r4, r5, lr}. Cela permet de restaurer efficacement plusieurs registres en une seule instruction, ce qui est plus rapide et plus compact que plusieurs
instructions LDR.
- PC peut être inclus pour effectuer un retour de fonction : Inclure PC dans reglist permet de restaurer l'adresse de retour et ainsi simuler un
RET. Par exemple, POP {pc} lit l'adresse de retour de la pile et la charge dans le compteur de programme, provoquant le retour à l'appelant.
- L'instruction peut être conditionnelle grâce à {cond} : Comme d'autres instructions ARM, POP accepte un code de condition (EQ, NE,...). Cela permet
d'exécuter l'opération de dépilement seulement si une certaine condition est remplie, utile dans des routines complexes avec logique conditionnelle.
- L'ordre de récupération des registres est fixé : Bien que la reglist n'ait pas à être triée, le processeur traite les registres dans un ordre croissant
(r0 avant r1,...), ce qui garantit une cohérence dans l'exécution. Cela évite des effets inattendus sur les données dépilées.
- POP ne modifie pas les drapeaux : Contrairement à certaines instructions comme SUBS ou MOVS, POP ne met pas à jour les drapeaux de condition du
registre CPSR. Cela garantit qu'un POP n'affecte pas l'état du programme, ce qui est important pour le retour d'interruptions ou de fonctions.
Dernière mise à jour : Dimanche, le 12 novembre 2017