yy57 发表于 2014-11-18 09:17:55

SP=0时,到底是栈空还是栈满?

首先,如果一个栈段是从10000到1FFFF。
假设一:
栈中只有一个字,那么这个字的偏移地址是FFFE,SP=FFFE,此时来一个pop操作,栈变为空,那么SP+2,sp=0。
所以,第一个观点,如果一个栈段是从10000到1FFFF,且为空栈,那么sp=0。

假设二:
栈中只有一个元素,那么sp=FFFE,这时不断地PUSH,每PUSH一次sp-2,那么当栈满时,SP=0。
所以,第二个观点,如果一个栈段如果一个栈段是从10000到1FFFF,而且已经满了,那么SP=0。

Now the problem arises.

到底sp=0,是栈满还是栈空???

小人 发表于 2014-11-18 09:28:38

本帖最后由 小人 于 2014-11-18 01:31 编辑

sp位16位 他没法指向10000h 说以进位被掐了   所以是sp=0

{:5_109:}

小人 发表于 2014-11-18 09:36:27

sp=0你可以看做空也可以看做满   看你怎么操作
sp=0sp-2 sp=FFFEH
sp=0sp+2 sp=0002H

我是小鱼丝 发表于 2014-11-18 12:00:23

从10000到1FFFF这种栈段比较特殊    如果是10000~1000F的话栈空的时候 SP=10
这种1FFFF栈空和栈满SP都等于0 因为1FFFF的下面超了范围了 跑到20000段了 所以还是认为SP=0

yy57 发表于 2014-11-28 15:48:52

我是小鱼丝 发表于 2014-11-18 12:00
从10000到1FFFF这种栈段比较特殊    如果是10000~1000F的话栈空的时候 SP=10
这种1FFFF栈空和栈满SP都 ...

也就是说如单说SP=0,无法确定栈是空还是满。

yy57 发表于 2014-11-28 15:49:24

小人 发表于 2014-11-18 09:36
sp=0你可以看做空也可以看做满   看你怎么操作
sp=0sp-2 sp=FFFEH
sp=0sp+2 sp=0002H

懂了,单从一个SP=0,无法判断。我的理解对否?

我是小鱼丝 发表于 2014-11-28 15:56:56

yy57 发表于 2014-11-28 15:48
也就是说如单说SP=0,无法确定栈是空还是满。

对的呵呵!
页: [1]
查看完整版本: SP=0时,到底是栈空还是栈满?