为什么我们必须在MS-DOS中初始化DS和ES寄存器?

时间:2014-12-10 17:17:11

标签: assembly dos cpu-registers x86-16 segment

在MS-DOS中,为什么DS和ES寄存器的初始化必须由程序员手动完成,尽管操作系统负责初始化这些寄存器。

为什么我们不能为CS和SS寄存器执行此操作? MS-dos的哪个功能引入了这个?

2 个答案:

答案 0 :(得分:1)

这只是OS设计师的选择。

DOS是一个最小的操作系统,所以尽可能少。必须设置CS和SS寄存器。如果没有为您设置CS,您的代码将无法运行。必须设置SS,因为DOS使用一个堆栈来处理所有事情。即使在程序运行时,中断也会每秒使用堆栈超过30次。 (这就是为什么你必须在修改SS时关闭中断的原因。)只有当你的程序使用它们时才需要其他段(并且当然可以编写没有的代码),所以DOS并不关心。

实际上在DOS版本中我记得(并且已经很多年了,所以这可能是错的),DS和ES被设置为等于CS,这是你想要的非常小的程序,最多64k的代码+数据+堆栈需求。

答案 1 :(得分:0)

EXE文件根本没有单个或其他特殊段来默认初始化DS,并且具有多个静态数据段。 IOW所有全局变量都是FAR。

首先加载DS到需要加载的第一个变量的段。