Assembleur 80x86 | POP |
---|---|
INTEL 8088+ | Pop Value Of Stack |
Syntaxe
POP opérande |
Paramètres
Nom | Description |
---|---|
opérande | Ce paramètre permet d'indiquer l'opérande, pouvant être un registre ou une adresse mémoire, allant recevoir la valeur de la pile. |
Description
Cette instruction permet de désempiler de la pile un mot, un double mot ou un quadruple mot et la met dans une opérande.
Algorithme
SI taille de l'adresse de pile = 32 bits ALORS SI taille de opérande = 32 bits ALORS opérande ← SS:ESP ESP ← ESP + 4 SINON opérande ← SS:ESP ESP ← ESP + 2 FIN SI SINON SI taille de l'opérande = 16 bits ALORS opérande ← SS:SP SP ← SP + 2 SINON opérande ← SS:SP SP ← SP + 4 FIN SI FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
POP reg/mem16 | 8Fh /0 | Désempile du sommet de la pile une valeur et la met dans un emplacement mémoire ou registre 16 bits. |
POP reg/mem32 | 8Fh /0 | Désempile du sommet de la pile une valeur et la met dans un emplacement mémoire ou registre 32 bits. Il n'y a pas de préfixe en mode 64 bits. |
POP reg/mem64 | 8Fh /0 | Désempile du sommet de la pile une valeur et la met dans un emplacement mémoire ou registre 64 bits. |
POP reg16 | 58h +rw | Désempile du sommet de la pile une valeur et la met dans le registre 16 bits. |
POP reg32 | 58h +rd | Désempile du sommet de la pile une valeur et la met dans un registre 32 bits. Il n'y a pas de préfixe en mode 64 bits. |
POP reg64 | 58h +rq | Désempile du sommet de la pile une valeur et la met dans un registre 64 bits. |
POP DS | 1Fh | Désempile du sommet de la pile une valeur et la met dans le registre DS. Invalide en mode 64 bits. |
POP ES | 07h | Désempile du sommet de la pile une valeur et la met dans le registre ES. Invalide en mode 64 bits. |
POP SS | 17h | Désempile du sommet de la pile une valeur et la met dans le registre SS. Invalide en mode 64 bits. |
POP FS | 0Fh A1h | Désempile du sommet de la pile une valeur et la met dans le registre FS. |
POP GS | 0Fh A9h | Désempile du sommet de la pile une valeur et la met dans le registre GS. |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#UD(Opcode invalide) | X | Les instructions «POP DS», «POP ES» ou «POP SS» sont exécutés en mode 64 bits. | ||
#NP(Sélecteur) | X | Les registres DS, ES, FS ou GS sont chargés dans un sélecteur de segment non-nulle et le segment est marqué non présent. | ||
#SS(Pile) | X | X | X | Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique |
#SS(Sélecteur) | X | X | X | Le registre SS est chargé avec un sélecteur non-nulle et le segment est marqué non présent. |
#GP(Protection général) | X | X | X | Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique |
X | L'opérande de destination n'est pas dans un segment non écrivable | |||
X | Un segment de données nulle est utilisé comme référence mémoire | |||
#GP(Sélecteur) | X | Un registre de segment est chargé, mais le descripteur de segment dépasse la limite de la table du descripteur. | ||
X | Un registre de segment est chargé et le bit TI de sélecteur de segment est fixé, mais le sélecteur LDT est un sélecteur nulle. | |||
X | Le registre SS est chargé avec un sélecteur de segment nulle dans un mode non 64 bits ou avec CPL = 3. | |||
X | Le registre SS est chargé et le sélecteur de segment RPL et le descripteur de segment DPL n'est pas égale au CPL. | |||
X | Le registre SS est chargé et le segment pointe dans un segment de données non écrivable. | |||
X | Le registre DS, ES, FS ou GS est chargé et le segment pointe sur des données ou un segment de code non-conforme, mais le RPL ou CPL est supérieur au DPL. | |||
X | Le registre DS, ES, FS ou GS est chargé et le segment ne pointe pas sur un segment de données ou un segment de code en lecture. | |||
#PF(Faute de page) | X | X | Une faute de page résultat de l'exécution de l'instruction | |
#AC(Vérifie l'alignement) | X | X | Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé |
Exemple
Voici un exemple en Turbo Pascal 7 montrant une utilisation de cette instruction :
on obtiendra le résultat suivant :
AX = 10Voir également
Langage de programmation - Assembleur 80x86 - Instruction PUSH
Langage de programmation - Structure de données - Structures récursives linéaires - Pile
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 825
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 412
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 222 à 228.
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 185 à 186.