| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2915 人关注过本帖
标题:用debug跟踪时,关于程序加载后DS、SS、CS关系的疑问,请高手指正,正卡壳中 ...
取消只看楼主 加入收藏
flat2010
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
用debug跟踪时,关于程序加载后DS、SS、CS关系的疑问,请高手指正,正卡壳中,谢谢!!!
刚学汇编不久,因为不是计算机专业出身的,所以进度比较慢,学起来也比较吃力。如果发的问题比较弱智,还请大家不要笑话,拍砖轻些,初来贵坛,这也是我的处女贴,还请各位前辈多多指教!
    进入正题,我用的是王爽老师的第二版,开始之前我是把序都仔仔细细读过一遍的,我也是严格按照王老师的要求来学的,没学懂坚决不往下学,书后的实验不会的,反复做,反复揣摩,直到完全弄明白为止。现在学到第六章——包含多个段的程序。书后实验5(3):
    assume  cs:code,ds:data,ss:stack
    code    segment
    start:  mov ax,stack
            mov ss,ax
            mov sp,16

            mov ax,data
            mov ds,ax

            push ds:[0]
            push ds:[2]
            pop  ds:[2]
            pop  ds:[0]

            mov ax,4c00h
            int 21h
    code ends

data    segment
  dw 0123h,0456h
data    ends

stack  segment
  dw 0,0
stack  ends

end    start

①CPU执行程序,程序返回前,data段中的数据是多少。(答:不变。这个我明白)
②CPU执行程序,程序返回前,cs=__,ss=__,ds=__。(答:cs、ss、ds的具体数值因机器而不同,但SS=CS+4,DS=CS+3。这题没懂,下面详述)
③设程序加载后,code段的段地址为X,则data段的段地址为____,stack段的段地址为____。(答:X+3,X+4。这个跟上题一样)

    第二题中,我用debug跟踪,发现答案是对的。但我就是想不明白,因为程序中code段的大小远远不足64kb,大可以为SS、CS、DS分配同一个段地址,而使用偏移地址来区别。但为什么我们的OS没有这么做,而是给他们分配了不同的段地址。之前我在网上找了一下,没找到能让我真正想明白的答案。先补充一点,CS:0010和CS+1:0000其实指向的是同一个物理地址这个我明白,大虾门不用担心了,我看网上有大侠在说那个提问的人这个问题都还没弄清楚。上题中假设程序返回前,CS的值为X,而code段占了3行(48字节),那我们大可使用X:40h-X:4Fh作为data段,X:50h-X:5Fh作为stack。也就是说,DS、SS、CS的段地址可以一样,都为X,只是用了不同的偏移地址而已。为什么操作系统就喜欢把偏移地址置零,然后把偏移地址中的部分加到段地址中,增加段地址的数值呢。
    不知道我表达清楚了没有,请前辈些给我看看,解惑,我现在卡在这儿了,没办法继续学下去,小生先拜谢了!!!
搜索更多相关主题的帖子: 计算机专业 多多 start 笑话 
2012-01-14 22:18
flat2010
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-14
收藏
得分:0 
回复 2楼 zaixuexi
仁兄留步,code段确实不止48字节,我的电脑上是ox44。我是在其他论坛上搜答案的时候看到有人说是3行。你第2、3点说的是什么意思我不太明白还望明示。
2012-01-15 00:32
flat2010
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-14
收藏
得分:0 
回复 4楼 zaixuexi
感谢这位仁兄的耐心讲解,第一次提问就能得到你的细心帮助,真是感激之至。大部分问题我懂了,不过你第二个答复中的:因为你使用了伪指令segment,所以OS分配了不同的段地址,不懂请google。这个google关键字该用哪些,我搜了下没找到,还请再明示,我比较笨了,呵呵,谢谢先。
2012-01-15 21:37
flat2010
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-14
收藏
得分:0 
回复 5楼 flat2010
还有个问题要请教仁兄,就是不用debug追踪,只看程序,如何确定源程序究竟占用多少内存空间呢?
2012-01-16 00:28
快速回复:用debug跟踪时,关于程序加载后DS、SS、CS关系的疑问,请高手指正,正 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030636 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved