Помогите решить спорный вопрос!
От: Germes Украина  
Дата: 11.01.08 14:58
Оценка: :)))
У меня с коллегой возник спор по этам компиляци.

первая точка зрения :

Компиляторы при сборке сначала генерируют асемблерный код который потом компилируеться в машинный.

вторая точка зрения :

Компиляторы при сборке сразу компилируют в машинный.

для того чтоб сделать предмет спора более предметным пусть вместо абстрактного компилятора будет MSVC.

Прошу помочь ссылками на данную тему.
С уважением Germes!
Re: Помогите решить спорный вопрос!
От: MasterZiv СССР  
Дата: 11.01.08 15:25
Оценка:
Germes пишет:
> Компиляторы при сборке сначала генерируют асемблерный код который потом
> компилируеться в машинный.


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

Вообще-то ассемблер — это язык программирования, в котором программа записыается
в машинных коммандах. Так что спор бессмысленен.

Обычно компиляторы могут по опции выдавать и ассемблерные листинги тоже,
но как правило генерируется сразу объектный код (т.е. машинные комманды).
Просто потому что ассемблерный листинг чаще всего никому не нужен.
Posted via RSDN NNTP Server 2.1 beta
Re: Помогите решить спорный вопрос!
От: vitalyk  
Дата: 11.01.08 15:57
Оценка:
Здравствуйте, Germes, Вы писали:

G>У меня с коллегой возник спор по этам компиляци.


G>первая точка зрения :

G>Компиляторы при сборке сначала генерируют асемблерный код который потом компилируеться в машинный.

G>вторая точка зрения :

G>Компиляторы при сборке сразу компилируют в машинный.

G>для того чтоб сделать предмет спора более предметным пусть вместо абстрактного компилятора будет MSVC.


Это у вас спор о том, генерится ли текстовый файл с ассемблерным листингом или нет, или как?

А вообще, MSVC, как порядочный компилятор, на макро-уровне состоит из фронт-энда, строящего из исходников AST, и бэк-энда, интерпретирующего AST и производящего конкретный результат в виде объектников и/или ассемблерного листинга. Правда, насколько помнится, в MSVC полное AST не строится, а хавается по мере построения (наследие старых времен). Когда-то были обещания со стороны MS VC++ Team'а сделать нормальный AST API с намеками на появление, как результат, всяких вкусностей и удобств, но как счас с этим дело обстоит —
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re: Помогите решить спорный вопрос!
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.01.08 02:37
Оценка:
Здравствуйте, Germes, Вы писали:

G>Компиляторы при сборке сразу компилируют в машинный.


Некоторые компиляторы компилируют в текст на ассемблере, а некоторые прямо в объектный файл.

Под UNIX'ом больше принят первый подход, под MS-DOS'ом и его производными — второй.

gcc, как типичный представитель UNIX'овского компилятора, компилирует через ассемблер. MSVC — прямо в объектный файл.
Re: Помогите решить спорный вопрос!
От: diatlov Молдова  
Дата: 15.01.08 14:19
Оценка:
Здравствуйте, 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 команды
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.