我们可以将长度为N(N<=64K)的一组地址连续、起始地址为16的倍数的内存单元当作栈来使用,从而定义了一个栈段。
例如将10010H~1001FH这段长度为16字节的内存空间当作栈来使用,以栈的方式进行访问。这段空间就可以成为栈段,段地址为1000H,大小为16字节。
将一段内存当作栈段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排就在执行push、pop等栈操作指令时就自动地将我们定义的栈段当作栈空间来访问。
一个栈段最大可以设多少?
分析:首先从栈操作指令所完成的功能的角度上来看,push、pop等指令在执行的时候只修改SP,所以栈顶的变化范围是0~FFFFH,从栈空时候的SP=0,一直压栈,直到栈满时SP=0;如果再次压栈,栈顶将环绕,覆盖原来栈中的内容。所以一个栈段的容量最大为64KB。
栈段的三个主要用途:
1:堆栈为函数内部的声明与局部变量提供存储空间
2:进行函数调用时,堆栈存储与此有关的一些维护性信息,被称为过程活动记录,它包含函数的调用地址,任何不适合装入寄存器的参数以及一些寄存器的值的保存。
3:可以作为临时缓冲区,比如计算一个很长的表达式时 ,可以先将部分计算的结果压到堆栈上,当需要时再从堆栈上弹出来。
栈的作用及意义:
早期的堆栈主要用于保存函数的返回地址,如函数调用(详见函数调用栈),避免造成数据的流失或者数据被覆盖。为面向过程、面向对象而存在。