@Yonghwa
121

В чем разница между Ассемблером и Компилятором?

Этот вопрос задан в одной из книг по computer science в конце главы о языках программирования.
Как я понял изложенное, так это то, что ассемблер - это по сути сборщик кода языка программирования assembly, транслирующий его в машинный.
Компилятор - это тоже своего рода транслятор кода языков 3го поколения в машинный код.
Разницу я вижу только в том, что инструкции ассембли очень близки к машинному коду, и эти инструкции машино зависимы, а инструкции хай-левел языков по сути находятся на достаточно высоком уровне абстракции, и скомпилированный код типа машино независим.
Вся инфа на английском, и не совсем понятны некоторые моменты.
Я явно что-то упускаю.Помогите.
  • Вопрос задан
  • 5484 просмотра
Пригласить эксперта
Ответы на вопрос 5
Olej
@Olej
инженер, программист, преподаватель
В чем разница между Ассемблером и Компилятором?

По большому счёту - ни в чём!
Это как сравнивать BMW с автомобилем вообще ... что лучше?
Ассемблер (в смысле программы, а не языка) - это комплятор с языка ассемблера в машинный код.
Компилятор - это то же самое, но с любого языка ... не бывает компилятора вообще, есть "компилятор с языка X", "компилятор с языка Y" ... "компилятор с языка ассемблера" ;-)
Ответ написан
Комментировать
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ассемблер - транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке. С языка (вот ведь сюрприз) - ассемблер. Который уже и так почти машинный код - языка низкого уровня.
А вот компилятор - это транслятор (по сути - переводчик) с языка высокого уровня часто в язык низкого уровня (в тот-же Асм, к примеру)
Ответ написан
Комментировать
Mrrl
@Mrrl
Заводчик кардиганов
Всё правильно. Ещё можно добавить, что компилятор может компилировать программу на языке высокого уровня в код на ассемблере - и при этом он останется компилятором. Потом уже программа ассемблера сможет преобразовать этот код в системно зависимый объектный файл. Сейчас так не делают, но когда-то это было вполне допустимым способом оформить компилятор.
Ответ написан
@AlbertUfa
Язык программирования типа - ассемблер (assembly language).

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

Компилятор

(compiler) т. е. программа, преобразующуя операторы(высокоуровнего) языка в машинные коды. Подобно ассемблеру, компилятор символ за символом считывает файл с исходной программой, разделяя его на слова, операторы и числа. Написать компилятор, разумеется, гораздо сложнее, чем ассемблер. Оператор ассемблера переводится в единственный машинный код, тогда как оператор языка высокого уровня, как правило, превращается во множество машинных команд.

"Код. Тайный язык информатики" Чарльз Петцольд.

Раньше было несколько производителей процессоров для компьютеров. В следствие чего у каждого производителя был свой ассемблер. В линейке Intel он свой, у моторолла и др., был свой. Сейчас вроде как все стандартизировано.
Ответ написан
Adamos
@Adamos
Ассемблер - переводчик "один в один": есть команда - есть соответствующий ей машинный код.
Компилятор - сложная мясорубка: он не только приводит все, что было написано на языке высокого уровня, к низкоуровневым инструкциям, но и оптимизирует код - разворачивая короткие функции, например, чтобы избежать затрат на их вызов.
А заодно он проверяет код на соответствие синтаксису и базовую логичность, выдавая соответствующие ошибки и предупреждения...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы