В чем разница между кодом сборки и байт-кодом?

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

В частности, введение этой статьи статьи в википедии, чтобы описать CIL, смутило меня, поскольку, похоже, он использует оба термина (код сборки и байт-код), что заставляет меня думать они могут означать то же самое.

Ответы

Ответ 1

Код сборки обычно означает читаемую человеком форму родного языка машины (так называемый машинный язык). Байт-код, с другой стороны, является нормальным языком, который может интерпретироваться интерпретатором байтового кода, поэтому он не является родным языком процессоров.

Почему путаница тогда? Таким образом, вы не можете сравнивать язык ассемблера с байт-кодом. Конечно, байт-код может также иметь код сборки - это означает его читаемую человеком форму, потому что "язык ассемблера" не обязательно означает, что он предназначен для реальной машины, - но это читаемая человеком форма какого-либо родного языка - для процессоров этот родной язык - это машинный код, но вы также можете иметь ассемблерный код псевдо-(интерпретируемой) машины, такой как Bytecode.

См. также: Язык ассемблера

Дальнейшее бедствие приходит, конечно, как вы можете видеть во всем обсуждении здесь - потому что люди IT (также я), как правило, слабы в формулировках. "Язык ассемблера" часто используется при описании машинного кода. Это, конечно, не совсем правильно, потому что язык ассемблера - это только читаемая человеком форма кода некоторых машин.

Ответ 2

Assembly code обычно используется для обозначения кода, который после компиляции в Machine Code может выполняться процессором, пока bytecode на виртуальной машине.

Источником путаницы над CIL может быть связано с тем, что Machine Code для ЦП X может быть интерпретировано виртуальной машиной, работающей на CPU Y (например).

Примечание, что реализация виртуальной машины может быть создана для интерпретации машинного кода любого и/или байт-кода: он остается для разработчиков и их стремления (и времени на их руки); -)

Ответ 3

Я помню, что с момента появления микроконтроллеров и микропроцессоров слово Assembly использовалось для обозначения машинного кода в удобном для человека виде. Мне кажется, что Microsoft вызвала путаницу, используя одно и то же слово "Assembly", чтобы назвать, какой будет ByteCode, созданный их компиляторами dotNET Framework. Поэтому в этом случае я бы сказал, что то, что "Bytecode" означает для среды выполнения Java, похоже на то, что это новое использование слова "Assembly" означает среду Microsoft dotNET runTime. Я ошибаюсь, чтобы предположить, что?

Ответ 4

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

Байт-код - это инструкции для интерпретации виртуальной машины и все еще необходимо перевести ее в машинный код перед выполнением.

Ответ 5

Скомпилированный код запускается на процессоре с определенным набором команд, тогда как байт-код может быть выполнен на виртуальной машине (например, время выполнения Java) на любом процессоре, который может запускать виртуальную машину.

Ответ 6

Код сборки (представляет собой) собственный код для процессора, который вы программируете.

Bytecode - это термин для двоичной версии "команд", которые скомпилированы для выполнения интерпретатором или виртуальной машиной.

В сущности, байт-коды определяют коды операций для виртуального процессора, а сборка состоит из кодов операций физического процессора. (мы будем игнорировать микрокод внутри CPU на данный момент:-))