2014-12-07 6 views
0

У меня возникли проблемы с определением того, какие инструкции будут изменены компоновщиком, а какие нет. В моем учебнике утверждается, что те, которые будут изменены, - это те, значение которых определяется как начальный адрес программы + - константа. Это дает следующие 2 MIPs примеры:Что действительно делает линкер?

  1. J есть # Существуют некоторые этикетки в исходной программе
  2. SW $ 5, результат #where результата является меткой в ​​программе

Затем говорит, что те которые не требуют модификации являются те, чьи выражения не зависят от начального адреса программы

  1. Li $ l2, buffend-буфер # bufend и буфер ярлыки
  2. BNE $ 2, $ 0, выход

я, запутался особенно, потому что я думал, что BNE был PC относительной адресации, поэтому я подумал, что это потребует линкера. Я думаю, что мое понимание линкеров не хватает, если кто-то может помочь мне получить некоторое понимание, я был бы очень благодарен.

Спасибо,

ред

ответ

0

Компоновщик ... ссылки ... объект блобов вместе в конечный двоичный файл. Объекты, где возможно, независимы от положения. Жестко кодированные адреса прекрасны, но на основе меток либо разрешаются в момент компиляции/сборки, либо независимы от позиции, либо компоновщик решает их во время связи. Существуют другие метки, такие как внешние функции и глобальные переменные, которые также не могут быть разрешены при сборке/компиляции и должны быть решены компоновщиком.

Это не только изменения, которые были изменены. В зависимости от набора команд и инструкций абсолютные адреса могут быть добавлены, а затем разрешены позже как .rodata внутри .text, поэтому могут быть вставлены не только инструкции, но и адреса или другие решения. В зависимости от инструментальной цепочки компоновщик может добавлять инструкции, а также данные.

Ваш текст/инструктор может говорить о таблице векторов прерываний, так как известно, что они используют внешние метки, и в результате эти метки (адреса) должны быть разрешены компоновщиком. Но это всего лишь простой пример большей картины.

 Смежные вопросы

  • Нет связанных вопросов^_^