回 帖 发 新 帖 刷新版面

主题:初学困惑`

DATA SEGMENT
S1 DB 'ABCDEFGHIJKLMNOPQISTYWXXYZ01234'     ; 共为三十个
S2 DB  30 DUP(?)
DATA ENDS
CODE SEGMENT 
ASSUME CS;CODE DS;DATA 

我有点不明白就是S1和S2是定义在同一个数据段中的,段寄存器DS只有16位,怎么能储存这么多数据呢??如果这个16是代表能放2的16次方这么多个数据的话,我想知道那数据存放的空间有在哪里呢??困惑~
希望能解答下 谢谢~

回复列表 (共1个回复)

沙发

8086CPU最大寻址64K(2^16),而data segment是定义了一个数据段,而数据段只占用了60个字节,所以完全有足够的空间存放数据。
编译器是根据 "end 标号"语句中的"标号"来确定程序入口的,所以CS中的"标号"的地址,既是内存中的数据开始被CPU解释为汇编指令的地址,你定义的数据段在code的前面,则内存中ds在cs之前开辟空间,用来存储数据,相反的话,就在cs后面开辟空间,用来存储数据。

汇编入门,推荐使用王爽老师的《汇编语言》一书,通俗易懂。还可以去http://www.asmedu.net/网站和大家交流,学习会事半功倍。
ps.我也是刚刚学习汇编,欢迎你来王爽老师的网站逛逛,共同进步!

我来回复

您尚未登录,请登录后再回复。点此登录或注册