+ -
当前位置:首页 → 问答吧 → 初学者对于DS寄存器与程序段前缀(PSP)的两个疑惑...?从王爽老师《汇编语言》想到的....

初学者对于DS寄存器与程序段前缀(PSP)的两个疑惑...?从王爽老师《汇编语言》想到的....

时间:2010-11-09

来源:互联网

小弟我初学汇编语言,在阅读王爽老师的那本《汇编语言》(第二版),在第四章92页“EXE文件中程序的加载过程”处,我有两个地方一直想不清楚...
1: 关于DS数据寄存器,应为DS的值我们是可以在写程序的时候就已经赋值完毕的(当然也可以不赋值),而且DS:0000H可以直接确定程序在内存中的位置, 但是我在写程序的时候不知道内存DS:0000H处的情况,我自己的代码在加载入内存之后,将本来内存DS:0000H处有用的数据给覆盖了怎么办... 没有什么保护措施么.......?
2: 关于程序段前缀PSP,它占据了DS:0000H段的前256个字节,王爽老师说“DOS要利用PSP来和被加载程序进行通信”但是我记得我在写程序的时候,我是有过把DS:0000H往后的一段内存给存入了数据的啊...(比如可以存入 字符串 常量什么的)并且我的程序也没有问题啊.......... 按说这样子应该就会把PSP开始的那一部分的内容给改变了才对......
非常费解...
恳请各位前辈们能给予小弟我指导... 
小弟我先谢谢各位啦!!!!!!!!

作者: bigshady   发布时间: 2010-11-09

这就是为什么所有定义了数据段的程序,如
data segment
 a dw ?
data ends
在代码段中,最开始执行的语句一般都是
mov ax,data
mov ds,ax
在没有给DS重新赋值前,DS:0000是PSP的首地址。但在这两句后,DS:0000就指向你的数据段了。

作者: shzhfu   发布时间: 2010-11-09

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

作者: rrrfff   发布时间: 2010-11-09