Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么DS和ES寄存器的初始化必须由程序员手动完成?
DS
ES
例如:
MOV AX, DTSEG MOV DS, AX
另一方面,CS和SS寄存器由操作系统初始化(in MS-DOS)。为什么会这样?
CS
SS
MS-DOS
因为CS和SS寄存器对于程序执行是必不可少的,而DS和ES寄存器指向用户定义的数据段。默认情况下,执行程序中不存在任何数据,这没有什么可以初始化DSandES的。作为程序编写者,您可以通过设置数据段寄存器来指定数据的位置。
编辑:正如@FrankKotler 正确指出的那样,在.com文件中(整个程序大小不超过单个段),DS并且ES被初始化并等于CS. 对于其他执行模型,DS并由ES指针初始化PSP(这不是指向真实用户数据的指针)。
.com
PSP
您的问题的正确答案(我相信 V.Aghazarian 大师在大学问过您)并不是因为 CS ans SS 对于程序执行至关重要。
MS-DOS 中的问题在于程序段前缀
来自维基百科:
PSP 的段地址在程序执行时传入 DS 寄存器。也可以稍后通过使用 Int 21h 函数 51h 或 Int 21h 函数 62h 来确定。任一函数都将返回寄存器 BX 中的 PSP 地址。1