"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора


Поскольку при загрузке программы MS DOS выделяет ей всю дос-
тупную память, то необходимо освободить место в памяти. Если не
освободить часть памяти, то не будет места для загрузки второй
программы. В [1.3.1] объяснено как это сделать с помощью функции
SETBLOCK. После того как память освобождена, Вы должны просто
поместить в BX требуемое число 16-байтных параграфов, заслать 4AH
в AH и выполнить прерывание 21H, делая доступным программе именно
то число параграфов, которое ей требуется.
Блок параметров, на который должны указывать ES:BX это
14-байтный блок блок памяти, в который Вы должны поместить сле-
дующую информацию:

DW сегментный адрес строки среды
DD сегмент и смещение командной строки
DD сегмент и смещение первого FCB
DD сегмент и смещение второго FCB

Строка среды - это строка, состоящая из одной или более специ-
фикаций, которым следует MS DOS при выполнении программы. Элемен-
ты строки среды такие же, как и те, что можно обнаружить в диско-
вом файле CONFIG.SYS. Например, в строку может быть помещено
VERIFY = ON. Просто начните строку с первого элемента, завершив
его 0, потом запишите следующий и т.д. За последним элементом
должны следовать два 0. Строка должна начинаться на границе
параграфа (т.е. ее адрес по модулю 16 должен быть равен нулю).
Это вызвано тем, что соответствующий вход в блоке параметров,
указывающий на строку, содержит только 2-байтное сегментное зна-
чение. Все это не нужно, если новая программа может работать с
той же строкой среды, что и программа "родитель". В этом случае
надо просто поместить два символа 0 в первые 2 байта блока пара-
метров.
Следующие 4 байта блока параметров указывают на командную
строку для загружаемой программы. "Командная строка" - это сим-
вольная строка, определяющая способ работы программы. При загруз-
ке программы из DOS она может иметь вид вроде
EDITOR A:CHAPTER1\NOTES.MS. При этом вызывается редактор и ему
передается имя файла в подкаталоге накопителя A для немедленного
открытия. Когда Вы подготавливаете командную строку для EXEC, то
надо включать только последнюю часть информации, но не имя загружа-
емой программы.(т.е. A:CHAPTER1\NOTES.MS)
Перед командной строкой должен стоять байт, содержащий длину этой
строки, и она должна завершаться символом <ВК> (ASCII 13).
Последние 8 байтов блока параметров указывают на управляющие
блоки файлов (FCB). FCB содержит информацию об одном или двух
файлах, указанных в командной строке. Если открываемых файлов
нет, то надо заполнить все 8 байт символом ASCII 0. В [5.3.5]
объяснено, как работает FCB. Начиная с версии MS DOS 2.0, исполь-
зование FCB необязательно и Вы можете не включать информацию FCB,
вместо этого используя новую конвенцию дескриптора файлов (file