. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  “栈顶超界”这一节我认为有些不妥。  [待解决] 回复[ 4次 ]   点击[ 490次 ]  
kidu
[帖 主]   [ 发表时间:2010-07-17 09:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-31 08:23
1:书上P62第二幅图(图3.14),最右边(第三列)的部分,地址 1000EH-1000FH 中的 0123H是怎么来的,是印错了吗?
但是看作者对此图的描述:“执行pop ax 后的状态,此时,栈顶超出栈空间。”
看上去,作者是想用“地址 1000EH-1000FH 中的 0123H”来显示栈顶超出了,并非印错。可是此处0123H哪里来的呢?

2:pop ax 到底超界后,后面继续push ,影响的是栈底以上的数据(地址大于栈底的数据),其实就是堆栈下溢,本来堆栈就有上溢与下溢之分,不知道为何作者在此统统都算作了上溢(即作者所谓的“栈顶超界”)?还是说,作者根本就是用“栈顶”这个词包含了堆栈的上下两个边界?那就有点confused了。

PS :关于上溢和下溢的区别,wiki里有解释

http://en.wikipedia.org/wiki/Stack_%28data_structure%29

在此页面搜索 overflow 和 underflow



希望是我想错了,有没有人能给出解释?
期待讨论。
mouse
[第1楼]   [ 回复时间:2010-07-19 09:45 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
1:书上P62第二幅图(图3.14),最右边(第三列)的部分,地址 1000EH-1000FH 中的 0123H是怎么来的,是印错了吗? 
但是看作者对此图的描述:“执行pop ax 后的状态,此时,栈顶超出栈空间。” 
看上去,作者是想用“地址 1000EH-1000FH 中的 0123H”来显示栈顶超出了,并非印错。可是此处0123H哪里来的呢? 
-----------
肯定书上印错了,“执行pop ax 后的状态,此时,栈顶超出栈空间。”指定是ss:sp指向10022H,而10020H 10021H两个单元将被覆盖(p63第二段)
mouse
[第2楼]   [ 回复时间:2010-07-19 09:50 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
任意时刻,ss:sp指向栈顶元素。不管是ss:sp在栈空间的上方和下方溢出,都是“栈顶超界”。而不是楼主说的书上都算作“上溢”了。
kidu
[第3楼]   [ 回复时间:2010-07-20 08:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-31 08:23
这样理解倒还能说通。
不明白作者为什么用这个词栈顶超界。别的地方还真没看到,查了好几本汇编的书,都是上溢下溢分开讲的。
谢谢了。
e56004474
[第4楼]   [ 回复时间:2011-12-10 00:35 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
你见过 水从 下面 溢出来的么?

可能作者是考虑到初学者,用通俗易懂的 语言。,来形容 上溢下溢的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved