段的综述栈段,用作栈的段
我们可以将长度为N(N《=64KB)的一组地址连续,起始地址为16的倍数的内存单元,当作栈来使用,从而定义了一个栈段。
将一段内存当作栈段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就在执行PUSH,POP等栈操作指令时就自动地将我们定义的栈段当作栈空间来访问。
将SS:SP指向我们定义的栈段。
在之前有一道例子:在1000H--1000FH这段空间当作栈段,初始状态是空的,此时,SS=1000H,SP=0010.
现在,如果我们将10000H-1FFFFH这段空间当作栈段,初始状态是空的,SS=1000H,则SP=?
分析:我们将10000H-1FFFFH这段空间当作栈段,SS=1000H,栈空间大小为64KB,栈最底部的字单元地址为1000:FFFE。
任意时刻,SS:SP指向栈顶,当栈中只有一个元素的时候,SS=1000H,SP=FFFE。
栈为空,就相当于栈中唯一的元素出栈,出栈后,SP=SP+2。
SP原来为FFFE,加2后SP=0,所以,当栈为空的时候,SS=1000H,SP=0.
一个栈段最大可以设为多少?
2的16次方=64KB
利用PUSH和POP都是利用SP操作的,SS是不变的,所以栈顶的变化范围是0-FFFFH,从栈空时候的SP=0,一直压栈,直到栈满时SP=0,如果再次压栈,栈顶将环绕,覆盖了原来栈中的内容。
一段内存,可以既是代码的存储空间,又是数据的存数空间,还可以是栈的空间,也可以什么都不是
关键在于CPU中寄存器的设置,即CS.IP.SS.SP.DS的指向
学员评论
我的丷丷2016-09-23
yjialuo1232015-01-17
欧麦尬2013-10-12