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

moh*_*hed 8 assembly dos intel masm x86-16

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

例如:

MOV AX, DTSEG
MOV DS, AX
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ame 9

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

编辑:正如@FrankKotler正确记录的那样,在.com文件中(整个程序大小不超过单段),DS并且ES被初始化并等于CS.对于其他执行模型,DSES通过指针初始化PSP(这不是指向真实用户数据的指针).

  • 严格来说,ds和es ARE初始化 - 指向PSP,而不是您的数据段(dos不知道 - 您可能有多个,或者您的代码段中有数据).在.com文件中,所有内容都在同一个(PSP)段中,因此ds和es被正确初始化. (8认同)