4

Я использую некоторое программное обеспечение Fortran (LBLRTM) и shell-скрипт, который готовит ввод, генерирует ряд файлов с именами TAPE3 , TAPE4 и т.д. В целях отладки я использовал file для определения типа файла. file говорит мне:

TAPE3:  8086 relocatable (Microsoft)

Я предполагаю, что этот file здесь неправильный, и что это просто двоичный файл, который выглядит как 8086 relocatable . Но что такое 8086 relocatable?

1 ответ1

4

Я думаю, что перемещаемый код предшествует виртуальной памяти (ВМ). Альтернативой является абсолютный код, который должен быть загружен в определенном месте в физической памяти (например, потому что он содержит инструкции "Перейти", которые имеют физические адреса в качестве адресатов)

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 позволяют задавать образы перемещаемой памяти, которые могут быть связаны друг с другом. Предоставляются возможности, позволяющие эффективно использовать средства отображения памяти микропроцессора 8086.

8086 ФОРМАТЫ СМЕННЫХ МОДУЛЕЙ ОБЪЕКТА
Техническая спецификация Intel

А также

http://en.wikipedia.org/wiki/Intel_8086#Segmentation

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .