10000H到1ffffH一段栈空间,ss=1000H sp=0,ss:sp指向10000H,明明是满栈,
而王爽汇编语言一书里解释的是当栈种只有一个元素时ss:sp=1000H:fffeH,出栈后sp+2=0,即ss:sp=1000H:0,实在是想不通,求大神指导
因为sp=0时,如果进行压栈,sp会因为减2而变成0fffeh,sp指向了栈段段高端地址,如果不进行压栈,而是出栈,则sp会因为加2变成了2,sp往高端地址移动。假设cpu一直出栈不压栈,sp就会从低地址往高地址移动,最终会出现,sp=0fffeh的情况,此时,再出栈一次,sp就会又变成了0(0fffeh+2h=0),同理,如果cpu一直压栈不出栈,sp就会从0fffeh处不停的往低端地址移动,最终会出现 sp=2的情况,如果此时再出栈1次,则sp=0,再出栈1次,sp又会变成0fffeh。也就是说,当sp越过栈段的边界时,会回绕到栈段的另一端。所以sp=0既是满栈,也是空栈,到底是空栈还是满栈,不取决于cpu,而是取决于使用它的人,取决于你程序的实际情况。