ий образ машинних команд, призначених для виконання. Так як файли не містять ніякої настроювальної інформації, то вони компактніше еквівалентних файлів типу. ЕХЕ, до того ж завантажуються для виконання трохи швидше. Зауважимо, що DOS не намагається з'ясувати, чи дійсно файл типу. СОМ містить здійсниму програму (на відміну від файлу. ЕХЕ немає ознаки, ні контрольної суми). Система заносить будь-який файл з розширенням. СОМ в пам'ять і передає йому управління.
Tак як програми типу. СОМ завантажуються безпосередньо над префіксом сегмента програми і, крім того, не мають заголовка, який може задавати іншу точку входу, то їх початковий адреса завжди становить 0100H, що визначено розміром префікса. Максимальна довжина програми типу. СОМ становить 65536 байт мінус довжина префікса (256 байт) і обов'язкове слово стека (2 байти) [2, c. 54]. p> Коли управління передається програмі типу. СОМ, всі регістри вказують на префікс. У покажчик стека SР, якщо дозволяє пам'ять, поміщається число 0FFFFН, в іншому випадку - максимальний адреса пам'яті мінус 2 байти. (DOS при вході в програму поміщає в стек нульове слово.)
Незважаючи на те що розмір здійсненного файлу типу. СОМ не може перевершити 64 К, що існують в даний час версії системи МS DOS виділяють програмам типу. СОМ в момент їх завантаження всю область транзитних програм. Так як такі програми часто є спадщиною раннього періоду МS-DOS і необов'язково коректні в відносин управління пам'яттю, то операційна система робить найгірше припущення і дає програмам типу. СОМ все, що можливо. Якщо програма типу. СОМ хоче використовувати для порушення іншого процесу функцію Ехес, то спочатку вона повинна скоротити виділяється їй пам'ять до мінімуму, забезпечує продовження її роботи, звертаючи увагу при цьому на збереження стека програми. Коли програма типу. СОМ завершує виконання, вона повертає керування операційній системі за допомогою системного переривання Int 21Н з функцією 4СН.
Прикладна програма типу. СОМ може компонуватися з багатьох окремих об'єктних модулів. Всі модулі повинні використовувати одне і те ж ім'я сегмента програми та ім'я класу, причому модуль з точкою входу за відносною адресою 0100Н всередині сегмента при компонуванні має бути першим. Крім того, всередині програми типу. СОМ все процедури повинні мати атрибут NEAR (ближній), так як вся здійсненне програма постійно знаходиться в одному сегменті [10, c. 29]. p> У процесі компонування програми типу. СОМ компонувальник видає на екран дисплея повідомлення:
Warning: no stack segment (Попередження: немає сегмента стека)
Це повідомлення можна ігнорувати. Результатом роботи, компонувальника є файл типу. ЕХЕ, який до виконання повинен бути перетворений з допомогою системної утиліти EXE2BIN в файл типу. СОМ.
2.4 Програми типу. EXE
Структура програми типу. СОМ дуже проста, а тому програміст, якому потрібно скомпілювати подібного гатунку швидку утиліту, може зосередитися на логіці програми і в мінімальному ступені вникати проблеми управління транслятором. Однак програми типу. СОМ мають певні недоліки, і тому найбільш серйозні програми на мові асемблера в системі DOS написані так, що їх можна перетворити у файли типу. ЕХЕ.
У той час як програми типу. СОМ мають істотне обмеження на загальний розмір (не більше 64 Кбайт в сумі на власне програму, дані і стек), програми типу. ЕХЕ можуть бути практично необмеженої розміру. Хоча звичайний програмний завантажувач в системі DOS не використовує цієї гідності файлів типу. ЕХЕ, але здатність завантажувати окремі частини великих програм в різні ділянки пам'яті, а також сприятлива можливість виділити "чистий код "програми, який може розділятися декількома завданнями, - все це істотно в багатозадачних середовищах типу Мicrosoft Windows.
В операційній системі DOS завантажувач завжди вводить програму типу . ЕХЕ в пам'ять безпосередньо над префіксом сегмента програми, хоча порядок сегментів програми, даних і стека може змінюватися. Файл типу. ЕХЕ містить заголовок, або блок керуючої інформації характерного формату. Розмір заголовка визначається числом команд програми, настроюються під час завантаження, але завжди кратний 512 байт. До того як DOS передає управління програмі, обчислюються початкові значення регістра сегмента програми CS і покажчика команд IP, при цьому використовуються інформація про точку входу з заголовка файлу типу. ЕХЕ, а також адресу завантаження програми. Ця інформація витягується з оператора Еnd вихідного тексту одного з модулів програми. Регістри сегменту даних DS і додаткового сегменту ES вказують на префікс, таким чином, програма може звертатися до покажчика блоку оточення, хвосту команди та іншої корисної інформації, що у РSР [5, c. 65]. p> Початковий вміст регістра сегмента стека SS і покажчика стека SP встановлюється з заголовка. Ця інформація береться з оголошення сегмента з атрибутом SТАСК в початковому те...