为什么必须由程序员手动完成DS
和ES
寄存器的初始化?
例如:
MOV AX, DTSEG
MOV DS, AX
另一方面,
CS
和SS
寄存器由操作系统(在MS-DOS
中)初始化。为什么会这样呢? 最佳答案
因为CS
和SS
寄存器对于程序执行是必不可少的,而DS
和ES
寄存器则指向用户定义的数据段。默认情况下,执行程序中不存在任何数据,这也无法初始化DS
和ES
。作为程序编写者,您可以通过设置数据段寄存器来指定数据的位置。
编辑:如@FrankKotler所正确指出的那样,在.com
文件中(整个程序大小不超过单个段),DS
和ES
初始化并等于CS
。对于其他执行模型,DS
和ES
由指向PSP
的指针(不是指向实际用户数据的指针)初始化。
关于assembly - MS-DOS为什么不初始化DS和ES寄存器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13663811/