Асе́мблер (англ. assembler) — комп'ютерна програма-транслятор, що призначена для генерації машинного (двійкового) коду з символьного представлення цього коду (мови асемблера). Наприклад, текстовий рядок CLI
для архітектури x86 перетворюється асемблером у двійковий код 11111010
. Крім власне трансляції, багато програм-асемблерів підтримують і іншу функціональність, корисну при розробці системного і прикладного програмного забезпечення, таку як вибір формату об'єктного модуля, генерація символьної інформації (наприклад, відлагоджувальної), різноманітні директиви на зразок EXTERN
чи GLOBAL
, макрокоманди тощо.
При трансляції з мов високого рівня асемблер нерідко використовується для виконання завершальної фази трансляції.
Історія
Один з перших асемблерів було створено для машини IBM 701. Асемблер одразу полегшив працю першим програмістам: замість кодів машинних команд стало можливим писати програму у символьній (алфавітно-цифровій) формі, і найголовніше, відпала необхідність ручного перерахунку всіх адрес переходів при зміні програми. Асемблери 1950-х років, що мали назву , були одними з перших, що надавали можливість означення і використання макрокоманд. Починаючи з 1960-1970-х років зростає важливість взаємодії і інтеграції програм і фрагментів мовою асемблера з модулями, написаними на мовах програмування високого рівня. До сьогодні такі програми, як асемблер і компонувальник є абсолютно необхідними інструментами при представленні нової архітектури комп'ютера чи процесора.
Базова трансляція
Найпростішим способом перетворення символьних рядків на машинні команди може бути пряма трансляція. Наприклад, з кожного наступного рядка тексту
mov eax, 0F00BADh jmp eax
асемблером для 32-розрядної архітектури x86 одразу може бути згенерований машинний код відповідної команди процесора і її аргументів (B8 AD 0B F0 00 FF E0
). Якщо ж у програмі присутні команди безпосередньо переходу за мітками, алгоритм роботи асемблера ускладнюється: потрібні як мінімум два перегляди (або проходи) тексту програми. При першому перегляді здійснюється (розподіл пам'яті) і надання значень символічним іменам; при другому — формується об'єктний модуль. В процесі трансляції асемблер проводить повний синтаксичний аналіз початкової програми, забезпечуючи при цьому достатньо точну діагностику помилок за місцем і характером.
Розширені можливості
На додачу до базової трансляції, одним з найбільш вживаних механізмів програм-асемблерів є макроінструкції, починаючи з найпростішої заміни тексту, і до сучасних вбудованих макропроцесорів, з доволі складними можливостями підстановки і розкриття параметрів. Наприклад, асемблери (NASM) і реалізують власний стек макропроцесора (директиви %push
і %pop
), можуть здійснювати зсув переданих макрокоманді параметрів на задану кількість (%rotate
), повторювати емітування послідовності команд (%rep
/ %endrep
), здійснювати умовну трансляцію (директиви %ifdef
і подібні). Пакети макрокоманд для багатих на можливості асемблерів надають програмістам навіть механізм, наближені до структурного програмування, коли програма на мові асемблера виглядає так, немов би вона містить такі сутності, як процедури і функції, локальні змінні, структури даних з можливістю символічної адресації полів, інструкції-перемикачі і тому подібне.
Асемблер (NASM) (а також майже повністю сумісний ) реалізує підтримку одразу кількох форматів об'єктних файлів. Така можливість надзвичайно корисна при крос-компіляції, коли, наприклад, на комп'ютері з операційною системою потрібно отримати об'єктний файл у форматі для систем типу Microsoft Windows. Можливо також задати трансляцію безпосередньо у формат двійкового коду (bin
), коли потрібна відповідність «один в один» між текстом програми і згенерованим кодом.
Надзвичайно корисною є підтримка локальних міток у процедурах. У великих програмах це дозволяє мати у кожній процедурі чи функції мітки на кшталт exit
чи error
, і асемблер коректно визначить адреси переходу на них в межах даної процедури.
Асемблери для архітектури x86
Цей розділ потребує доповнення. (січень 2018) |
- Середовища для розробки:
- (WinAsm)
- Транслятори:
- (MASM) - Microsoft Macro Assembler, ліцензія Microsoft EULA
- - GNU Assembler, ліцензія GNU GPL
- FASM - flat assembler, ліцензія BSD
- (NASM) - Netwide Assembler, ліцензія BSD
- (TASM) - Turbo Assembler від Borland, пропрієтарний, підтримку припинено
- - вільний асемблер на основі NASM, ліцензія BSD
- - Open Watcom Assembler, ліцензія Sybase Open Watcom Public License
- - вільний асемблер від Джеремі Гордона
Асемблери для інших архітектур
Цей розділ потребує доповнення. (січень 2018) |
- - High Level Assembler від IBM
Література
- Енциклопедія кібернетики : у 2 т. / за ред. В. М. Глушкова. — Київ : Гол. ред. Української радянської енциклопедії, 1973.
- Галисеев Геннадий Владимирович. Асемблер для Win 32. Самоучитель = Ассемблер для Win 32. Самоучитель. — М. : , 2007. — С. 368. — .
- Кіп Ірвін. Мова асемблера для процесорів Intel = Мова асемблера для процесорів Intel. — М. : «Вільямс», 2005. — С. 912. — .
Посилання
- . Архів оригіналу за 21 січня 2018. Процитовано 20 січня 2018.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет