. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
寄存器(内存访问)
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
栈顶环绕如何理解?
[待解决]
回复[
5
次 ] 点击[
587
次 ]
chns811
[帖 主]
[ 发表时间:2009-09-06 22:03 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2009-08-04 00:24
设栈段地址为:1000H,最大栈段为64KB(0~FFFFH)
那么栈底SS:SP为1000:0000
压栈至满的时候:SP-2(0000-2=FFFE?应该是-2)纯减法来说,总要借位吧,原来的SP是0,它跟谁借?
出栈至空的时候:SP+2(FFFE+2=10000?)SP也是0??
糊涂了。。。。。。反正走路都在想,也令我词不达意
P69问题3:12的分析:
从栈操作指令所完成的功能的角度上来看,push、pop等指令在执行的时候只修改SP,所以栈顶的变化范围是0~FFFFH,从栈空时候的SP=0,一直压栈,直到栈满时SP=0;如果再次压栈,“栈顶将环绕”,覆盖了原来栈中的内容。所以一个栈段的容量最大为64KB。
wsrf
[第
1
楼]
[ 回复时间:2009-09-07 09:59 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01
当SP=0时,此时再入栈,SP-2=FFFE,它肯定是进行借位操作了。当SP=FFFE时,此时再出栈,SP+2=10000,但是寄存器SP只能保存两个字节,所以进位1被抛弃,SP的值为0000,上面所说的“栈顶环绕”就是指由于寄存器位数的限制,如果栈空间0-FFFF中都已压入了内容,此时SP=0,如果再次进行入栈操作,SP=0000-0010=FFFE,此时原来存储在FFFE中的内容将会被覆盖,这就是所说的“栈顶将环绕”。
wsrf
[第
2
楼]
[ 回复时间:2009-09-07 10:01 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01
上面说到的 SP=0000-0010=FFFE 应该为 SP=0000-0002=FFFE
chns811
[第
3
楼]
[ 回复时间:2009-09-07 23:42 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2009-08-04 00:24
谢谢热心的WSRF老大指教!
“当SP=FFFE时,此时再出栈,SP+2=10000,但是寄存器SP只能保存两个字节,所以进位1被抛弃,SP的值为0000,”
书中前面说到,进位其实并没有抛弃,只是先不研究这个问题,只是由于寄存器只能存两个字节,所以为0,总是感觉不怎么严谨,这样不是数据丢失吗?
wnfzy-126
[第
4
楼]
[ 回复时间:2009-09-28 15:03 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:6
信誉值:0
注册日期:2009-08-22 20:30
堆栈段总是用SS : SP来定位的,所以只关心SS SP 的内容好了
william
[第
5
楼]
[ 回复时间:2012-02-06 15:18 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2012-01-02 13:45
当SP=0时,此时再入栈,SP-2=FFFE,它肯定是进行借位操作了。当SP=FFFE时,此时再出栈,SP+2=10000,但是寄存器SP只能保存两个字节,所以进位1被抛弃,SP的值为0000,上面所说的“栈顶环绕”就是指由于寄存器位数的限制,如果栈空间0-FFFF中都已压入了内容,此时SP=0,如果再次进行入栈操作,SP=0000-0010=FFFE,此时原来存储在FFFE中的内容将会被覆盖,这就是所说的“栈顶将环绕”。
------------------
回复:
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved