. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  栈段疑问,64k栈空满疑惑  [待解决] 回复[ 9次 ]   点击[ 520次 ]  
freeflydream
[帖 主]   [ 发表时间:2010-02-21 13:56 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2010-02-20 22:25
3.10讲述为64k堆栈空时,sp=0
我理解了
不过满的时候,sp也为0吧

那么如何区别是空是满呢???
versaariel
[第1楼]   [ 回复时间:2010-02-21 17:51 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
单从sp的值来看,可能让你觉得迷惑,还是应该分析一下sp的走向,栈有上溢和下溢
freeflydream
[第2楼]   [ 回复时间:2010-02-21 18:42 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2010-02-20 22:25
这个和溢的关系不大吧,空间为64k后就不存在溢出的问题了,只是数据会混乱了吧
versaariel
[第3楼]   [ 回复时间:2010-02-21 22:11 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
数据是混乱了,栈满和栈空,你可以预留一个字节来区别
scuzg
[第4楼]   [ 回复时间:2010-02-21 22:27 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
我觉得最简单有效的办法就是将sp的初值、即栈的最大容量限制为0FFFEH。
p541938340
[第5楼]   [ 回复时间:2010-02-28 02:58 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-09-08 11:48
这是栈循环,其实在sp=offfeh时再出栈,sp=offfeh+2=10000h,发生进位,但是sp是16位寄存器,所以丢掉了最高位,又变为0,一直一直这样的在0-offffh之间循环!
plagueing
[第6楼]   [ 回复时间:2010-06-14 16:16 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2009-07-16 14:51
同意
avatarrr
[第7楼]   [ 回复时间:2013-01-15 23:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-01-01 13:48
一直循环的话怎么还会出现溢出呢?
fxrfxx
[第8楼]   [ 回复时间:2013-01-23 15:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-01 20:23
这是栈循环,其实在sp=offfeh时再出栈,sp=offfeh+2=10000h,发生进位,但是sp是16位寄存器,所以丢掉了最高位,又变为0,一直一直这样的在0-offffh之间循环!
------------------
回复:如果sp=0,ss=1000,这在它空栈时,把数据入栈,sp=sp-机器码长的字节数,这用0去减吗?减了之后是负数?还是能得到fffe之类的值?这就是循环吗?
本人小白,刚看到这,有些迷惑,望解答!
cutebe
[第9楼]   [ 回复时间:2013-05-28 11:32 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
确实,空满都是0。
反过来从0判断空满估计是不可能了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved