Ассемблер против компилятора
В общем, компилятор - это компьютерная программа, которая читает программу, написанную на одном языке, который называется исходным языком, и переводит ее на другой язык, который называется целевым языком. Традиционно исходным языком был язык высокого уровня, такой как C++, а целевым языком был язык низкого уровня, такой как язык ассемблера. Однако существуют компиляторы, которые могут преобразовывать исходную программу, написанную на языке ассемблера, в машинный или объектный код. Ассемблеры являются такими инструментами. Таким образом, и ассемблеры, и компиляторы в конечном итоге создают код, который может быть непосредственно выполнен на машине.
Что такое компилятор?
Компилятор - это компьютерная программа, которая читает программу, написанную на одном языке, который называется исходным языком, и переводит ее на другой язык, который называется целевым языком. Чаще всего исходный язык является языком высокого уровня, а целевой язык - языком низкого уровня. Таким образом, в целом компиляторы можно рассматривать как переводчики, которые переводят с одного языка на другой. Кроме того, компиляторы выполняют некоторые оптимизации кода. Типичный компилятор состоит из нескольких основных компонентов. Первым компонентом является сканер (также известный как лексический анализатор). Сканер читает программу и преобразует ее в строку токенов. Второй компонент - парсер. Он преобразует строку токенов в дерево синтаксического анализа (или абстрактное синтаксическое дерево), которое фиксирует синтаксическую структуру программы. Следующим компонентом являются семантические процедуры, интерпретирующие семантику синтаксической структуры. Далее следует оптимизация кода и генерация окончательного кода.
Что такое ассемблер?
Assembler - это программа или инструмент, который переводит язык ассемблера в машинный код. Итак, ассемблер - это тип компилятора, а исходный код написан на языке ассемблера. Ассемблер - это человекочитаемый язык, но обычно он имеет отношение «один к одному» с соответствующим машинным кодом. Поэтому говорят, что ассемблер выполняет изоморфную (однозначное отображение) трансляцию. Расширенные ассемблеры предоставляют дополнительные функции, поддерживающие процессы разработки и отладки программ. Например, тип ассемблеров, называемый макроассемблером, предоставляет средства макросов.
В чем разница между ассемблером и компилятором?
Компилятор - это компьютерная программа, которая читает программу, написанную на одном языке, и переводит ее на другой язык, а ассемблером можно считать особый тип компилятора, который переводит только язык ассемблера в машинный код. Компиляторы обычно создают машинный исполняемый код непосредственно из языка высокого уровня, но ассемблеры создают объектный код, который, возможно, придется скомпоновать с помощью программ-компоновщиков для запуска на машине. Поскольку язык ассемблера имеет взаимно однозначное сопоставление с машинным кодом, ассемблер может использоваться для создания кода, который работает очень эффективно в случаях, когда производительность очень важна (например, для графических движков, встроенных систем с ограниченными аппаратными ресурсами по сравнению с персональным компьютером). например, микроволновые печи, стиральные машины и т. д.).