鱼C论坛

 找回密码
 立即注册
查看: 1996|回复: 5

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

[复制链接]
发表于 2012-7-6 08:11:57 | 显示全部楼层 |阅读模式
1鱼币
我学习了小甲鱼的零基础学习汇编,学到第三章结束时做课后题,遇到这个难题。请高手帮帮忙解决。
我想将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测试一样,也不是系统问题。

最佳答案

查看完整内容

呵呵,你的设置的栈段有程序的数据或系统的数据,不能覆盖,所以会报错,段是我们自己定义的,CPU不懂你是哪里到哪里是栈,也不知道栈是多大,所以你的说法是错的,所以你要找一个绝对安全的段,你可以用 0:200~0:2FF这段,绝对安全,不会压入不了,不同电脑状况不同,有的可以压入,因为没别的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-6 08:11:58 | 显示全部楼层
本帖最后由 NeBen 于 2012-7-6 10:02 编辑

呵呵,你的设置的栈段有程序的数据或系统的数据,不能覆盖,所以会报错,段是我们自己定义的,CPU不懂你是哪里到哪里是栈,也不知道栈是多大,所以你的说法是错的,所以你要找一个绝对安全的段,你可以用 0:200~0:2FF这段,绝对安全,不会压入不了,不同电脑状况不同,有的可以压入,因为没别的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-6 10:13:20 | 显示全部楼层
事先已近用d 2000:0 f查看该段的内容了,全是0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-6 10:35:29 | 显示全部楼层
我测试了0:200~0:2FF,可以了。天呐,我怎么知道哪个段是系统使用的。而且作业题就是要2000:0 f这个段,以为这个段周围不会有系统用的段。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 11:09:33 | 显示全部楼层
本帖最后由 NeBen 于 2012-7-6 17:45 编辑

都是0或许只是暂时的,是系统预留的空间也有可能,你学到后面自然会明白的,都是0也不一定是闲置的,安全的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 11:15:53 | 显示全部楼层
首先,内存的数据为0,不代表没有被系统或程序占用
其次,段地址为2000的这一段是为了方便描述问题才使用的,不是一定安全的(好像在书上有说)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表