Базова адресація
Втім, якщо вже ми покладаємося на сприяння програміста,
можна піти в цьому напрямі далі: ми оголошуємо один або декілька
регістрів процесора базовими (декілька регістрів можуть використовуватися
для адресації різних сегментів програми, наприклад, один — для коди,
інший — для статичних даних, третій — для стека) і домовляємося,
що значень цих регістрів програміст набуває як даність і ніколи
сам не модифікує, зате всі адреси в програмі він обчислює на основі
значень цих регістрів (мал. 3.6).

Мал. З.6. Переміщення коди, що використовує базову адресацію
В цьому випадку для переміщення програми нам потрібно лише
змінити значення базових регістрів, і програма навіть не взнає, що завантажена
з Іншої адреси. Статично ініциалізованнимі покажчиками в цьому випадку
користуватися або неможливо, або необхідно завжди додавати до них
значення базових регістрів.
Саме так відбувається завантаження corn-файлов в системі MS DOS. Система вьщеляєт
вільну пам'ять, набудовує для програми базові регістри DS і CS,
які чомусь називаються сегментними, і передає управління на стартову
адресу. Нічого більшого робити не треба.
|