. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  问题3.12的困惑,是不是每个栈段的容量都是64KB啊?  [待解决] 回复[ 3次 ]   点击[ 429次 ]  
xdev
[帖 主]   [ 发表时间:2009-10-23 22:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-23 22:21
原问题是一个栈段最大可以设为多少?
书上说是64KB,他说的也有道理
如果寄存器SS为1000H 
寄存器SP确实可以从0000H一直搞到FFFFH,
SP中每个值对应一个内存单元,总共大小是FFFF个内存单元加1
即栈是从10000H到1FFFFH结束,恰好为64 * 1024个字节,
现在问题那你这个不是走极端吗?只有SS值为1000H 2000H 3000H D000H F000H等等才可以达到64KB;
假设我SS设为1FFFH,那么我现在要想栈大小最大,还能达到64 * 1024个字节吗?
我觉得最大只有达到仅仅16个字节大小的栈了不是吗?
从1FFF0H 到 1FFFFH, 一共16个字节,
而且此时SP还被限制为0000H 到 000FH。
王老师这里也没有说清楚到底怎么回事哎?
这正是自学者和初学者困惑的地方啊!!
希望大家谁懂说下哈
谢谢
mess
[第1楼]   [ 回复时间:2009-10-27 11:30 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
现在问题那你这个不是走极端吗?只有SS值为1000H 2000H 3000H D000H F000H等等才可以达到64KB; 
假设我SS设为1FFFH,那么我现在要想栈大小最大,还能达到64 * 1024个字节吗? 
--------------------
不管段地址是多少,都可以通过改变偏移地址(0~ffffh)来寻址64k(只要物理地址没有超出寻址范围),这是由偏移地址的变化范围决定的。

计算公式是物理地址=段地址*16+偏移地址。(这个是根本)

10000H~1fffffH是64k,100f1H~200f0H也是64k。
rockcat
[第2楼]   [ 回复时间:2009-10-30 11:37 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2009-10-28 11:47
假设我SS设为1FFFH,那么我现在要想栈大小最大,还能达到64 * 1024个字节吗? 
我觉得最大只有达到仅仅16个字节大小的栈了不是吗?
-------------------------------------------
最大能达到的
不是批在某个特例下最大能达到的
而是所有可能情况中,最大能达到的

对比一下,16个字节和64*1024个字节,哪个大?
lwbliang
[第3楼]   [ 回复时间:2010-01-08 04:09 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2008-10-12 14:20
一般,确定了段地址后,靠的就是偏移地址来寻址了,偏移地址的变化范围刚好是64K
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved