Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture

7-8 Vol. 1
PROGRAMMING WITH GENERAL-PURPOSE INSTRUCTIONS
The POP instruction copies the word or doubleword at the current top of stack (indi-
cated by the ESP register) to the location specified with the destination operand. It
then increments the ESP register to point to the new top of stack (see Figure 7-3).
The destination operand may specify a general-purpose register, a segment register,
or a memory location.
The POPA instruction reverses the effect of the PUSHA instruction. It pops the top
eight words or doublewords from the top of the stack into the general-purpose regis-
ters, except for the ESP register (see Figure 7-4). If the operand-size attribute is 32,
the doublewords on the stack are transferred to the registers in the following order:
EDI, ESI, EBP, ignore doubleword, EBX, EDX, ECX, and EAX. The ESP register is
restored by the action of popping the stack. If the operand-size attribute is 16, the
words on the stack are transferred to the registers in the following order: DI, SI, BP,
ignore word, BX, DX, CX, and AX.
Figure 7-2. Operation of the PUSHA Instruction
Figure 7-3. Operation of the POP Instruction
0
Stack
31
Before Pushing Registers
Growth
ESP
n - 4
n - 8
n
Stack
031
After Pushing Registers
ESP
EAX
EDI
EBX
EBP
ECX
EDX
Old ESP
ESI
n - 36
n - 20
n - 28
n - 12
n - 16
n - 24
n - 32
031
Stack
After Popping Doubleword
Growth
ESP
n - 4
n - 8
n
Stack
Before Popping Doubleword
ESP
Doubleword Value
031