注册 登录
编程论坛 汇编论坛

CALL压栈疑惑

wenbin168 发布于 2012-07-05 19:27, 1295 次点击
学习到了十章的CALL和RET指令,有一个疑惑:
在没有设置栈段,初始的情况下SS和CS相同SP和IP相同,栈顶为SS:SP等于CS:IP.
CALL指令执行后将下一条指令的IP压栈,然后跳到标号处。那么假设:1000:0到1000:10中存放着代码,CS设置1000,ip设置为5那么当进行CALL指令时岂不是将1000:3和1000:4上的数据覆盖掉?我在百度上搜了很久也找不到答案,不知道是不是我的理解错了

[ 本帖最后由 wenbin168 于 2012-7-5 22:58 编辑 ]
8 回复
#2
zklhp2012-07-05 20:00
按你说的应该是覆盖 不过应该是出错退出才对 你可以试试嘛
#3
heliang62912012-07-06 12:58
是你理解错了。
记得结题散分。
#4
wenbin1682012-07-06 13:21
以下是引用heliang6291在2012-7-6 12:58:45的发言:是你理解错了。记得结题散分。
总要让我知道哪里理解有问题吧?莫非call用的是编译嚣设置的叧一段栈段?

[ 本帖最后由 wenbin168 于 2012-7-6 13:28 编辑 ]
#5
zklhp2012-07-06 13:27
我觉得没什么错啊 如果真是

在没有设置栈段,初始的情况下SS和CS相同SP和IP相同,栈顶为SS:SP等于CS:IP.

那应该是覆盖的

问题是 这种东西应该属于违规操作 我感觉这样程序直接就退出了

实践是检验真理的唯一标准 试试才知道
#6
zklhp2012-07-06 13:27
同样 记得给分。。
#7
wenbin1682012-07-06 13:51
这两天身边没电脑,连帖子也是手机写的,等过两天回去实验一下
#8
无敌小超人2012-07-06 14:47
怎么会是CS和SS相同的呢?代码段和栈怎么会是相同的呢?栈是存放数据的,怎么会是与代码段相同的呢?
#9
heliang62912012-07-07 13:55
关键是一样又如何呢?
指令和数据本身没区别,只有CS:IP指向了才是指令,不然就是个数据而已。
在压栈出栈中,就算诚如你所说,如果直接push则SP指针是减少,而IP指针是增加,所以不会重叠。但是如果你一上来就POP,那样你对一个空栈出栈的话,那是危险的。
1