Почему 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