当前位置: 代码迷 >> 汇编语言 >> CS和DS的关系?解决方法
  详细解决方案

CS和DS的关系?解决方法

热度:8940   发布时间:2013-02-26 00:00:00.0
CS和DS的关系??
assume   cs:code,ds:data,ss:stack
data   segment
dw   0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data   ends
stack   segment
dw   0,0,0,0,0,0,0,0
stack   ends
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
end   start

问题:1.设程序加载后,CODE段的段地址为X,则DATA段的段地址是什么?STACK段的段地址是什么?
2.对于如下定义的段:
name   sgement
.....
name   ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为多少?

答案:1.X-2,X-1
2.(N/16+1)*16  


自已刚学汇编,看了好久都没看明白这两题为什么是这个答案,为什么这题能从DS的值推出CS的值呢,是不是DS和CS以用SS有一定的数值联系啊?望各位高手替俺看看,不胜感激!!

------解决方案--------------------------------------------------------
DATA 段的段址是要自己赋予 DS 的. STACK 也是, 不过 SS:SP 的设置可以通过在 stack segment 语句上加上 stack 的修饰来实现自动赋值, 如 stack segment stack 这样. 这是因为 exe 格式的文件中, 其文件头部结构里有专门的域来存放缺省初始的 SS:SP.
各个段在内存中是紧连着分布的, 而且, 如果没有特别的指派, 它们的顺序也和源程序中出现的一致. 所以, 往往可以通过某个段的段址, 相关段的大小来推算出其它段的段址. 比如, code 段的段址为 x, stack 段为 7 个word, 紧排在 code 段之前, 由于段的基准大小为 16 字节, 所以 stack 实际占用 16 字节, 所以其段址就是 (x-1) 了. data 段址类似
  相关解决方案