运行时栈
由cpu管理的内存数组.
使用SS,ESP寄存器.
保护模式下,SS存放段选择子.
ESP指向堆栈内的32位偏移地址.
ESP寄存器通常由CALL,RET,PUSH,POP等指令间接修改.
向下增长的堆栈.ESP指向栈顶.压栈push,地址减.出栈pop地址增.
一般用途:
寄存器做多种用途时,堆栈作为寄存器值的临时保存区域.
CALL指令,CPU用堆栈保存当前被调用过程的返回地址.
调用过程时,通过压栈传递输入值.
过程内的局部变量在堆栈上创建,过程结束时丢弃.
PUSH指令
首先减小ESP值,再把源操作数复制到堆栈.
PUSH r/m16
PUSH r/m32
PUSH imm32
POP指令
首先将ESP所指堆栈元素复制到目的操作数,然后增加ESP值.
POP r/m16
POP r/m32
PUSHFD和POPFD指令
PUSHFD在堆栈上压入32位EFLAGS寄存器值.POPFD推出栈顶送至EFALGS寄存器.
PUSHAD,PUSHA,POPAD和POPA指令
PUSHAD指令在堆栈上按下列顺序压入所有32位通用寄存器:
EAX,ECX,EDX,EBX,ESP(执行PUSHAD指令之前的值),EBP,ESI,EDI.
POPAD以相反顺序从堆栈中弹出这些通用寄存器.
PUSHA和POPA针对16位寄存器操作.