1.2.2          Основні сегменти програми

Область пам’яті, що адресується в програмі з використанням одного й того ж значення сегментного регістру, називають сегментом програми. Адрес початку сегменту визначає пара segment:0. Сегмент не може бути більшим 64 Кбайт, так як максимально можлива фізична адреса для того ж самого значення segment задається парою segment:FFFFh.

Машинний код, дані та стек програми, що виконується, утворюють так званий завантажувальний модуль програми в оперативній пам’яті. ”Спеціалізація” сегментних регістрів визначає й структуру завантажувального модуля. Ту його частину, яка містить машинні команди й адресується з використанням незмінного значення CS, називають кодовим сегментом. Для підвищення продуктивності програми компоновники зазвичай зводять машинний код всіх її модулів в неперервну область, яку називають кодовою секцією завантажувального модуля. Розмір кодової секції може бути будь-яким. Розмір окремого кодового сегменту в секції не перевищує 64 Кб. Кодова секція може містить один або декілька окремих кодових сегментів. Після завантаження програми в оперативну пам’ять CS та IP встановлюються на першу інструкцію кодової секції, що виконується, ‑ так звану точку входу завантажувального модуля. Та частина завантажувального модуля, яка адресується з використанням незмінного значення DS, зветься сегментом даних. Як, правило, всі сегменти даних в завантажувальному модулі розташовуються один за одним, утворюють секцію, чи групу сегментів даних програми. Число окремих сегментів коду і даних в секції залежить від вибраної моделі пам’яті при компіляції програми.

Область пам’яті, виділена під стек, яка адресується за допомогою сегментного регістру SS називається сегментом стеку. Навіть, якщо в завантажувальному модулі і відсутній сегмент стеку, при виконанні програми стек однак існує. Зміна значення SS і SP часто називають переключенням стеку.

Завантажувальні модулі (програми, що виконуються) в MS-DOS можуть мати при збереженні на диску два різних формати: .COM та .EXE. При завантаженні в пам’ять програм в .COM- форматі всі значення сегментних регістрів встановлюються рівними. Це означає що програма в .COM- форматі в процесі виконання поділяє один і той же сегмент для коду, даних і стека, розмір завантажувального модуля не перевищує 64 Кб. Звичайно, це не означає, що в пам’яті все змішано ‑ інструкції, дані, збережені в стеці значення. Як правило, в таких програмах код та дані зводяться в дві безперервні області. Під стек використовується область старших адрес сегмента. Програми в .EXE-форматі мають спеціальний попередній заголовок. При завантаженні в пам’ять вони мають секції коду, даних та стек, що адресуються різними значеннями в CS, DS та SS.