Різниця між компілятором і Асемблером

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 10 Травень 2024
Anonim
Основы программирования #2 Компилятор и интерпретатор
Відеоролик: Основы программирования #2 Компилятор и интерпретатор

Зміст


Компілятор і Асемблер відіграють важливу роль у виконанні програми. Деякі компілятори безпосередньо генерують виконуваний код замість асемблерного коду. Компілятор бере попередньо оброблений вихідний код і переводить його в код складання. Асемблер бере код збірки у компілятора і переводить його в код машин, що переміщається. У цій статті я обговорював відмінності між компілятором і асемблером за допомогою таблиці порівняння, показаної нижче, просто подивіться.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняУкладач Асемблер
ОсновніСтворює код мови збірки або безпосередньо виконуваний код.Створює код переміщення машини.
Вхідні даніПопередньо оброблений вихідний код.Код мови складання.
Фази / проходиФази компіляції - це лексичний аналізатор, синтаксичний аналізатор, семантичний аналізатор, проміжне генерування коду, оптимізація коду, генерація коду.Асемблер робить два проходи над заданим входом.
ВихідКод складання, сформований компілятором, є мнемонічною версією машинного коду.Пересувний машинний код, сформований асемблером, представлений двійковим кодом.


Визначення компілятора

The компілятор це комп’ютерна програма, яка читає програму, написану мовою джерела, переводить її в еквівалент мова складання і пересилає код мови збірки на Асемблер. У той час як переклад вихідного коду на код складання, компілятор також звітує про помилка у вихідному коді для свого користувача.

Компілятори також класифікуються як однопрохідний, багатопрохідний, навантажувальний, налагодження та оптимізація. Класифікація проводиться на основі того, яку функцію виконує компілятор і як вона була побудована. Незважаючи на ці складності, основне завдання компілятора залишається незмінним.

Компіляція виконується у двох частинах, частина аналізу і частина синтезу. The частина аналізу розбиває вихідний код на складові частини та утворює проміжне подання вихідного коду. The частина синтезу формує цільовий код з проміжного подання.


Компіляція виконується на наступних етапах:

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

  • The лексичний аналізатор читає символи вихідного коду та групує їх у потоки жетонів. Кожен маркер представляє логічну послідовність на зразок символів ключове слово, ідентифікатори, оператори. Послідовність символів, що утворює маркер, називається лексема.
  • The синтаксичний аналізатор розбирає маркер, отриманий з лексичного аналізатора, і групує лексеми в а ієрархічна структура.
  • The семантичний аналізатор перевіряє вихідний код на наявність смислова помилка.
  • Генератор проміжного коду породжує проміжне представництво вихідного коду
  • The Оптимізатор коду оптимізує проміжний код у більш швидкий машинний код.
  • The генератор коду нарешті генерує цільовий код, який є код переміщення машин або код складання.
  • The таблиця символів це структура даних, яка містить запис для кожного ідентифікатора у вихідному коді.
  • Обробник помилок виявляє помилку в кожній фазі та обробляє ці помилки.

Визначення Асемблер

Деякі компілятори виконують завдання асемблера та безпосередньо генерують машинний код, що переміщується, замість коду складання, який надалі безпосередньо передається в Linker / loader. The асемблер приймає за вхід код складання, згенерований компілятором, і переводить його в код переміщення машини.

Подивимося, чим машинний код відрізняється від асемблерного коду. Код складання є мнемонічний версія машинного коду. Це означає, що код складання використовує імена для представлення операцій, і він навіть дає імена адресам пам'яті. З іншого боку, машинний код використовує двійкові коди для представлення операцій та адрес пам'яті.

Навіть найпростіша форма асемблера виконує два проходи над входом. The Перший прохід виявляє всі ідентифікатори у коді складання, який позначає місце зберігання та зберігає їх у таблиця символів (крім таблиці символів компіляторів). The місце зберігання призначено до ідентифікатора, який зустрічається при першому проході.

В другий прохід, вхід знову сканується, і на цей раз код операції є переклали в а послідовність бітів що представляє цю операцію в машинному коді. Другий пропуск також перекладається ідентифікатори в адреси визначені в таблиці символів. Таким чином, другий прохід породжує код переміщення машини.

  1. Ключова відмінність компілятора від асемблера полягає в тому, що компілятор генерує код складання, а деякі компілятори також можуть безпосередньо генерувати виконуваний код, тоді як асемблер генерує код переміщення машини.
  2. Компілятор приймає за вхід попередньо оброблений код генерований препроцесором. З іншого боку, асемблер бере код складання як вхід.
  3. Складання відбувається в дві фази, які є етап аналізу і фаза синтезу. На етапі аналізу вхід проходить лексичний аналізатор, синтаксичний аналізатор, семантичний аналізатор тоді як аналіз синтезу відбувається за допомогою генератор проміжного коду, оптимізатор коду, генератор коду. З іншого боку, асемблер передає вхід наскрізь дві фази. Перша фаза виявляє ідентифікатори та розподіляє адреси до них, на другій фазі код складання переводиться у двійковий код.
  4. Код складання, створений компілятором, є мнемічна версія машинного коду. Однак машинний код, що переміщується, генерується асемблером двійковий код переміщення.

Висновок:

Асемблер може не знадобитися, оскільки деякі компілятори безпосередньо генерують виконуваний код. Якщо використовується асемблер, йому потрібен лінкер для прив'язки всіх вбудованих бібліотек до функцій бібліотеки, що використовуються у вихідному коді.