Різниця між компілятором і Асемблером
Зміст
Компілятор і Асемблер відіграють важливу роль у виконанні програми. Деякі компілятори безпосередньо генерують виконуваний код замість асемблерного коду. Компілятор бере попередньо оброблений вихідний код і переводить його в код складання. Асемблер бере код збірки у компілятора і переводить його в код машин, що переміщається. У цій статті я обговорював відмінності між компілятором і асемблером за допомогою таблиці порівняння, показаної нижче, просто подивіться.
- Порівняльна діаграма
- Визначення
- Ключові відмінності
- Висновок
Порівняльна діаграма
Основа для порівняння | Укладач | Асемблер |
---|---|---|
Основні | Створює код мови збірки або безпосередньо виконуваний код. | Створює код переміщення машини. |
Вхідні дані | Попередньо оброблений вихідний код. | Код мови складання. |
Фази / проходи | Фази компіляції - це лексичний аналізатор, синтаксичний аналізатор, семантичний аналізатор, проміжне генерування коду, оптимізація коду, генерація коду. | Асемблер робить два проходи над заданим входом. |
Вихід | Код складання, сформований компілятором, є мнемонічною версією машинного коду. | Пересувний машинний код, сформований асемблером, представлений двійковим кодом. |
Визначення компілятора
The компілятор це комп’ютерна програма, яка читає програму, написану мовою джерела, переводить її в еквівалент мова складання і пересилає код мови збірки на Асемблер. У той час як переклад вихідного коду на код складання, компілятор також звітує про помилка у вихідному коді для свого користувача.
Компілятори також класифікуються як однопрохідний, багатопрохідний, навантажувальний, налагодження та оптимізація. Класифікація проводиться на основі того, яку функцію виконує компілятор і як вона була побудована. Незважаючи на ці складності, основне завдання компілятора залишається незмінним.
Компіляція виконується у двох частинах, частина аналізу і частина синтезу. The частина аналізу розбиває вихідний код на складові частини та утворює проміжне подання вихідного коду. The частина синтезу формує цільовий код з проміжного подання.
Компіляція виконується на наступних етапах:
Лексичний аналізатор, синтаксичний аналізатор, семантичний аналізатор, генератор проміжних кодів, оптимізатор коду, генератор коду, таблиця символів та обробник помилок.
- The лексичний аналізатор читає символи вихідного коду та групує їх у потоки жетонів. Кожен маркер представляє логічну послідовність на зразок символів ключове слово, ідентифікатори, оператори. Послідовність символів, що утворює маркер, називається лексема.
- The синтаксичний аналізатор розбирає маркер, отриманий з лексичного аналізатора, і групує лексеми в а ієрархічна структура.
- The семантичний аналізатор перевіряє вихідний код на наявність смислова помилка.
- Генератор проміжного коду породжує проміжне представництво вихідного коду
- The Оптимізатор коду оптимізує проміжний код у більш швидкий машинний код.
- The генератор коду нарешті генерує цільовий код, який є код переміщення машин або код складання.
- The таблиця символів це структура даних, яка містить запис для кожного ідентифікатора у вихідному коді.
- Обробник помилок виявляє помилку в кожній фазі та обробляє ці помилки.
Визначення Асемблер
Деякі компілятори виконують завдання асемблера та безпосередньо генерують машинний код, що переміщується, замість коду складання, який надалі безпосередньо передається в Linker / loader. The асемблер приймає за вхід код складання, згенерований компілятором, і переводить його в код переміщення машини.
Подивимося, чим машинний код відрізняється від асемблерного коду. Код складання є мнемонічний версія машинного коду. Це означає, що код складання використовує імена для представлення операцій, і він навіть дає імена адресам пам'яті. З іншого боку, машинний код використовує двійкові коди для представлення операцій та адрес пам'яті.Навіть найпростіша форма асемблера виконує два проходи над входом. The Перший прохід виявляє всі ідентифікатори у коді складання, який позначає місце зберігання та зберігає їх у таблиця символів (крім таблиці символів компіляторів). The місце зберігання призначено до ідентифікатора, який зустрічається при першому проході.
В другий прохід, вхід знову сканується, і на цей раз код операції є переклали в а послідовність бітів що представляє цю операцію в машинному коді. Другий пропуск також перекладається ідентифікатори в адреси визначені в таблиці символів. Таким чином, другий прохід породжує код переміщення машини.
- Ключова відмінність компілятора від асемблера полягає в тому, що компілятор генерує код складання, а деякі компілятори також можуть безпосередньо генерувати виконуваний код, тоді як асемблер генерує код переміщення машини.
- Компілятор приймає за вхід попередньо оброблений код генерований препроцесором. З іншого боку, асемблер бере код складання як вхід.
- Складання відбувається в дві фази, які є етап аналізу і фаза синтезу. На етапі аналізу вхід проходить лексичний аналізатор, синтаксичний аналізатор, семантичний аналізатор тоді як аналіз синтезу відбувається за допомогою генератор проміжного коду, оптимізатор коду, генератор коду. З іншого боку, асемблер передає вхід наскрізь дві фази. Перша фаза виявляє ідентифікатори та розподіляє адреси до них, на другій фазі код складання переводиться у двійковий код.
- Код складання, створений компілятором, є мнемічна версія машинного коду. Однак машинний код, що переміщується, генерується асемблером двійковий код переміщення.
Висновок:
Асемблер може не знадобитися, оскільки деякі компілятори безпосередньо генерують виконуваний код. Якщо використовується асемблер, йому потрібен лінкер для прив'язки всіх вбудованих бібліотек до функцій бібліотеки, що використовуються у вихідному коді.