饭后温柔

汉堡与老干妈同嚼 有可乐味
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

汇编知识点-运行时栈

Posted on 2013-08-06 13:34  饭后温柔  阅读(565)  评论(0编辑  收藏  举报

运行时栈

  由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位寄存器操作.