为什么MS-DOS不初始化DS和ES寄存器?

时间:2012-12-01 21:15:33

标签: assembly dos intel masm x86-16

为什么DSES寄存器的初始化必须由程序员手动完成?

例如:

MOV AX, DTSEG
MOV DS, AX

另一方面,CSSS寄存器由操作系统初始化(在MS-DOS中)。为什么会这样?

2 个答案:

答案 0 :(得分:9)

因为CSSS寄存器对于程序执行至关重要,而DSES寄存器指向用户定义的数据段。默认情况下,执行程序中不存在任何数据,这对于初始化DSES没有任何意义。作为程序编写者,您可以通过设置数据段寄存器来指定数据的位置。

修改:正如@FrankKotler在.com文件中正确指出的那样(整个程序大小不超过单段),DS和{{1} }被初始化并等于ES。对于其他执行模型,CSDS由指向ES的指针初始化(这不是指向真实用户数据的指针)。

答案 1 :(得分:-1)

你的问题的正确答案(我相信V.Aghazarian大师在大学里问过你)不是因为CS和SS对程序执行至关重要。

MS-DOS中的问题是Program Segment Prefix

来自维基百科:

  

执行程序时,PSP的段地址在DS寄存器中传递。稍后还可以通过使用Int 21h功能51h或Int 21h功能62h来确定。这两个函数都将返回寄存器BX中的PSP地址。1