Базовая адресация Впрочем, если уж мы полагаемся на содействие программиста, можно пойти в этом направлении дальше: мы объявляем один или несколько регистров процессора базовыми (несколько регистров могут использоваться для адресации различных сегментов программы, например, один — для кода, другой — для статических данных, третий — для стека) и договариваемся, что значения этих регистров программист принимает как данность и никогда сам не модифицирует, зато все адреса в программе он вычисляет на основе значений этих регистров (рис. 3.6). Рис. З.6. Перемещение кода, использующего базовую адресацию В этом случае для перемещения программы нам нужно только
изменить значения базовых регистров, и программа даже не узнает, что загружена
с Другого адреса. Статически инициализованными указателями в этом случае
пользоваться либо невозможно, либо необходимо всегда прибавлять к ним
значения базовых регистров. |