Компилируется ли код C ++ в ассемблерные коды? - PullRequest
13 голосов
/ 24 января 2011

Код C ++ компилируется в код ассемблера? Если у нас есть код C ++, сможем ли мы получить ассемблерный код?

Ответы [ 3 ]

18 голосов
/ 24 января 2011

Подавляющее большинство компиляторов C ++ преобразует исходный код C ++ в объектные файлы (машинный код с достаточным количеством управляющей информации для связывания в исполняемый файл).Они могут фактически генерировать язык ассемблера как промежуточный шаг и даже использовать отдельный ассемблер для обработки исходного кода ассемблера, но вы, как правило, никогда этого не увидите.Например, вы действительно должны приложить все усилия, чтобы получить gcc для генерации кода сборки (файл .s), используя флаг -S.Обычно вы никогда не увидите сборку.

Но стандарт C ++ не предписывает окончательную форму, выводимую из компилятора, просто код должен вести себя определенным образом при запуске.

Фактически, самые ранние "компиляторы" C ++ фактически генерировали исходный код C и затем компилировали его.

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

17 голосов
/ 24 января 2011

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

g++ -S -o file.s file.cpp

должно помочь.

4 голосов
/ 24 января 2011

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

С помощью gcc вы можете добавить -S для компиляции в файл .asm.

Для визуальной студии см. http://codegem.org/2008/10/generate-assembly-from-c-code-in-visual-studio

...