. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  [2009-11-11 08:15] [实验5]-1(p123)编写,调试具有多个段的程序  [待解决] 回复[ 3次 ]   点击[ 484次 ]  
sysop
[帖 主]   [ 发表时间:2009-11-11 08:29 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2008-06-04 14:46
①CPU执行程序,程序返回前,data段中的数据不发生变化。 
②CPU执行程序,程序返回前,cs=[code],ss=[stack],ds=[data] 
③设程序加载后,code段的段地址为X,则data段的地址为X-2,stack段的地址为X-1(此答案只对该程序有效)
====== 
我的问题: 
1. 第③问中,如果data段的长度超过64K,是不是就不存在上述的关系了(X-1,X-2)? 
2. 同样第③问中,操作系统为每一段都寻找一段合适的空间,code段,data段,stack段,一定会连续在一起么?
rockcat
[第1楼]   [ 回复时间:2009-11-11 10:41 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2009-10-28 11:47
第1问,data段长度超过64K?晕晕的!这样在程序内部定义起来,不得累死啊!32768个DW型~~
第2问,暂时的理解,只要按顺序定义,那就是连接的

初学新手,请多指教
sysop
[第2楼]   [ 回复时间:2009-11-13 07:50 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2008-06-04 14:46
本题中,是先定义了data,然后定义了stack。
能不能累死,这是另一说,但就这个题来说,
如果真得超过了64K,是必须拆解成两个以上的段,还是另有做法?
教材P120有一段话“但如果数据、栈或代码需要的空间超过64K,就不能放在一个段中(一个段的容量不能大于64KB,是我们在学习中所有的8086模式的限制,并不是所有的处理器都这样)”
--这话说明了,无论是数据,栈或代码,还是有可能超过64K的。
coolyujiyu
[第3楼]   [ 回复时间:2009-12-17 13:23 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2009-12-07 22:09
不是看超不超过64K,而是看超不超过16个,也就是10H个byte单元。。。10H对应的是物理地址吧。。转换成段地址就是1H了。。所以差距就是1了。。明白没哇??

也就是如果开辟的空间是17个,那就是占用了20H个单元。。。
他们之间的关系就是
X X-4 X-2了。。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved