Ассемблерный код по сравнению с Машинным кодом по сравнению с Объектным кодом?

Нет прототипа функции, вот и все, поэтому сигнатура функции выведена и выводится неправильно. Добавить "void a ();" в верхней части файла, и вы все настроены.

215
задан mmcdole 21 January 2009 в 20:17
поделиться

8 ответов

Машинный код является двоичным (1's и 0) код, который может быть выполнен непосредственно ЦП. Если бы необходимо было открыть файл машинного кода в текстовом редакторе, то Вы видели бы мусор, включая непечатные символы (не, не те непечатные символы;)).

Объектный код является частью машинного кода, который еще не был связан в полную программу. Это - машинный код для одной конкретной библиотеки или модуля, который составит завершенный продукт. Это может также содержать заполнителей или смещения, не найденные в машинном коде завершенной программы. компоновщик будет использовать этих заполнителей и смещения для соединения всего вместе.

Ассемблерный код является простым текстом и (несколько) человеческим читаемым исходным кодом, который главным образом имеет прямое 1:1 аналог с машинными командами. Это выполняется с помощью мнемоники для фактических инструкций, регистров или других ресурсов. Примеры включают JMP и MULT для инструкций по переходу и умножению ЦП. В отличие от машинного кода, ЦП не понимает ассемблерный код. Вы преобразовываете ассемблерный код в машину с использованием ассемблер или компилятор , хотя мы обычно думаем о компиляторах в сотрудничестве с высокоуровневым языком программирования, которые абстрагированы далее из инструкций по ЦП.

Здание полная программа включает запись исходный код для программы или в блоке или в высокоуровневом языке как C++. Исходный код собран (для ассемблерного кода) или скомпилирован (для высокоуровневых языков) к объектному коду, и отдельные модули соединены для становления машинным кодом для заключительной программы. В случае очень простых программ не может быть необходим связывающийся шаг. В других случаях такой как с IDE (интегрированная среда разработки) компоновщик и компилятор могут быть вызваны вместе. В других случаях сложное делает сценарий или , файл решения может использоваться для сообщения среды, как создать заключительное приложение.

существуют также интерпретируемые языки , которые ведут себя по-другому. Интерпретируемые языки полагаются на машинный код специальной программы интерпретатора. На базовом уровне интерпретатор анализирует исходный код и сразу преобразовывает команды в новый машинный код и выполняет их. Современные интерпретаторы, иногда также названные среда выполнения или виртуальная машина , намного более сложны: оценка целых разделов исходного кода за один раз, кэширования и оптимизации, если это возможно, и справления со сложными задачами управления памятью. Интерпретируемый язык может также быть предварительно скомпилирован в промежуточный язык низшего уровня или байт-код, подобный ассемблерному коду.

273
ответ дан Joel Coehoorn 4 November 2019 в 13:53
поделиться

8B 5D 32 машинный код

mov ebx, [ebp+32h], блок

lmylib.so содержащий 8B 5D 32, объектный код

18
ответ дан Quassnoi 4 November 2019 в 13:53
поделиться

Ассемблерный код является человекочитаемым представлением машинного кода:

mov eax, 77
jmp anywhere

Машинный код является чистым шестнадцатеричным кодом:

5F 3A E3 F1

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

ассемблер используется для преобразования ассемблерного кода в машинный код (объектный код), компоновщик связывает несколько объектов (и библиотека) файлы для генерации исполняемого файла.

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

47
ответ дан endolith 4 November 2019 в 13:53
поделиться

Ассемблерный код обсужден здесь .

"Ассемблер является низкоуровневым языком для программирования компьютеров. Это реализует символьное представление числовых машинных кодов, и другие константы должны были программировать конкретную архитектуру ЦП".

Машинный код обсужден здесь .

"Машинный код или машинный язык являются системой инструкций и данных, выполняемых непосредственно центральным процессором компьютера".

В основном, ассемблерный код является языком, и это переводится в объектный код (собственный код, который ЦП выполняет) ассемблером (аналогичный компилятору).

1
ответ дан nzpcmad 4 November 2019 в 13:53
поделиться

Я думаю, что это основные отличия

  • удобочитаемость кода
  • управление тем, что является Вашим кодом, делающим

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

IMO сегодня компьютеры достаточно быстры, чтобы позволить программисту получить быстрое выполнение с ООП.

1
ответ дан Alberto Zaccagni 4 November 2019 в 13:53
поделиться

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

, В то время как несколько понятный людьми, Ассемблер является все еще низким уровнем. Требуется много кода, чтобы сделать что-либо полезное.

Так вместо этого мы используем высокоуровневые языки, такие как C, ОСНОВНОЙ, FORTAN (хорошо, я знаю, что встречался со мной). Когда скомпилировано они производят объектный код. Ранние языки имели машинный язык как свой объектный код.

Много языков сегодня такой JAVA и C# обычно компилируют в байт-код, который не является машинным кодом, но тем, который легко можно интерпретироваться во время выполнения для создания машинного кода.

1
ответ дан Jim C 4 November 2019 в 13:53
поделиться

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

И объектный файл и исполняемый файл включают машинный код архитектуры в форме печатаемых и непечатаемых символов, когда он открыт текстовым редактором.

, Тем не менее, дихотомия между файлами - то, что объектный файл (файлы) может содержать неразрешенные внешние ссылки (такой как printf, например). Так, это, возможно, должно быть связано против других объектных файлов.. То есть неразрешенные внешние ссылки необходимы, чтобы быть разрешенными для получения достойного выполнимого исполняемого файла путем соединения с другими объектными файлами, такими как библиотека времени выполнения C/C++.

0
ответ дан 23 November 2019 в 04:21
поделиться

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

121
ответ дан 23 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: