|
|
|
|
Загрузка файла типа .COM
Начальные шаги, предпринимаемые при загрузке и выполнении программного файла типа .COM, идентичны шагам, предпринимаемым при загрузке
программного файла типа .EXE. При установке "контекста" процесса MS-DOS сначала инициализирует блок среды, выбирая информацию либо из текущей среды
системы (случай, принимаемый по умолчанию), или из среды, указываемой порождающим процессом.
После установки среды, MS-DOS распределяет блок памяти для программы. Для программ типа .COM этот блок памяти занимает всю оставшуюся память.
Минимально требуемый размер равен размеру файла программы типа.COM плюс память для PSP. После получения блока памяти MS-DOS продолжает строить
сегмент программого префикса для программы в начале блока памяти. В этой точке используемый процесс загрузки заметно отличается от того, который
используется с программой типа .EXE.
Файл типа .COM читается в память непосредственно выше PSP по смещению 100 (шестнадцатиричное значение) в блоке памяти и без настройки. Все
регистры сегмента инициализируются для адреса сегмента PSP, указатель инструкции устанавливается в 100 (шестнадцатиричное значение), а указатель стека
устанавливается в значение 0FFFE (шестнадцатиричное значение) или ниже, если имеется менее 64 Кбайт памяти, доступной процессу. (Минимальное значение
указателя стека равно 0100 - шестнадцатиричное значение). Управление возвращается в процесс и программа .COM начинает выполнение.
Некоторые программы .COM имеют неприятности при функционировании из-за минимального стека, обеспечиваемого MS-DOS. Если программа выполняется
при слишком маленьком стеке, то в результате это может привести к росту стека вниз в раздел программы или данных, что непременно приведет к фатальному
окончанию программы. Если программа .COM требует стек, больше минимального размера в 256 байтов, то программист может построить свой минимальный стек
памяти в образе программы путем резервирования большего пространства памяти в конце программы. (Запомните, что MS-DOS при загрузке программы типа
.COM автоматически добавит для стека не менее 256 байт памяти). Этот способ при недостатке памяти для требуемого стека не даст возможность MS-DOS
загрузить программу.
|
|