Сборка и связывание шагов для языка ассемблера - PullRequest
3 голосов
/ 09 июня 2011
  1. Мне было интересно, какова цель связывания шага после шага сборки?Почему бы не запустить вывод ассемблера без шага связывания?

    Для C связывание - это объединение нескольких объектных файлов, сгенерированных компиляцией, в один объектный файл.Но для языка ассемблера существует только один объектный файл для «ссылки», так зачем пытаться связать один объектный файл?Например, http://zahidirfan.blogspot.com/2010/01/two-steps-to-using-assembly-in-linux.html

    Если существует только один объектный файл и библиотека не требуется, будет ли необходимость в связывании?Как в приведенном выше примере?

  2. Выходные данные ассемблера и выходные данные компоновщика имеют одинаковый формат?Они оба двоичные файлы?

Спасибо и всего наилучшего!

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

Ассемблер создает объектные файлы в качестве вывода, как это делает компилятор.

Вы связываете их по той же самой причине - чтобы иметь возможность использовать библиотеки. Компоновщик также (как правило) знает о целевых форматах исполняемых файлов.

Тем не менее, существуют ассемблеры, которые производят исполняемые файлы напрямую, без участия компоновщика. Если память служит, NASM может создавать несколько исполняемых форматов напрямую, и некоторые старые ассемблеры для MS-DOS (например, A86) могут / работают так же.

Более простая установка и более быстрый цикл сборки делают их действительно удобными для начинающих, но требование поместить весь код в один модуль делает гораздо менее подходящим для больших проектов.

1 голос
/ 09 июня 2011

Ваше описание вопроса "1) неверно. Программы на языке ассемблера (кроме самых простых примеров приложений) обычно имеют несколько файлов obj, которые необходимо связать вместе.

В очень простом случае, когда весь код находится в одном файле, как уже упоминали другие, многие ассемблеры разрешают сборку прямо в двоичный файл. Тем не менее, это особое поведение, чтобы удовлетворить исключение из правила ...

0 голосов
/ 09 июня 2011

1 - Связывание необходимо, потому что двоичному файлу, по крайней мере, потребуется код для конкретной платформы, который будет помещен в него. 2- Исходя из (1), перед связыванием двоичный файл является неполным для запуска. Это двоичный файл, хотя он не готов к автономному выполнению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...