关于栈和sp寄存器的一点疑问
书上说如果将10000H~1FFFFH作为栈段,当栈为空时,SP为0,SS为1000H,岂不是指向了10000H?字单元入栈之前,SP-2,指向FFFEH?(最近看王爽的...
书上说如果将10000H~1FFFFH作为栈段,当栈为空时,SP为0,SS为1000H,岂不是指向了10000H?字单元入栈之前,SP-2,指向FFFEH?(最近看王爽的汇编语言,小弟愚钝,请高手指教)
展开
展开全部
额……咱只知道三十二位的esp、ebp……
ss是指向栈段的寄存器,一般和ebp栈底指针值相等;而计算机里面栈是从高向低增长的,所以ss和ebp如果按照这个栈的话都应该指向0x1FFFF,而初始状态如果是空栈的话,栈顶指针esp应该等于栈底指针ebp,所以空栈时esp=ebp=ss=0x1FFFF(当然三十二位系统里面ss只是一个指向段表的指示器,不是直接指向那个地址)。
当有字压栈的时候sub esp 2,esp应该指向0x1FFFD
ss是指向栈段的寄存器,一般和ebp栈底指针值相等;而计算机里面栈是从高向低增长的,所以ss和ebp如果按照这个栈的话都应该指向0x1FFFF,而初始状态如果是空栈的话,栈顶指针esp应该等于栈底指针ebp,所以空栈时esp=ebp=ss=0x1FFFF(当然三十二位系统里面ss只是一个指向段表的指示器,不是直接指向那个地址)。
当有字压栈的时候sub esp 2,esp应该指向0x1FFFD
追问
你说空栈时esp指向0x1FFFF,当有字压栈的时候sub esp 2,esp应该指向0x1FFFD ,那岂不是0x1FFFF没有存东西?
追答
不是啊,0x1FFFE和0x1FFFF里面存的是刚刚压栈的那个双字节
关于上次我的回答,不好意思确实有点问题,如果按照现实计算机中栈来看的话,esp一开始应该指向0x20000(尽管这个地址不属于当前栈段),这样才让压栈、esp指向在逻辑上都正确
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询