1 介绍
堆栈段(stacksegment)通常是指采用堆栈方式工作的一段内存区域。当程序被执行时,程序可能会将其执行的状态加入栈的顶部;当程序结束时,它必须把栈顶的状态数据弹出(pop)。
2 存储形式
ebp是栈底寄存器
esp是栈顶寄存器
每4字节的栈空间保存一个数据,当esp小于ebp时,就形成了栈帧
3 使用指令
push:压栈操作,把数据写入到esp执行的堆栈上,然后esp减4
pop:出栈操作,从esp执行的地址上获取一个数据,然后esp加4
读取堆栈内容:有两种寻址方式,ebp寻址(以ebp为基准的变量地址表示方式)和esp寻址(以esp为基准的变量地址表示方式)
4 用途
在采用段式内存管理方式进行程序内存分配的架构中,堆栈段用来存放局部变量和函数返回地址。
理论上,最小的栈可能是一个仅能保存函数调用(function call) 地址的结构,以致被调用的函数能根据该地址返回(return)到原函数里。除此功能以外,开发者也可以将栈另作他用。
5 使用方式
堆栈段是在程序运行时动态分配使用,只需要通过栈顶指针即可访问。目前大多数CPU中都有专用寄存器可以被用来存放栈顶地址。
5.1 生成栈帧
pushebp ;保存前面函数的栈底到当前的栈上
版权声明:本文为luck_donkey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。