Germes пишет: > Компиляторы при сборке сначала генерируют асемблерный код который потом > компилируеться в машинный.
А чем отличается ассеблерный код от машинного ?
Вообще-то ассемблер — это язык программирования, в котором программа записыается
в машинных коммандах. Так что спор бессмысленен.
Обычно компиляторы могут по опции выдавать и ассемблерные листинги тоже,
но как правило генерируется сразу объектный код (т.е. машинные комманды).
Просто потому что ассемблерный листинг чаще всего никому не нужен.
Здравствуйте, Germes, Вы писали:
G>У меня с коллегой возник спор по этам компиляци.
G>первая точка зрения : G>Компиляторы при сборке сначала генерируют асемблерный код который потом компилируеться в машинный.
G>вторая точка зрения : G>Компиляторы при сборке сразу компилируют в машинный.
G>для того чтоб сделать предмет спора более предметным пусть вместо абстрактного компилятора будет MSVC.
Это у вас спор о том, генерится ли текстовый файл с ассемблерным листингом или нет, или как?
А вообще, MSVC, как порядочный компилятор, на макро-уровне состоит из фронт-энда, строящего из исходников AST, и бэк-энда, интерпретирующего AST и производящего конкретный результат в виде объектников и/или ассемблерного листинга. Правда, насколько помнится, в MSVC полное AST не строится, а хавается по мере построения (наследие старых времен). Когда-то были обещания со стороны MS VC++ Team'а сделать нормальный AST API с намеками на появление, как результат, всяких вкусностей и удобств, но как счас с этим дело обстоит —
Здравствуйте, Germes, Вы писали:
G>У меня с коллегой возник спор по этам компиляци.
G>первая точка зрения :
G>Компиляторы при сборке сначала генерируют асемблерный код который потом компилируеться в машинный.
G>вторая точка зрения :
G>Компиляторы при сборке сразу компилируют в машинный.
G>для того чтоб сделать предмет спора более предметным пусть вместо абстрактного компилятора будет MSVC.
G>Прошу помочь ссылками на данную тему.
По моему любой современный компилятор может работать в двух режимах — генерировать ассемблерный код, или генерировать сразу машинный код. Но даже при том что генерируется машинный код, не все компиляторы с ним работают (например gcc переводит в ассемблер, потом работает уже gas). Многие компиляторы генерирют ассемблерный листинг как нечто побочное.. Т.е. реально с ним они не работают. Часто компиляторы переводят программу в свой внутренний код, на который накладываются шаблоны зашитого в них кода, затем в соответствии с этими шаблонами происходит оптимизация и перенос кода в выходной exe файл.
Вот так.
Re: Помогите решить спорный вопрос!
От:
Аноним
Дата:
18.01.08 09:00
Оценка:
Здравствуйте, Germes, Вы писали:
немного в теме, поэтому отвечу: в back-end по AST после очередной стадии оптимизации (на уровне дерева) генерируется промежуточный код _абстрактной_ машины в таком виде, чтоб его можно было удобно оптимизировать по выравниванию, скорости и тп. По виду целевой instruction set похож машинные языки типа IL.NET, asm, трехадресная машина дает представление, драгон бук гляньте или микс кнутовский. После этого из него можно уже генерировать arch specific команды