10

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

例如:

MOV AX, DTSEG
MOV DS, AX

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

4

2 回答 2

9

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

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

于 2012-12-01T21:20:45.843 回答
-1

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

MS-DOS 中的问题在于程序段前缀

来自维基百科:

PSP 的段地址在程序执行时传入 DS 寄存器。也可以稍后通过使用 Int 21h 函数 51h 或 Int 21h 函数 62h 来确定。任一函数都将返回寄存器 BX 中的 PSP 地址。1

于 2017-05-16T11:57:33.960 回答