X86中的栈操作

1,push指令

PUSH (Push) decrements the stack pointer (ESP), then transfers the source

operand to the top of stack indicated by ESP (see Figure 3-1). PUSH is
often used to place parameters on the stack before calling a procedure; it
is also the basic means of storing temporary variables on the stack. The
PUSH instruction operates on memory operands, immediate operands, and

register operands (including segment registers).

2,pusha指令

PUSHA (Push All Registers) saves the contents of the eight general
registers on the stack (see Figure 3-2). This instruction simplifies
procedure calls by reducing the number of instructions required to retain
the contents of the general registers for use in a procedure. The processor
pushes the general registers on the stack in the following order: EAX, ECX,
EDX, EBX, the initial value of ESP before EAX was pushed, EBP, ESI, and

EDI. PUSHA is complemented by the POPA instruction.


操作示意图:

X86中的栈操作


3,pop指令

POP (Pop) transfers the word or doubleword at the current top of stack

(indicated by ESP) to the destination operand, and then increments ESP to
point to the new top of stack. See Figure 3-3. POP moves information from
the stack to a general register, or to memory
There are also a variant of POP that operates on segment registers. This
is covered in a later section of this chapter..

4,popa指令

POPA (Pop All Registers) restores the registers saved on the stack by

PUSHA, except that it ignores the saved value of ESP.

操作示意图:

X86中的栈操作