| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 714 人关注过本帖
标题:请教一个栈的问题
只看楼主 加入收藏
wentaiyou
Rank: 2
等 级:论坛游民
帖 子:68
专家分:17
注 册:2004-12-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
请教一个栈的问题
小弟刚接处汇编。对于栈的问题总感觉有点迷惑。
假设我想要用10000-1000F做为堆栈段
ss=1000
sp=0010
这样是不是就是初始化了这个栈?如果现在mov ax,1234   push ax  此时sp=00E0 ?是这样吗?
如果再重复上面的操作7次。
第1次: push ax  sp=00c0 ?
第2次: push ax  sp=00a0 ?
第3次: push ax  sp=0080 ?
第4次: push ax  sp=0060 ?
第5次: push ax  sp=0040 ?
第6次: push ax  sp=0020 ?
第7次: push ax  sp=0000 ?


这时再执行一次  push ax   sp= ?
2010-08-04 15:04
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
你上面的是理想状态,实际的栈要比这个复杂。栈本身有一些维护数据也要栈空间的。

你上面的第七次后,再PUSH就会产生栈溢出而引发‘栈异常’。程序报错退出。
实际上因为栈维护数据的关系,用不到第七次就‘异常了’。

你可以用debug自己试试,比干想要好得多。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-04 17:24
wentaiyou
Rank: 2
等 级:论坛游民
帖 子:68
专家分:17
注 册:2004-12-3
收藏
得分:0 
-a
1374:010B mov ax,2000
1374:010E mov ss,ax
1374:0110 mov sp,6
1374:0113 mov ax,1234
1374:0116 push ax
1374:0117 push ax
1374:0118 ^C
-d 2000:0
2000:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

假如回到过去.我能做些什么? 还是和现在这样有时间没事情?
2010-08-05 16:55
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用wentaiyou在2010-8-5 16:55:06的发言:

-a
1374:010B mov ax,2000
1374:010E mov ss,ax
1374:0110 mov sp,6
1374:0113 mov ax,1234
1374:0116 push ax
1374:0117 push ax
1374:0118 ^C
-d 2000:0
2000:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
何意?
你没有执行?!你可以执行试一下。最多压入一次,也就是sp=4时,再压就可以看到你要的效果了。


举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-05 21:30
zhijinwen
Rank: 2
等 级:论坛游民
帖 子:12
专家分:12
注 册:2010-6-20
收藏
得分:0 
-a
0B6C:0100  mov ax,1000
0B6C:0103 mov ss,ax
0B6C:0105 mov sp ,6
0B6C:0108 mov ax,1234
0B6C:010B push ax
0B6C:010C push ax
-d 1000:0000
1000:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1000:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-为什么全是00,
2010-09-06 12:44
az9841682
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:312
专家分:596
注 册:2009-9-11
收藏
得分:0 
你查看 内存地址做什么?
还有 为什么不是 SP=0014
2010-09-07 09:14
az9841682
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:312
专家分:596
注 册:2009-9-11
收藏
得分:0 
囧 我忘了 应该是-2
2010-09-07 09:20
快速回复:请教一个栈的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024712 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved