background image

7-6 Vol. 1

PROGRAMMING WITH GENERAL-PURPOSE INSTRUCTIONS

The POP instruction copies the word or doubleword at the current top of stack (indicated 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 registers, 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

0

31

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

0

31

Stack

After Popping Doubleword

Growth

ESP

n - 4
n - 8

n

Stack

Before Popping Doubleword

ESP

Doubleword Value

0

31