为什么DS
和ES
寄存器的初始化必须由程序员手动完成?
例如:
MOV AX, DTSEG
MOV DS, AX
另一方面,CS
和SS
寄存器由操作系统初始化(在MS-DOS
中)。为什么会这样?
答案 0 :(得分:9)
因为CS
和SS
寄存器对于程序执行至关重要,而DS
和ES
寄存器指向用户定义的数据段。默认情况下,执行程序中不存在任何数据,这对于初始化DS
和ES
没有任何意义。作为程序编写者,您可以通过设置数据段寄存器来指定数据的位置。
修改:正如@FrankKotler在.com
文件中正确指出的那样(整个程序大小不超过单段),DS
和{{1} }被初始化并等于ES
。对于其他执行模型,CS
和DS
由指向ES
的指针初始化(这不是指向真实用户数据的指针)。
答案 1 :(得分:-1)
你的问题的正确答案(我相信V.Aghazarian大师在大学里问过你)不是因为CS和SS对程序执行至关重要。
MS-DOS中的问题是Program Segment Prefix
来自维基百科:
执行程序时,PSP的段地址在DS寄存器中传递。稍后还可以通过使用Int 21h功能51h或Int 21h功能62h来确定。这两个函数都将返回寄存器BX中的PSP地址。1