第三章 --- 第七节

我们可以将长度为N(N<=64K)的一组地址连续、起始地址为16的倍数的内存单元,当做栈来用,从而定义了一个栈段。

将一段内存当做栈段,仅仅是我们编程时的一种安排,CPU并不会由于这种安排,就在执行PUSH、POP等栈操作指令时自动地将我们定义的栈段当做栈空间来访问。

需要我们根据需要来设定SS:SP的值来告诉CPU我们对于栈的安排。

问题:

如果我们将10000H~1FFFFFH这段空间当做栈段,初始状态是空的,此时,SS = 1000H, SP = ?

答案:SP = 0000H。

任意时刻,SS:SP指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址位栈最底部的子单元的偏移地址+2,栈最底部字单元的地址为1000:FFFE,所以栈空时,SP = 0000H。

问题:

一个栈段最大可以设为多少?

首先从栈操作指令所完成的功能的角度上来看,PUSH、POP等指令在执行的时候只修改SP,所以栈顶的变化范围从0~FFFFH,从栈空时候的SP = 0,一直压栈知道栈满时SP = 0,如果再次压栈,栈顶将环绕,覆盖了原来栈中的内容。

所以一个栈段最大容量就是2^16次方,也就是64KB。

 

你可能感兴趣的:(第三章 --- 第七节)