Вывод языка ассемблера в компиляторе C ++ - PullRequest
3 голосов
/ 21 марта 2011

Генерирует ли компилятор C ++ машинный код через код на ассемблере (т. Е. Компилятор c ++ сначала преобразует код C ++ в код на ассемблере, а затем использует компилятор на ассемблере для преобразования его в машинный код), или генерация вывода на ассемблере - это просто опциядля справочных или отладочных целей?

Ответы [ 2 ]

6 голосов
/ 21 марта 2011

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

Например,

g ++ сначала генерирует код на ассемблере (вы можете увидеть сгенерированный ассемблер, используя переключатель -S).
MSVC делает это тоже (/FAs).

2 голосов
/ 21 марта 2011

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

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

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