s99wte 发表于 2012-7-6 08:11:57

为什么8字栈只能压入6个字?

我学习了小甲鱼的零基础学习汇编,学到第三章结束时做课后题,遇到这个难题。请高手帮帮忙解决。
我想将20000~2000f全部压入AX的值。
于是我运行了一下代码:
mov ax,2000
mov ss,ax
mov ax,3344
mov sp,10
push ax
push ax
push ax
push ax
push ax
push ax
push ax
push ax
结果出错了,原因是只能压入6个字,而我压入了8个字。压到第7个就出错了,这是为什么啊?我的cpu是amd,用舍友的电脑cpu是intel的,证明不是cpu问题,然后我用xp和win7测试一样,也不是系统问题。

NeBen 发表于 2012-7-6 08:11:58

本帖最后由 NeBen 于 2012-7-6 10:02 编辑

呵呵,你的设置的栈段有程序的数据或系统的数据,不能覆盖,所以会报错,段是我们自己定义的,CPU不懂你是哪里到哪里是栈,也不知道栈是多大,所以你的说法是错的,所以你要找一个绝对安全的段,你可以用 0:200~0:2FF这段,绝对安全,不会压入不了,不同电脑状况不同,有的可以压入,因为没别的数据。

s99wte 发表于 2012-7-6 10:13:20

事先已近用d 2000:0 f查看该段的内容了,全是0。

s99wte 发表于 2012-7-6 10:35:29

我测试了0:200~0:2FF,可以了{:5_106:}。天呐,我怎么知道哪个段是系统使用的。而且作业题就是要2000:0 f这个段,以为这个段周围不会有系统用的段。

NeBen 发表于 2012-7-6 11:09:33

本帖最后由 NeBen 于 2012-7-6 17:45 编辑

s99wte 发表于 2012-7-6 10:35 static/image/common/back.gif
我测试了0:200~0:2FF,可以了。天呐,我怎么知道哪个段是系统使用的。而且作业题就是要2000:0 f ...
都是0或许只是暂时的,是系统预留的空间也有可能,你学到后面自然会明白的,都是0也不一定是闲置的,安全的。

向往 发表于 2012-7-6 11:15:53

首先,内存的数据为0,不代表没有被系统或程序占用
其次,段地址为2000的这一段是为了方便描述问题才使用的,不是一定安全的(好像在书上有说)
页: [1]
查看完整版本: 为什么8字栈只能压入6个字?