首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

CS和DS的关系?解决方法

2012-03-01 
CS和DS的关系??assumecs:code,ds:data,ss:stackdatasegmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,

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 段址类似

热点排行