381984421 发表于 2012-3-4 00:11:49

关于DS和CS。

初期刚开始学习汇编,在DS和CS很迷糊,小甲鱼里边说到DS是数据段,CS是代码段,他们是怎么区别的,也就是说他们的作用是什么?比如说一段汇编指令,CS和IP的指向是一段汇编指令,还是一个内存单元的地址,请教下,,在此谢谢大家了。

Mr.C 发表于 2012-3-4 01:54:12

看一段视频如果看不大懂的情况下。
可以重复看两三遍,或是先跳过,回头再来看。
知识结构很重要。一个概念通常是在一定的基础准备下才可以理解。

疾风飘流 发表于 2012-3-4 01:58:53

在汇编语言中,不管是数据还是代码,都是以数的形式储存在内存单元中的,而特殊寄存器所指向物理地址决定了它是数据还是代码。比如说在13A8:0100到0102内存中的数据是 B8 00 20,那么如果DS:指向这里,那么这几个就是数据,而如果CS:ip指向这里,那么就是mov ax,2000的意思。这样楼主可懂?

晨枫 发表于 2012-3-4 11:53:42

呵呵,这个好说,DS里面一般是存放数据的,当然CS里面也可存放数据,不过这样有些不合逻辑,就像男生可以上女厕所但不合理而且很容易产生误会一样,而如果是CS中的数据则一般是用JMP指令跳转开不执行,因为你是想把这些二进制数作为数据存放而不是指令执行。而且数据放在DS中,就可以直接用DS索引到数据从而进行操作,比较方便也明了。    至于你说的一段汇编指令,那它当然是存放在内存里面了,而正常情况下,CS:IP就指向了该汇编指令的首个内存单元的地址,哈哈,不知这样瞎扯你听懂了没.

莫名其妙 发表于 2012-3-4 15:00:20

完全是数据的一段内存空间当你需要把它当成数据 来使用那么就用DS:[]   你需要把它当成 代码来看 那就用 cs:ip 或者是看成栈 那就把它看成ss:sp一段内存空间 你给他设定成数据段那就按照数据的方式去看你给他设定成代码段   那就用代码的方式去看他一段内存既可能是代码也可能是数据 也可能是一个栈 关键在于你怎么看!~

1020232499 发表于 2012-3-4 16:44:43

cs和ip指向的是指令存放在内存单元的地址
ds和cs存放的只是数据地址,cpu按那地址去寻找数据
若是ds则cpu把它当作存放数据的地址
cs和ds相当于指针而已

菜鸟学汇编 发表于 2012-3-4 22:06:09

1.cs和ip结合 指向的内存位置的数据,cpu就识别为代码。如果ds:指向的内存位置,cpu就识别为数据,即使两种方式指向的内存位置相同,表示的意义也不一样。
2.就比如家庭里的爸爸,从你的眼里看去他是父亲,从妈妈的眼里看去他是老公,但是都是指的同一个人。cpu用不同的途径来看同样的数据,数据代表的角色就不一样了。

飞驰吧!少年 发表于 2015-6-28 08:27:39

CS指向一段时汇编指令的内存段地址,而ds是将要访问数据段地址。

fast 发表于 2015-6-28 09:50:09

路过

fast 发表于 2015-7-1 02:32:03

在汇编语言中,不管是数据还是代码,都是以数的形式储存在内存单元中的,而特殊寄存器所指向物理地址决定了它是数据还是代码。比如说在13A8:0100到0102内存中的数据是 B8 00 20,那么如果DS:指向这里,那么这几个就是数据,而如果CS:ip指向这里,那么就是mov ax,2000的意思。

神奇病人 发表于 2016-2-11 00:24:01

表示一个偏移地址为address的内存单元。
用mov指令要存放内存单元时,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在ds寄存器中。
同样的,在debug中使用d命令和e命令(处理内存数据),只需给出单元的偏移地址,段地址默认在ds寄存器中;使用a命令,u命令和t命令(处理指令),只需给出单元的偏移地址,段地址默认在cs寄存器中;

上面说 段地址默认在ds寄存器中,后面又说,段地址默认在ds寄存器中。

到底段地址默认存在哪里?是DS还是CS?

御坂20037号 发表于 2016-9-10 00:33:22

ds和cs都是段地址,cpu读取cs作为执行下一条指令的段地址而读取ds作为读取内存值的段地址,刚刚看完视频我觉得应该是这样

冲啊大笼包 发表于 2016-11-13 08:40:04

{:10_266:}{:10_266:}

fzw19951207 发表于 2018-8-13 16:26:16

1、CS和DS都是段寄存器
2、
/*
物理地址:内存单元在计算机中的唯一编号,CPU根据物理地址才能找到 对应 的 内存单元,内存单元中存着数据。
8086中的 物理地址 = 基础地址(段地址 * 16 ) + 偏移地址
计算机中的内存被人为看成是一维的连续内存块。内存单元中存储的数据的本质都是二进制。但是有些是代码,有些是数据。
所以就人为的设置那个段是代码段,那个段是数据段。CPU设计上也就有了 CS和DS。
CS:代码段寄存器 (存放着代码段的 段地址)
DS:数据段寄存器 (存放着数据段的 段地址)
*/
3:
/*
1: MOV BX 1000H
2: MOV DS BX
3: MOV AL
*/
//上述中的1、2、3数字实际代码中不存在,仅表示行号。
//1:把 物理地址为 1000H 的 内存单元中的数据 送入 BX
//2:把 BX中存放数据的地址 送入DS,因为DS只能存放数据段地址
//3:[] 在mov 指令中标表示一个 内存单元,里面的 0 表示偏移地址。这里没有给出段地址,MOV 就无法根据物理地址做操作,CPU这时候就会默认自动去
DS中取段地址。取的地址为 1000H:0 ,然后MOV根据这个物理地址,找到对应内存单元中的数据,将这个数据送入AL寄存器中。
注:8086微处理器不支持直接将数据送入段寄存器,所以用BX作为中间变量。

纯手打,希望能采纳!
页: [1]
查看完整版本: 关于DS和CS。