汇编语言 程序运行后关于DS段寄存器的问题:

这段程序运行后 为什么ds的值和cs值不一样,我记得ds不就是存放段地址的吗?如果我记错了那么在这段程序里 从0b2d:0000到0b3d:0000这段空间是16个字节,在这个空间里到底存放的是什么东西???请做出详细解释 ,复制的答案不要给我,我也不会给分 解释的好,我会继续追加分数
我还得补充一点,从0b3d:0000开始的到0b3d:0010 的16个字节是存放程序开始定义的那八个数的

程序加载后,ds中存放着程序所在内存区的段地址,而cs中的是代码段的开头段地址,默认便宜地址都是为0
0b2d:0000到0b3d:0000这段空间是256字节,是PSP区,是用来让程序和dos进行通信的
另外最好不要在code segment中定义数据,不然会吧数据当成代码运行
可以另起一个data segment来定义数据
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-20
16位可执行文件被加载到内存,整个加载文件模块前有个系统自动加载的PSP,其起始地址为ds:[0],psp占256字节,可执行程序映像起始地址为(ds+10h):0。即cs=ds+10h。

您说的“从0b2d:0000到0b3d:0000这段空间是16个字节”是错的,0b2d:0000到0b3d:0000有257字节。从0b2d:0000到0b2d:00ffh有256字节,即系统加载的PSP.。一般不用理会,您如果非要搞清楚可百度程序段前缀PSP。
程序影像起始地址为0b3d:0000,即从0b3d:0000开始的到0b3d:0010 的16个字节是存放程序开始定义的那八个数。
第2个回答  2013-02-20
由于本人工作环境不是8086架构,故而对于本人以下言论楼主应该持有保留态度。

DS 和 CS都是段寄存器,分别是数据段寄存器和代码段寄存器,两者之间也没有什么必然的联系。
程序源码中也没有试图主动修改这两个段寄存器(代码段基址寄存器的改变要通过跳转指令),故而结束后是系统初始化时的段基址值。
DS和CS所指定的内存区域也没有必然的连续性。

谬误之处还请指正。
第3个回答  2013-02-20
学习。。。

汇编语言 程序运行后关于DS段寄存器的问题:
程序加载后,ds中存放着程序所在内存区的段地址,而cs中的是代码段的开头段地址,默认便宜地址都是为0 0b2d:0000到0b3d:0000这段空间是256字节,是PSP区,是用来让程序和dos进行通信的 另外最好不要在code segment中定义数据,不然会吧数据当成代码运行 可以另起一个data segment来定义数据 ...

汇编语言:为什么MOV DS,[2000H]语句不合法,而MOV DS,DS:[2000H]就合法...
编译软件,有错误。DS 是段寄存器,可以用存储器操作数来赋值,但是不可用立即数赋值。MOV DS, [2000H],按照教材上的规定,[2000H] 是存储器操作数。而:MOV DS, 2000H,中的 2000H 才是立即数。但是,编译软件,并不按照这个规则。在编译软件眼里,上面的两种形式,都是《立即数》。只有这种写...

求助!汇编语言 将段地址填写到段寄存器的具体方法问题!
段寄存器的值不能由寄存器以外的其他方式获取,X86就是这么规定的 所以一定要先读入AX,再从AX复制到DS

汇编语言div和dd指令问题
这程序,实现了:100001 除以 100。在 data segment 之下,DD 伪指令,就在第0字节~第3字节,存放了32位数 100001,低字节在前。当把 data 送到 DS 之后,DS:[0] ~ DS:[3],即为 100001。DS:[0] ~ DS:[1],即为 100001 的低 16 位数;DS:[2] ~ DS:[3],即为 100001 的高 16...

汇编语言中cs.ds.es.ss怎么用?
DS(DataSegment):数据段寄存器;SS(StackSegment):堆栈段寄存器;ES(ExtraSegment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。

汇编语言中cs.ds.es.ss怎么用?
在汇编语言中,CS、DS、ES和SS是四个重要的段寄存器,它们在程序的执行和内存访问中扮演着关键角色。以下是对这些寄存器的详细解释:1. CS - 代码段寄存器(Code Segment)CS寄存器用于存储当前正在执行的代码的内存段的地址。在实模式下,它通常与IP(指令指针)寄存器配合使用,以指向下一条要执行的...

汇编语言试题(求大神啊,万分感谢)
问题2:DS是默认的段地址寄存器,尽管前面有一个ASSUME指定了DS指向DATA段,但汇编语句需要自行初始化,即将DATA地址赋给DS,但DS只能和AX等寄存器进行互操作,因此需要先将DATA赋给AX。代码中前面的伪代码DATA SEGMENT\/ENDS声明使得DATA自动作为段地址变量;后面的实际代码中需要该代码支撑的语句比较多,但...

汇编语言中cs,ds,ss的区别
一、寄存器功能区别 CS(代码段寄存器)用于存储当前执行的代码段的段基值。DS(数据段寄存器)用于存储数据段的段基值。SS(堆栈段寄存器)用于存储堆栈段的段基值。二、作用和位置差异 CS指向当前执行的代码段,与IP寄存器结合以确定下一条指令的地址,通常不直接修改。DS指向数据段,用于存储程序中使用...

汇编语言中 cs, ds,ss 的区别
1、代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值。2、数据段寄存器DS:存放数据段的段基值。3、堆栈段寄存器SS:存放堆栈段的段基值。三、段地址不同:1、cs代码段地址,联合ip作为cpu指向当前正在执行的那条指令所使用,不能随意修改它。2、ss堆栈度段地址问联合sp定义一个答堆栈,...

汇编语言中的操作数寻址方式问题.存储器和寄存器问题?高手请进_百度知 ...
首先内存和寄存器都是可以存放数据的 而寄存器是就那么几个,不可能把所有数据都放在寄存器里 寄存器里面是有值的,如果直接丢给CPU运算,就是寄存器寻址。如果把寄存器里面的数当作地址编号,跟据编号在内存里找到另一个数,就是存储器寻址。CS,DS,ES,SS是CPU的寄存器 MOV AX,DS 都是寄存器寻址方式...

相似回答