Я думаю, что перемещаемый код предшествует виртуальной памяти (VM). Альтернативой является абсолютный код, который должен быть загружен в определенном месте в физической памяти (например, потому, что он содержит инструкции "перехода", которые имеют физические адреса в качестве мест назначения)
8086 был обратно совместим со старыми процессорами, которые могли адресовать только 64 Кб памяти, используя 16-битные адресные регистры. Также в 8086 имел 16-разрядные сегментные регистры, которые были учтены (например, при выполнении перейти инструкция) в основном реальный адрес = адрес + сегмент<<4. Это позволило (перемещаемым) программам располагаться где угодно в 1 МБ памяти, выровненной по 16-байтовым границам "абзаца" (4-битный сдвиг в вычислении выше). Такие программы могут адресовать только 64 КБ. Очевидно, что ОС изменяет регистр сегмента соответствующим образом на переключателе контекста.
кажется очевидным, что если бы ваша программа манипулировала регистрами сегментов, возможно, чтобы она могла использовать более 64 Кб памяти, это не могло бы быть переехал таким образом.
программы Intel 8086/8088 иногда могут быть перемещаемыми или, точнее, независимыми от положения, если они не пытаются манипулировать регистрами сегментов. В этом случае ОС может загрузить программу в любом месте доступной памяти на границе 16 байт, соответствующим образом установить регистры сегментов, и программа будет работать корректно. Однако в этом режиме программа имеет доступ только к четырем сегментам памяти размером 64 КБ.
также возможно чтобы быть независимым от положения и иметь доступ к большему объему памяти программы, используется подход смещения всех манипуляций с сегментами до начальных значений, присутствующих при запуске программы.
обратите внимание, что это обсуждение не учитывает возможность того, что формат модуля загрузки сам по себе является перемещаемым, требующим перемещения загрузчиком. Это третья возможность.
от http://wiki.answers.com/Q/Why_are_8086_programs_called_relocatble_programs
и
8086 форматов объектных модулей позволяют
перемещаемые imaqes памяти, которые могут быть связаны друг с другом.
Предусмотрены возможности, позволяющие эффективно использовать память
картографические средства микропроцессора 8086.
8086 ПЕРЕМЕЩАЕМЫЙ ОБЪЕКТНЫЙ МОДУЛЬ Форматы
Техническая Спецификация Intel
и
http://en.wikipedia.org/wiki/Intel_8086#Segmentation