Почему MS-DOS не инициализирует регистры DS и ES?

Почему инициализация DS а также ES регистры должен делать программист вручную?

Например:

MOV AX, DTSEG
MOV DS, AX

С другой стороны, CS а также SS регистры инициализируются операционной системой (в MS-DOS). Почему это так?

2 ответа

Так как CS а также SS регистры необходимы для выполнения программы в отличие от DS а также ES регистры, которые указывают на определенные пользователем сегменты данных. По умолчанию нет никаких данных в исполняющей программе, это ничего для инициализации DS а также ES с. Как автор программ вы можете указать, где находятся ваши данные, установив регистры сегментов данных.

Изменить: как правильно заметил @FrankKotler, в .com файл (весь размер программы не превышает одного сегмента), DS а также ES инициализируются и равны CS, Для других моделей исполнения, DS а также ES инициализируются указателем на PSP (который не является указателем на реальные данные пользователя).

Правильный ответ на ваш вопрос (который, я считаю, мастер В.Агазарян задал вам в колледже) не потому, что CS и SS необходимы для выполнения программы.

Проблема в MS-DOS была с префиксом сегмента программы

Из википедии:

Адрес сегмента PSP передается в регистр DS при выполнении программы. Это также может быть определено позже с использованием функции Int 21h 51h или функции Int 21h 62h. Любая функция вернет адрес PSP в регистре BX. 1

Другие вопросы по тегам