MS-Dos - это 16-битная ОС.Исполняемые файлы, которые запускаются в MS-Dos, бывают двух видов: «.exe» и «.com».Думайте о «.com» как о «.exe» со множеством значений по умолчанию, принятых ОС.Файлы «.exe» содержат заголовок, который ОС читает для определения различных параметров.Одним из этих параметров является адрес точки входа.Определен только один адрес точки входа (а для «.com» это всегда cs: 0x100), и это тот адрес, к которому ОС переходит при загрузке программы.
MS-Dos имеет функции длязагрузить другой исполняемый файл и запустить его, но он может запускаться только с адреса, указанного в заголовке.Никакой другой адрес функции не экспортируется, поэтому вы не можете просто вызвать какую-то произвольную функцию в другом исполняемом файле.В MS-Dos нет системы DLL.
Итак, чтобы вызвать какую-то произвольную функцию во втором исполняемом файле, вам нужно создать свою собственную систему стилей DLL.Это не тривиально, поскольку ОС использует модель сегментированной памяти, то есть память делится на 64 тыс. Страниц, а адреса формируются из адреса сегмента, добавленного к смещению, например, сегмент * 16 + смещение.Итак, есть 2 ^ 12 способов выразить один и тот же физический адрес.В процессе загрузки MS-Dos должен исправить эти значения сегмента, чтобы отразить фактическое местоположение в памяти, в которую была загружена программа.Помните, в MS-Dos нет виртуальной памяти.Если вы хотите создать свою собственную систему DLL, вам нужно будет выполнить это исправление самостоятельно для кода, размер которого превышает 64 КБ (код + данные менее 64 КБ могут игнорировать сегменты и обрабатывать все адреса как просто 16-битные смещения).
Если бы вы знали адреса, загрузка «.exe» с использованием MS-Dos API была бы сложной задачей, так как вам нужно было бы знать адрес CS (сегмента кода), в который загружен исполняемый файл.