zoukankan      html  css  js  c++  java
  • 汇编知识点-运行时栈

    运行时栈

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

      

  • 相关阅读:
    20190729
    [51Nod1623] 完美消除
    [WC2013] 糖果公园
    20190727
    在Java中调用带参数的存储过程
    Oracle 字符集的查看和修改
    查询oracle server端的字符集
    Mysql 数据库中文乱码问题
    错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
    CSS背景图拉伸自适应尺寸,全浏览器兼容
  • 原文地址:https://www.cnblogs.com/flytrace/p/3240372.html
Copyright © 2011-2022 走看看