Разлика между компилатор и ассемблер

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 11 Може 2024
Anonim
ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО
Видео: ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО

Съдържание


Компилаторът и Асемблерът играят важна роля при изпълнението на програма. Някои компилатори директно генерират изпълним код вместо код за сглобяване. Компилаторът взема предварително обработения изходен код и го превежда в сборния код. Асемблерът взема кода за сглобяване от компилатора и го превежда в преместващия се машинен код. В тази статия съм обсъдил разликите между компилатор и асемблер с помощта на сравнителната диаграма, показана по-долу, просто погледнете.

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениесъставител Assembler
ОсновенГенерира код на езика за сглобяване или директно изпълним код.Генерира машинен код за преместване.
ВходПредварително обработен изходен код.Код на езика за сглобяване
Фази / проходиФазите на компилиране са лексикален анализатор, синтаксичен анализатор, семантичен анализатор, междинно генериране на код, оптимизация на код, генериране на код.Assembler прави два прохода над дадения вход.
продукцияКодът за сглобяване, генериран от компилатора, е мнемонична версия на машинен код.Преместваемият машинен код, генериран от асемблер, е представен от двоичен код.


Определение за компилатор

Най- съставител е компютърна програма, която чете програмата, написана на изходен език, превежда я в еквивалент език за монтаж и препраща кода на езика за сглобяване на Assembler, Докато преводът на изходния код в асемблерния код, компилаторът също отчита грешка в изходния код на своя потребител.

Съставителите също са класифицирани като еднопроходни, мулти-проходни, натоварващи и работещи, отстраняване на грешки и оптимизация. Класификацията се извършва въз основа на това, каква функция изпълнява компилаторът и как е построена. Въпреки тези сложности основната задача на компилатора остава същата.

Компилацията се извършва в две части, част за анализ и синтез част, Най- част за анализ разбива изходния код на съставните части и образува междинното представяне на изходния код. Най- синтез част образува целевия код от междинното представяне.


Компилацията се извършва на следните фази:

Лексикален анализатор, синтаксичен анализатор, семантичен анализатор, генератор на междинен код, оптимизатор на код, генератор на кодове, таблица на символите и манипулатор на грешки.

  • Най- лексикален анализатор чете символите на изходния код и ги групира в потоци от жетони, Всеки маркер представлява логическата последователност от символи като ключова дума, идентификатори, оператори, Извиква се последователността на символа, която образува знак лексема.
  • Най- синтаксичен анализатор анализира маркера, получен от лексикален анализатор, и групира маркери в a йерархична структура.
  • Най- семантичен анализатор проверява изходния код за някакъв семантична грешка.
  • Генератор на междинен код генерира междинно представителство на изходния код
  • Най- оптимизатор на код оптимизира междинния код в по-бързо работещ машинен код.
  • Най- генератор на код накрая генерира целевия код, който е a преместващ се машинен код или монтажен код.
  • Най- таблица с символи е структура на данните, която съдържа записа за всеки идентификатор в изходния код.
  • Обработващ грешки открива грешката във всяка фаза и обработва тези грешки.

Определение на Assembler

Някои компилатори изпълняват задачата за сглобяване и директно генерират преместващ се машинен код вместо код за сглобяване, който допълнително се предава директно на линкер / товарач. Най- асемблер приема като вход кода за сглобяване, генериран от компилатора и го превежда в преместващ се машинен код.

Нека да видим как машинният код се различава от кода за сглобяване. Код за сглобяване е мнемоничен версия на машинен код. Това означава, че кодът за сглобяване използва имена за представяне на операции и дори дава имена на адресите на паметта. От друга страна, машинен код употреби двоични кодове за представяне на операции и адреси на паметта.

Дори и най-простата форма на асемблер изпълнява два прохода над входа. Най- първи пропуск открива всички идентификатори в асемблерния код, който обозначава мястото за съхранение и ги съхранява в таблица с символи (различна от таблицата на символите на компилаторите). Най- място за съхранение е зададено към идентификатора, който се среща при първото преминаване.

В втори пропуск, входът се сканира отново, и този път операционен код сте преведена в a последователност от битове представяща тази операция в машинния код. Вторият пропуск също се превежда идентификатори в адреси определено в таблицата със символи. По този начин вторият пропуск генерира преместващ се машинен код.

  1. Ключовата разлика между компилатор и асемблер е, че съставител генерира код за сглобяване и някои компилатори могат също така директно да генерират изпълним код, докато, асемблер генерира машинен код за преместване.
  2. Компилаторът приема като вход предварително обработен код генериран от препроцесора. От друга страна, асемблерът взема код за сглобяване като вход.
  3. Компилацията се извършва на две фази, които са фаза на анализ и фаза на синтез, Във фазата на анализ входът преминава лексикален анализатор, синтаксичен анализатор, семантичен анализатор като има предвид, че синтезният анализ се осъществява чрез генератор на междинен код, оптимизатор на код, генератор на код, От друга страна, асемблерът предава входа през две фази, Първата фаза открива идентификаторите и им разпределя адреси, във втората фаза кодът за сглобяване се превежда в двоичен код.
  4. Кодът за сглобяване, генериран от компилатора, е a мнемонична версия на машинен код. Обаче преместващият се машинен код, генериран от асемблера, е a двоичен код за преместване.

Заключение:

Асемблерът може да не се изисква, тъй като някои компилатори директно генерират изпълним код. Ако се използва асемблер, той изисква линкер за свързване на всички вградени библиотеки към библиотечните функции, използвани в изходния код.